* 语法
用于函数传参中,对于需要多个位置参数(positional argument)的函数,将元组或列表展开(unpacking)为一个或多个位置参数。
注:其实只要是可迭代(iterable)的对象都可以通过此方式展开,而不仅仅是前面讲的元组或列表。
row = ('ACME', 50, 91.5)
lis = list(row)
print(*row)
print(*lis)
等效于print('ACME', 50, 91.5)
输出:
ACME 50 91.5
ACME 50 91.5
** 语法
用于函数传参中,对于需要多个关键字参数(keyword argument)的函数,将词典展开(unpacking)为一个或多个关键字参数
d={ 'end':'!!!\n', 'sep':', '}
print('Hello', 'world', **d)
输出:
Hello, world!!!
同时使用 * 和 ** 语法
row = ('ACME', 50, 91.5)
d={ 'end':'!!!\n', 'sep':', '}
print(*row, **d)
输出:
ACME, 50, 91.5!!!
Exception Note
注意:print(*row, **d)
或 print(sep=', ', end='!!!\n', *row)
的写法都是OK的,但是不可以写成print(**d, *row)
. 因为位置参数不可在关键字参数之后。
否则将提示
SyntaxError: iterable argument unpacking follows keyword argument unpacking
参考
*args 和 **kwargs - 《Python 进阶》on Gitbook
网友评论