程序调用函数需要四步:
**形式参数(形参):**在函数创建和定义过程中使用的参数。
**实际参数(实参):**在函数被调用的过程中传递进来的参数。
形参只是代表一个位置、一个变量名,没有具体的值。
实参是一个具体的值,是赋值到变量名中的值。
实参默认按位置顺序依次传递给形参,若参数个数不对,就会报错
关键字参数:
普通的参数叫做位置参数,调用时需要按照位置传递参数值。
关键字参数就是在调用函数,传入实参时指定形参的变量名。
可选参数(默认值参数):
定义函数时,如果有些参数存在默认值,可以在定义函数时直接为这些参数指定默认值。
当函数被调用时,如果没有传入对应的参数值,则使用函数定义时的默认值替代。
由于函数调用时需要按照顺序输入参数,可选参数必须定义在非可选参数的后面。
在定义函数时,可以设计可变数量参数,通过参数前增加单星号( * )或双星号( ** )实现。带有星号的可变参数只能出现在参数列表的后面。调用时,增加单星号的参数被当做 元组 类型传递到函数中,增加双星号的参数被当做字典类型传递到函数中。
>>>def vfunc(a, *b):
print(type(b))
for n in b:
a +=n
return a
>>>vfunc(1,2,3,4,5)
15
Python提供了按照形参名称输入实参的方式,函数调用如下:
result = func(x2=4, y2=5, z2=6, x1=1, y1=2, z1=3)
由于调用函数时指定了参数名称,所以参数之间的顺序可以任意调整。
参数传递的基本顺序:
>>> def add(x,y):
>>> return x + y
>>> add(3,4)
7
>>> def add(x,y):
>>> return x + y
>>> add(y = 4,x = 3)
7
>>> def test_fun(a,b = 6,*c,**d):
>>> print("a = ",a,"b = ",b,"c = ",c,"d = ",d)
>>> test_fun(1)
a = 1 b = 6 c = () d = {}
>>> test_fun(1,2)
a = 1 b = 2 c = () d = {}
>>> test_fun(1,2,3)
a = 1 b = 2 c = (3,) d = {}
>>> test_fun(1,2,3,4)
a = 1 b = 2 c = (3,4) d = {}
>>> test_fun(a = 1)
a = 1 b = 6 c = () d = {}
>>> test_fun(a = 1,b = 2,c = 3) #c和d是占位符,不是名称,c是不确定数量的单个变量,d是有键有值
a = 1 b = 2 c = () d = {'c': 3}
>>> test_fun(1,2,3,4,x = 1)
a = 1 b = 2 c = (3,4) d = {'x': 1}
>>> test_fun(1,2,3,4,5,6,x = 1,y = 2,z = 3)
a = 1 b = 2 c = (3, 4, 5, 6) d = {'x': 1, 'y': 2, 'z': 3}
>>> test_fun(1,2,3,4,b = 8) #b不能二次赋值
TypeError: test_fun() got multiple values for argument 'b'
函数: 有返回值
过程: 无返回值
Python中只有函数,没有过程。如果没有return语句,默认返回None。
>>>def func(a, b):
return a*b
>>>s = func("knock~", 2)
>>>print(s)
knock~knock~
>>>def func(a, b):
return b,a
>>>s = func("knock~", 2)
>>>print(s, type(s))
(2, 'knock~')