13

みてみましょう:

print([object, ...], *, sep=' ', end='\n', file=sys.stdout)

http://docs.python.org/py3k/library/functions.html?highlight=print#print

それをどのように解釈でき'*'ますか?通常、アスタリスク('*')は多数のオブジェクトを意味します。しかし、ここではそれは私には謎です。2つのコンマの間...タイプミスかもしれないと思うことさえ恐れています。

4

2 に答える 2

15

これは、Python 3 の新しい機能を使用すべきではない場所に適用した誰かによって挿入された、ドキュメントのエラーです。その後、修正されました ( issue 15831を参照)。

使用されているドキュメントの関数シグネチャは、疑似形式文法形式で示されていますが、*マーカーを追加することは、実際の Python 構文を使用する場合にのみ意味があります。その場合、代わりに[object, ...], *署名の部分がリストされているはずです。*objects

修正版は次のようになります。

print(*objects, sep=' ', end='\\n', file=sys.stdout, flush=False)

ドキュメントのオンライン開発版は現在のところまだ更新されていませんが、ドキュメントのソースは修正されています。ドキュメントの再生成をリクエストできるかどうか確認します。

明確にするために:*構文は Python 3 で有効であり、次の引数は位置引数ではなく、キーワード引数としてのみ使用できることを意味します。ただし、これは関数には適用されません。すべての位置引数はとにかく出力され、キーワード引数と間違われることは決してないからです。print()

于 2012-09-22T09:39:25.027 に答える
13

次の引数はキーワードのみであることを意味します。つまり、それらを位置引数として指定することはできません。たとえば、次のように名前を使用する必要があります。

>>> def f(*, a): pass
... 
>>> f(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: f() takes exactly 0 positional arguments (1 given)
>>> f(a=1)
>>> # ok

もう一つの例:

>>> def g(*a, b): pass
... 
>>> g(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: g() needs keyword-only argument b
>>> g(1, 2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: g() needs keyword-only argument b
>>> g(1, b=2)
>>> # ok
>>> g(1, 2, b=3)
>>> # ok
于 2012-09-22T09:39:23.340 に答える