函数的形参
- 函数形参的四大参数
参数分为:形参(形式参数)和实参(实际参数)
形参分为:位置参数、默认参数、可变参数、关键字参数
位置参数:形参和实参个数 位置必须保持一致
最好按位置传参,如果位置不对应就指定说明
def getInfo(name,age):
print(name,age)
getInfo('laoli',38)
getInfo(38,'laoli') 位置不对
getInfo(age=20,name='lee') 指定说明
def power(x,n):
print(x ** n)
power(2,3) 按照位置参数依次赋给参数x,n
def power(x, n):
s = x ** n
return s
print(power(5, 3))
默认参数 :形参和实参可以不一致,如果没有传递值,用默认值
必选参数在前,默认参数在后
当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面
def mypow(x,n=2): 默认参数n=2
print(x**n)
mypow(5) 用默认参数
mypow(5,3)
定义默认参数指向对象要为不变对象
def add_end(l=None): 变量[] and 不变对象None 的区别
if l is None:
l = []
l.append('end')
return l
print(add_end())
print(add_end())
print(add_end())
可变参数:允许传入0个或任意个参数,函数调用时组装一个元组,
*a:可变参数;a:是元组数据类型
def mysum(*a): 定义函数时把形式参数定义为可变参数
sum = 0
for item in a:
sum += item
print(sum)
mysum(1,2,3,4)
def mysum(a):
sum = 0
for item in a:
sum += item ** 2
print(sum)
mysum([1,2,3,4]) a 为一个列表
关键字参数:允许传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个字典
**kwargs代表关键字参数,是一个字典,可以传递任意多个key-value
def getStuInfo(name, age, **kwargs):
print(name, age,kwargs)
getStuInfo('westos','20',gender='male',hobbies=['coding','running']) 可以传入必选参数,也可以传入任意个关键字参数
getStuInfo('westos','18') 可以不传入关键字参数
关键字参数具有扩展函数的功能,比如在用户注册的功能,除了必选项,可选项就可以用关键字参数实现
命名关键字参数(限制关键字参数名字,必须传入参数名)
*是特殊分隔符,*后面的参数被视为命名关键字参数
def getStuInfo(name,age,*,city,job):
print(name,age,city,job)
getStuInfo('westos','20',city='Beijing',job='Engineer')
当命名关键字参数具有默认值,调用时可不传入参数
def getStuInfo(name,age,*,city='Beijing',job):
print(name,age,city,job)
getStuInfo('westos','20',job='Engineer')
参数组合
调用顺序:必选参数、默认参数、可变参数/命名关键字参数和关键字参数
def f1(a, b, c=0, *args, **kw):
print('a=', a, 'b=', b, 'c=', c, 'args =', args, 'kw =', kw)
def f2(a, b, c=0, *, d, **kw):
print('a=', a, 'b=', b, 'c=', c, 'd =', d, 'kw =', kw)
函数调用时,自动感召参数位置和参数名把对应的参数传进去
f1(1, 2)
f1(1, 2, c=3)
f1(1, 2, 3, 'a', 'b')
f1(1, 2, 3, 'a', 'b',x=99)
f2(1,2,d=99,ext=None)
通过元组和字典调用函数
def f1(a, b, c=0, *args, **kw):
print('a=', a, 'b=', b, 'c=', c, 'args =', args, 'kw =', kw)
args = (1, 2, 3, 4)
kw = {'d': 99, 'x': ''}
f1(*args,**kw)
def f2(a, b, c=0, *, d, **kw):
print('a=', a, 'b=', b, 'c=', c, 'd =', d, 'kw =', kw)
args = (1, 2, 3)
kw = {'d': 88, 'x': ''}
f2(*args,**kw)