5

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

t = 3,
type(t)

返回元组类型。为什么?

4

4 回答 4

13

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

>>> def f(x):
...     print x
... 
>>> f(3)
3
>>> f(3,)
3
>>> f((3,))
(3,)
于 2012-04-03T21:43:27.720 回答
6

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

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

>>> type((3,))
<type 'tuple'>
于 2012-04-03T21:42:08.750 回答
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)]
于 2012-04-03T21:49:38.507 回答
0

Infunc(bunch_of_args)你可以在最后一个 arg 后面加上逗号,就像 in

alist = [1, 2, 3, ]
于 2012-04-03T21:50:00.650 回答