2016-08-09 7 views
1

後の末尾にカンマ:Pythonの:私は、関数パラメータリストの末尾のコンマに困惑していますキャッチオール引数

def f(*args,): pass 

は私にSyntaxError例外を稼いでいます。 Python 3では、さらに:

def f(*, arg = 1,): pass 

は、構文エラー例外を発生させます。両方とも閉じ括弧を指します。

末尾のカンマを削除すると、すべて静かです。 私はhttps://docs.python.org/3/reference/compound_stmts.html#function-definitionsで私の頭を傷つけていますが、それは何とか私を超えています(そしておそらく間違っています...少なくとも私のブラウザのレンダリングでは、最後の閉じ括弧はparameter_listの定義にはペアにできません)。 何か間違っていますか? 私は人の

def f(*, 
     a: "doc A" = 1, 
     b: "doc B" = 2, 
     c: "doc C" = 3, 
     d: "doc D" = 4, 
     # ... and maybe more, 
    ) 

タイプ、およびこの問題の種類-のは(多分それは間違っている部分であり、そして私は人の, a: "doc A" = 1タイプになる必要があります - しかし、それは私には奇妙に見える)私を悩ませています。

Gentoo ebuildsで配布されているpythonをdev-lang/python 2.7.12と3.5.2(http://www.python.org)として使用しています。

+2

機能的な引数がなくなったときに、最後にカンマが必要なのはなぜですか? –

+1

@be_good_do_good:末尾のカンマで簡単に引数を並べ替えたり、新しいものを追加したりできます。それは編集の便利さとメンテナンスの容易さです。機能面では、もちろん違いはありません。 – Hamlet

+0

@be_good_do_good:行の追加/削除/並び替えの際の一貫性とより小さなバージョン差分のため。彼らは、私が正しく覚えていれば、PEP8を含む多くのスタイルガイドによって奨励されています。 – bluenote10

答えて

-2

パラメータリスト内の末尾のカンマは、コンマで区切られた複数の値として扱われます。関数のパラメータは、末尾にカンマがある場合

a = (4) 
type (a) 

>> output: int 


a = (4,) 
type (a) 

>> output: tuple 

だから、Pythonは価値があるはずですが、そこではないと思いますので、構文エラーを発生させます。

リスト内の末尾のカンマは問題ありません。

list1 = [ 0, 1, 2, 3, ] 

>> totally fine 
+0

まあ、 'del f(a、):pass'もまあまあです。 – Hamlet

+0

オペレータは、呼び出しシーケンスではなく、_deffinitions_ファンクションのカンマを要求しています。 – martineau

関連する問題