cs9*_*s95 17 python function parameter-passing argument-unpacking iterable-unpacking
拆包/图示运营商*和**在横跨Python版本(2.7,3.X <3.5和3.x> = 3.5)其适用性广泛不同.
例如:
| 2.7 | 3.1-3.4 | 3.5
----------------------------------------------------------------------
function(*args) ? ? ?
x, *y, z = [1, 2, 3, 4, 5] x ? ?
{**x, **y} x x ?
Run Code Online (Sandbox Code Playgroud)
我错过了各种版本之间是否还有其他差异?我正在浏览PEP和Readmes,但文档并未详细说明.
Ash*_*ary 22
大约1992年(不确定Python版本).这是来自Python 1.0.1的语法文件.
# 06-Apr-92:
# Use only '*' for varargs list
# 31-Mar-92:
# Tighten syntax for try statements
# 27-Feb-92:
# Allow NEWLINE* after eval input
# 16-Jan-92:
# Added '*' as alternative for '+' in varargs syntax
# (Not sure which alternative is better yet.)
# 11-Jan-92:
# Variable length argument list syntax added: def f(a, b, +rest): ...
Run Code Online (Sandbox Code Playgroud)
关键字参数:现在可以使用表单的关键字参数调用用Python编写的函数和方法
keyword = value.
现在有一些特殊的语法可以代替
apply()函数使用.f(*args, **kwds)相当于apply(f, args, kwds).你也可以使用变体f(a1, a2, *args, **kwds),你可以留下一个或另一个:f(*args),f(**kwds).
在Python 3.0中删除了元组参数解包.
PEP 3113:删除了元组参数解包.你不能再写了
def foo(a, (b, c)): ....请def foo(a, b_c): b, c = b_c改用.
PEP 3132:扩展的可迭代解包.你现在可以写像
a, b, *rest = some_sequence.甚至*rest, a = stuff.其余对象始终是(可能为空)列表; 右侧可以是任何可迭代的.PEP 3102:仅关键字参数.
*args必须在调用中使用关键字语法指定在参数列表中出现的命名参数 .您还可以*在参数列表中使用bare 来指示您不接受可变长度参数列表,但是您确实有关键字参数
PEP 448,其他拆包概括.
据我所知,没有单个页面列出所有语法更改.每个版本的语法更改都列在Python的新内容部分中,或者您可以检查每个版本的语法规范以查看差异.