type(3,)
int 型を返します。
t = 3,
type(t)
タプルの型を返します。なんで?
関数呼び出し演算子を形成する括弧内のコンマは、タプルを構築するためではなく、引数を区切るためのものです。したがって、type(3, )
と同等type(3)
です。文法では、引数リストの最後に追加のコンマを使用できます。タプルを構築するには、追加のかっこのペアが必要です。
>>> def f(x):
... print x
...
>>> f(3)
3
>>> f(3,)
3
>>> f((3,))
(3,)
ビルトインtype()
は関数であるため、コンマはタプルコンストラクターではなく引数セパレーターとして解析されています。
>>> type(3,)
<type 'int'>
>>> type((3,))
<type 'tuple'>
Python は関数の引数の末尾のコンマを無視すると思われます。
def f (a):
print a
print type(a)
>>> f(3,)
3
<type 'int'>
括弧なしでコンマ区切りの値を使用してタプルを作成する方法は、どこでも機能するとは限りません。リスト内包表記は良い例です:
>>> [a,a*2 for a in range(4)]
File "<stdin>", line 1
[a,a*2 for a in range(4)]
^
これを行う必要があります:
>>> [(a,a*2) for a in range(4)]
[(0, 0), (1, 2), (2, 4), (3, 6)]
ただし、リストのアンパックは正常に機能するため、制限のないカンマ区切りの値が許可される場所は少し変数です。
>>> [(a,b) for a, b in zip(range(4),range(4))]
[(0, 0), (1, 1), (2, 2), (3, 3)]
のようにfunc(bunch_of_args)
、最後の引数の後にカンマを続けることができます
alist = [1, 2, 3, ]