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): ...
Python 1.4+:
关键字参数:现在可以使用形式的关键字参数调用用 Python 编写的函数和方法keyword = value
。
Python 1.6+
现在可以使用特殊语法代替apply()
函数。f(*args, **kwds)
相当于apply(f, args, kwds)
。您也可以使用变体f(a1, a2, *args, **kwds)
,并且可以省略其中一个:f(*args)
, f(**kwds)
.
Python <= 2.7:
在 Python 3.0 中删除了元组参数解包。
PEP 3113:元组参数解包已删除。你不能再写了def foo(a, (b, c)): ...
。改为使用def foo(a, b_c): b, c = b_c
。
Python 3.0+
PEP 3132:扩展的可迭代拆包。您现在可以编写类似a, b, *rest =
some_sequence
. 甚至*rest, a = stuff
。rest 对象总是一个(可能是空的)列表;右手边可以是任何可迭代的。
PEP 3102:仅关键字参数。参数列表中出现的命名参数
*args
必须在调用中使用关键字语法指定。你也可以*
在参数列表中使用一个bare来表示你不接受可变长度的参数列表,但是你确实有关键字参数
Python 3.5+
PEP 448,额外的解包概括。
据我所知,没有一个页面可以列出所有语法更改。每个版本的语法更改列在Python 中的新增功能部分中,或者您可以查看每个版本的语法规范以查看差异。