Star运算符是什么意思?
可能重复:
* args和** kwargs是什么意思?
*
运算符在Python中的含义是什么,比如像zip(*x)
或f(**k)
这样的代码?
单星*
将序列/集合解开成位置参数,所以你可以这样做:
def sum(a, b):
return a + b
values = (1, 2)
s = sum(*values)
这将解压元组,使其实际执行为:
s = sum(1, 2)
双星**
功能相同,仅使用字典并命名参数:
values = { 'a': 1, 'b': 2 }
s = sum(**values)
你也可以结合:
def sum(a, b, c, d):
return a + b + c + d
values1 = (1, 2)
values2 = { 'c': 10, 'd': 15 }
s = sum(*values1, **values2)
将执行为:
s = sum(1, 2, c=10, d=15)
另请参见第4.7.4节 - 解包Python文档的参数列表。
此外,您可以定义函数来获取*x
和**y
参数,这允许一个函数接受任何数量的声明中未具体指定的位置和/或命名参数。
例:
def sum(*values):
s = 0
for v in values:
s = s + v
return s
s = sum(1, 2, 3, 4, 5)
或与**
:
def get_a(**values):
return values['a']
s = get_a(a=1, b=2) # returns 1
这可以允许您指定大量的可选参数,而无需声明它们。
再次,你可以结合:
def sum(*values, **options):
s = 0
for i in values:
s = s + i
if "neg" in options:
if options["neg"]:
s = -s
return s
s = sum(1, 2, 3, 4, 5) # returns 15
s = sum(1, 2, 3, 4, 5, neg=True) # returns -15
s = sum(1, 2, 3, 4, 5, neg=False) # returns 15
一个小点:这些不是运营商。 运算符在表达式中用于从现有值中创建新值(例如,1 + 2变为3)。这些*和**是函数声明和调用语法的一部分。
它被称为扩展调用语法。 从文档:
如果语法*表达式出现在函数调用中,则表达式必须计算为一个序列。 来自这个序列的元素被视为它们是附加的位置参数; 如果存在位置参数x1,...,xN,并且表达式计算为序列y1,...,yM,则这相当于具有M + N个位置参数x1,...,xN,y1,...的调用。 ..,yM。
和:
如果语法**表达式出现在函数调用中,则表达式必须计算为一个映射,其中的内容被视为附加关键字参数。 如果关键字出现在expression和explicit关键字参数中,则会引发TypeError异常。
链接地址: http://www.djcxy.com/p/1569.html上一篇: What does the Star operator mean?
下一篇: Unpacking, extended unpacking, and nested extended unpacking