几种传参方式和解构介绍
位置参数
- def f(x,y)
参数缺省值
- def f(x,y=1)
可变位置参数
- def func(*args)
def sum(*nums):
result = 0
print(nums) #看看nums变成的啥?
for i in nums:
result += i
return result
print(sum(1,2,3))
------------------------
(1, 2, 3) # 组织到一个tuple中
6
- 可接受多个实参
- 收集来的实参组织到一个 tuple
可变关键字参数
- def func(**kwargs)
def func(**kwargs):
print(kwargs)
func(a=1, b=2)
-------------------
{'a': 1, 'b': 2}
- 可变关键字参数收集形成一个 dict
- 混合使用参数:普通参数放在参数列表前面,可变参数在后且可变位置参数需要在可变关键字参数之前
def func(x,y,*args,**kwargs)
keyword-only 参数
- py3 新增,在一个
*
之后,或在一个可变位置参数之后出现的普通参数即为 keyword-only 参数
# 可变位置参数后keyword-only参数
def fn(*args,x):
print(args, x, sep='\n', end='\n')
fn(1, 2, 3, x=4)
--------------------
(1, 2, 3)
4
# *之后的keyword-only参数
def fn(*,x,y)
print(x,y)
fn(x=1, y=2)
---------------------
1 2
混合使用遵循规则
- 可读易懂
- 参数列表一般顺序为:普通参数,缺省参数,可变位置参数,keyword-only 参数 (可带缺省值)、可变关键字参数
def fn(x, y, z=3, *args, m=4, n, **kwargs)
def fn(x, y, z=0, *args, m=1, n, **kwargs):
print(x,y,z,m,n)
print(args)
print(kwargs)
fn(1,2,3,4,5,m=6,n=2,i=1,j=2)
-------------------------------
1 2 3 6 2
(4, 5)
{'i': 1, 'j': 2}
参数解构
- 在可迭代对象前使用
*
或**
, 提取其所有元素作为函数的实参 *
解构成位置参数**
解构成关键字参数
def sum(*nums):
result = 0
print(nums)
for i in nums:
result += i
return result
print(sum(*range(1,4)))
print(sum(*[1, 2, 3]))
print(sum(1,2,3))
----------------------
(1, 2, 3)
6
(1, 2, 3)
6
(1, 2, 3)
6
参考
- magedu