Ответ 1
Примерно в 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, теперь могут быть вызывается с использованием аргументов ключевого слова формы
keyword = value
.
Теперь есть специальный синтаксис, который вы можете использовать вместо
apply()
функция.f(*args, **kwds)
эквивалентноapply(f, args, kwds)
. Вы также можно использовать вариацииf(a1, a2, *args, **kwds)
, и вы можете оставить один или другой:f(*args)
,f(**kwds)
.
В Python 3.0 была удалена распаковка параметра Tuple.
PEP 3113: Параметр Tuple распаковка удалена. Вы больше не можете писать
def foo(a, (b, c)): ...
. Вместо этого используйтеdef foo(a, b_c): b, c = b_c
.
PEP 3132: Extended Iterable Распаковка. Теперь вы можете писать такие вещи, как
a, b, *rest = some_sequence
. И даже*rest, a = stuff
. Остальной объект всегда a (возможно, пустой) список; правая часть может быть любым итерируемым.PEP 3102: Аргументы только для ключевого слова. Именованные параметры, возникающие после
*args
в списке параметров должен быть указан с использованием синтаксиса ключевых слов в вызове. Вы также можете использовать голый*
в списке параметров, чтобы указать что вы не принимаете список аргументов переменной длины, но у вас есть аргументы только для ключевого слова
PEP 448, дополнительный распаковка обобщений.
Насколько я знаю, нет единственной страницы, в которой перечислены все изменения синтаксиса. За изменения синтаксиса версии перечислены в разделе What new in Python или вы можете проверить спецификацию грамматики каждой версии, чтобы увидеть различия.