2012-04-03 107 views

回答

13

形成的函數調用操作的括號內,逗號是建立的元組,但對於分離參數。因此,type(3,)相當於type(3)。語法允許在參數列表末尾添加一個逗號。你需要一對額外的括號中建立一個元組:

>>> def f(x): 
...  print x 
... 
>>> f(3) 
3 
>>> f(3,) 
3 
>>> f((3,)) 
(3,) 
6

內置的type()是一個函數,所以逗號被解析爲參數分隔符而不是元組構造函數。

>>> type(3,) 
<type 'int'> 

>>> type((3,)) 
<type 'tuple'> 
+1

無論「f」採用多少個參數,逗號都將被解析爲參數分隔符。 – 2012-04-03 21:43:21

+0

你是對的 - 我只是在我的最後證實了這一點。將編輯。 – 2012-04-03 21:43:58

2

我懷疑的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)] 
0

func(bunch_of_args)你被允許跟隨最後ARG用逗號,就像在

alist = [1, 2, 3, ] 
相關問題