解凍/スプラット演算子*
および**
は、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 ✓
私が見逃したさまざまなバージョンの間に他の矛盾はありますか?私はPEPとReadmesを調べていますが、ドキュメントはこれで詳しく説明されていません。
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で削除されました。
PEP 311 :タプルパラメーターのアンパックが削除されました。
def foo(a, (b, c)): ...
を書き込むことができなくなりました。代わりにdef foo(a, b_c): b, c = b_c
を使用してください。
PEP 3132 :Extended Iterable Unpacking。これで
a, b, *rest = some_sequence
のようなものを書くことができます。そして*rest, a = stuff
ですら。残りのオブジェクトは常に(おそらく空の)リストです。右側は反復可能です。PEP 3102 :キーワードのみの引数パラメータリストの
*args
の後に発生する名前付きパラメータは、コール。また、パラメーターリストで裸の*
を使用して、可変長の引数リストを受け入れないが、キーワードのみの引数があることを示すことができます。
PEP 448 、追加のアンパックの一般化。
私が知る限り、すべての構文の変更をリストする単一のページはありません。バージョンごとの構文の変更は Pythonの新機能 セクションにリストされています。または、各リリースの文法仕様を確認して違いを確認することもできます。