Type(3,)在python中返回一个整数而不是一个元组,为什么?

时间:2012-04-03 21:39:28

标签: python types tuples

type(3,)返回int类型,而

t = 3,
type(t)

返回元组类型。 为什么呢?

4 个答案:

答案 0 :(得分:13)

在构成函数调用运算符的括号内,逗号用于构建元组,但用于分隔参数。因此,type(3, )相当于type(3)。语法允许在参数列表末尾添加另一个逗号。你需要一对额外的parens来构建一个元组:

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

答案 1 :(得分:6)

内置type()是一个函数,因此逗号被解析为参数分隔符而不是元组构造函数。

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

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

答案 2 :(得分: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)]

答案 3 :(得分:0)

func(bunch_of_args)中,您可以使用逗号跟随最后一个arg,就像在

中一样
alist = [1, 2, 3, ]