0

0 2これを Python に与えると、奇妙な結果が得られるのはなぜですか?

#tuples ~wtF?
a=()
b=(a)
c=(a,1)
len(b)
len(c)

注意: 1 2リストに対して期待される結果が得られます。

a=[]
b=[a]
c=[a,1]
len(b)
len(c)

これは Linux で発生しています。

$ python --version
Python 2.7.2+

編集:これまでの回答を書く

それで、これはどういうわけか割り当て,のせいですか?c=(a,1)

>>> print b
()
>>> print c
((), 1)
4

2 に答える 2

6

角かっこはそれをタプルにしません-コンマはします。検討:

>>> 5 * (3 + 2)
25

そこの括弧は「これを最初に行う」という意味です。括弧:

b=(a)

同じ意味です。したがって、これは

b = a 

b is aなりますTrue

b空のタプルを含むタプルを作成するには、次のことを行う必要があります。

b = a, 

繰り返しますが、角かっこはそれをタプルにしません (()空のタプルであるという特殊なケースを除いて)、コンマはそうします。

編集については、

c = (a, 1)

以来a = ()、これは以下と同じです:

c = ((), 1)

つまり、空のタプル and を含むタプル1です。()は常に空のタプル (空のリストと同じ[]) ですが、括弧が「タプル」を意味するのはこれだけです。上記は次と同じです。

c = (), 1

通常、人々はここに角かっこを含めますが (タプルのreprandstrは常にそうします)、これは意味があるというよりは、スタイルのためです。

于 2012-06-08T02:32:16.990 に答える
5

(a)is just のaような(1+2)単なる式1+2です。

1 項目のタプルが必要な場合は、 と記述し(a,)ます。ところで、同じ構文はリストでも機能します: [a,]. また、関数の引数リストも同様です。末尾のコンマは、コンマ区切りのリストがある場所ならどこでも使用できます。

于 2012-06-08T02:30:35.823 に答える