Python中使用一个和两个星号*/**作为函数参数的用法-1. 使用一个星号*作为函数

1.1 收集多余的位置参数

收集多余的位置参数: 当你在函数定义中使用*args时,它会收集所有未命名的位置参数并将它们放入一个元组中。

当函数参数前面加一个星号*时,函数可以接收任意数量的位置参数。通常,这种参数被命名为*args,但名字可以随意。

def foo(*args):
    print(type(args))  # <class 'tuple'>
    for arg in args:
        print(arg)

def bar(a, b, *args):
    print(type(args))  # <class 'tuple'>
    for arg in args:
        print(arg)

foo(1,2,3,'a','b',3.6)
print('-'*30)
bar(1,2,3,'a','b',3.6)

输出:

<class 'tuple'>
1
2
3
a
b
3.6
------------------------------
<class 'tuple'>
3
a
b
3.6

1.2 解包列表或元组

在调用函数时,* 也可以用来解包列表或元组,使其元素作为单独的位置参数传递。注意解包后的列表、元组元素个数要与函数参数相同。

def foo(a,b,c):
    return a+b+c

lst = [1,2,3]
tu = (2,3,4)

print(foo(*lst))  # 6
print(foo(*tu))   # 9

1.3 强制关键字参数

如果你在参数列表中使用 *,它会要求在它之后的所有参数必须以关键字方式传递。
03.onestar.py

def foo(arg1, arg2, *, kwarg1, kwarg2):
    print(arg1, arg2, kwarg1, kwarg2)

调用foo(1,2, kwarg1= 3, kwarg2 = 4)输出:

1 2 3 4

调用foo(1,2, 3, 4),报错:

Traceback (most recent call last):
  File "03.onestar.py", line 31, in <module>
    foo(1,2, 3, 4)
TypeError: foo() takes 2 positional arguments but 4 were given
上一篇:24-10-1-读书笔记(二十一)-《契诃夫文集》(四)下([俄] 契诃夫 [译] 汝龙) 我爱你,娜坚卡。


下一篇:中间件技术