Python之函数-可变形参
可变参数
- 可变位置参数
- 在形参前使用 * 表示该形参是可变位置参数,可以接受多个实参 它将收集来的实参组织到一个tuple中
- 可变关键字参数
- 在形参前使用 ** 表示该形参是可变关键字参数,可以接受多个关键字参数
- 它将收集来的实参的名称和值,组织到一个dict中
总结:
- 有可变位置参数和可变关键字参数
- 可变位置参数在形参前使用一个星号*
- 可变关键字参数在形参前使用两个星号**
- 可变位置参数和可变关键字参数都可以收集若干个实参,可变位置参数收集形成一个tuple,可变 关键字参数收集形成一个dict
- 混合使用参数的时候,普通参数需要放到参数列表前面,可变参数要放到参数列表的后面,可变位 置参数需要在可变关键字参数之前
形参
- 可以有缺省值,定义时,如果没有提供该参数,动用缺省值. 缺省值的定义往后放
- 5种
-
- 普通形参:可以有缺省值,2种传实参方式都可以用
-
- *args 可变仅位置形参,只能接收按照位置传入的实参,可以接收0个或任意个,没有缺省值
-
- **kwargs 可变仅关键字形参,只能接收关键字传入的实参,可以接收0个或任意个. 形参的最后一个, 没有缺省值
- 普通形参
def add(x, y=5):
print(x, y)
return x + y
add(1), add(7, y=5), add(x=9), add(x=4, y=0), add(y=8, x=9)
add(), add(y=7), add(y=6, 7)
def add(x=4, y):
print(x, y)
- *args 可变仅位置形参
def add(*nums):
print(type(nums),nums)
add, add(1), add(1, 2), add(1, 2, [1])
def add(*nums):
print(type(nums), nums)
s = 0
for i in nums:
s += i
return s
add(1, 3, 5)
add(range(5))
add(nums=[1, 3, 5])
- **kwargs 可变仅关键字形参
def add(**kwargs):
print(type(kwargs), kwargs)
add(x=1, y=4)
add(1)
def add(**kwargs):
print(type(kwargs), kwargs)
for k,v in kwargs.items():
print(k, v)
add(x=1, y=4)
混合使用
def config(host, port, **kwargs):
print(host)
print(port)
print(kwargs)
config('localhost', '3306')
config('localhost', '3306', username='Runaway')
config('localhost', '3306', db='cmdb')
def config(host, port, *args, **kwargs):
print(host, port, args, kwargs)
config(1, 2, 3, 4, 5)
config(1, 2, x=1, y=2)