2012-04-03 106 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, ] 
相关问题