函数参数
python3中函数也可以用中文
def func(a,b): 站在函数定义角度上:位置参数,是必须传的参数
print(a,b)
站在调用函数的角度上
func(1,2) 按照位置传参
func(b = 1,a = 2) 按照关键字传参
func(1,b = 2) 混用:必须先按照位置传参
def welcome(name,sex='male'): sex 默认参数
print('welcome,%s,sex:%s%(name,sex))
welcome('fff')
welcome('female')
默认参数可以不传,不传用默认,如果不传的话就用传入的值
def age(age,my_age=18)
if age>my_age:
return False
else:
return True
-----------------------------------------------------
默认参数陷阱
针对可变数据类型,不可变不受影响
def c(a=[]):
a.append(1)
print(a)
c()
c()
c()
结果:
[1]
[1, 1]
[1, 1, 1]
---------------------------------------------------
def c(a=[]):
a.append(1)
print(a)
c([])
c([])
c([])
结果:
[1]
[1]
[1]
--------------------------------------------------
动态参数
arg形参 para实参
*是动态参数的标识 后面变量名
def func(*a):
h = 0
for item in a:
h += item
print(h)
func(33,44,55,88,77,78)
动态参数可以接受多个传过来的实参
li = [1,2,3,4,5,6,7]
func(*li) 把列表打散了传参
*在形参前,*是聚合,将每个参数组合成一个元组
*在实参前,*是打散,将一个列表或者元组打散成多个参数
一个*只针对按位置传参,不能关键字传参
func fa(**li):
print(li)
fa(a=1,b=1,c=1)
结果
{'a': 1, 'b': 1, 'c': 1}
**两个*是针对关键字传参,传出值是字典,变量变成key
**在关键字形参前是聚合 组成字典
**在实参前,是打散
def fa(*a,**f):
print(a)
print(f)
fa(3,8,3,5,6,5,8,g=4,c=7,o=9)
混用必须位置传参在前
实参传形参也是这样一个*的放在前面两个*放在后面
站在函数定义角度上:所有参数都是形参
位置参数
默认参数
动态参数:*args,**kwargs
站在函数调用的角度上:所有的参数都是实际参数
按照位置传参
按照关键字传参
混用先位置再关键字
先定义动态参数里面的*args再放默认参数再放**kwargs
如
def func(位置参数,*args,默认参数=10,**kwargs):
print(位置参数)
print(*args)
print(默认参数)
print(**kwargs)
这样可以显示出默认参数,如果默认参数放在了*args前,就永远都用不到设定的默认参数值
放在关键词传参前面,就而已用,但是必须要在写入时用字符串写出默认参数的变量名,然后赋值
例如:
def funk(a,b,*args,c=10,**kwargs):
print(a,b)
print(args)
print(c)
print(kwargs)
funk(3,5,4,8,6,2,1,z=10,y=8,o=9)
这样的话就可以将c=10利用,加载1和z=10中间的位置。