## 二、可变长形参
def func(*args): # args = (2,4,6,8,10)
num = 0
for i in args:
num += i
return num
sum_int = func(2,4,6,8,10)
print(sum_int) # 30
def func(**kwargs):
print(kwargs)
func(a=5,name = 'king') # {'a': 5, 'name': 'king'}
def func(x,y,z,*args):
print(x,y,z,args)
func(*(1,2,3,4),5,6,7) # 先打散成(1,2,3,4,5,6,7)
# 然后传给形参就变成 x=1,y=2,z=3,args=(4,5,6,7)
# 所以最后的结果是:1 2 3 (4, 5, 6, 7)
def func(x,y,**kwargs):
print(x,y,kwargs)
func(2,3,**{'name':'king','age':20})
# 2,3,{'name':'king','age':20}
形参中:*表示接收溢出的位置参数,**表示接收溢出的关键字参数
实参中:*表示传送的是位置参数,**表示传送的是关键字参数
def f1(name,age,gender):
print(f'my name is {name},my age is {age},my gender is {gender}')
def f2(*args,**kwargs):
print(f'args = {args}, kwargs = {kwargs}')
f1(*args,**kwargs)
f2(age =20, gender ='male', name ='king')
'''
args = (), kwargs = {'age': 20, 'gender': 'male', 'name': 'king'}
my name is king,my age is 20,my gender is male
'''
def f(x,y,**kwargs):
if 'name' not in kwargs or 'age' not in kwargs:
print('name和age必须用关键字实参进行传值')
return
print(kwargs['name'],kwargs['age'])
f(1,3,name='king',age=20)
# king 20
def f(i, *, name, gender='male', age):
print(i)
print(age)
f(1, x='king', age=19) '''TypeError: register() got multiple values for argument 'x' 。也就是关键字实参传值时不能随意改关键字形参的key'''
def f(i, *, name, gender='male', age):
print(i)
print(age)
f(1,'king', age=19)
def func(*args,**kwargs):
code
原文:https://www.cnblogs.com/itboy-newking/p/10953488.html