使用函数中的单个项返回元组

时间:2011-07-13 16:14:05

标签: python function return-value iterable-unpacking

刚刚在Python中发现了这一点奇怪的事情,我想将其记录下来 将其写成一个问题,以防其他人试图找到同样无用的答案搜索字词我

看起来像元组解包使得它如果你期望迭代返回值就不能返回长度为1的元组。 虽然看起来看起来很欺骗。请参阅答案。

>>> def returns_list_of_one(a):
...     return [a]
...
>>> def returns_tuple_of_one(a):
...     return (a)
...
>>> def returns_tuple_of_two(a):
...     return (a, a)
...
>>> for n in returns_list_of_one(10):
...    print n
...
10
>>> for n in returns_tuple_of_two(10):
...     print n
...
10
10
>>> for n in returns_tuple_of_one(10):
...     print n
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>>

4 个答案:

答案 0 :(得分:32)

您需要明确地将其设为元组(请参阅官方tutorial):

def returns_tuple_of_one(a):
    return (a, )

答案 1 :(得分:13)

这不是一个错误,一个元组是由val,(val,)构建的。它是逗号,而不是用python语法定义元组的括号。

您的函数实际上正在返回a本身,这当然不可迭代。

引用sequence and tuple docs

  

一个特殊问题是构造包含0或1的元组   items:语法有一些额外的怪癖来容纳这些。空   元组是由一对空括号构成的;一个元组   通过使用逗号跟随值来构造一个项目(它不是   足以将一个值括在括号中)。丑,但是   有效的。

答案 2 :(得分:2)

(a)不是单个元素元组,它只是一个带括号的表达式。使用(a,)

答案 3 :(得分:-2)

您可以使用tuple()内置方法,而不是那个丑陋的逗号。

def returns_tuple_of_one(a):
    return tuple(a)
相关问题