18

刚刚在 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

4 回答 4

33

您需要明确地将其设为元组(参见官方教程):

def returns_tuple_of_one(a):
    return (a, )
于 2011-07-13T16:16:13.607 回答
14

这不是错误,单元组是由val,or构造的(val,)。在 python 语法中定义元组的是逗号而不是括号。

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

引用序列和元组文档

一个特殊的问题是包含 0 或 1 项的元组的构造:语法有一些额外的怪癖来适应这些。空元组由一对空括号构成;一个包含一个项目的元组是通过一个带有逗号的值来构造的(将单个值括在括号中是不够的)。丑陋,但有效。

于 2011-07-13T16:18:08.020 回答
2

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

于 2011-07-13T16:18:22.390 回答
-2

tuple()您可以使用内置方法来代替那个难看的逗号。

def returns_tuple_of_one(a):
    return tuple(a)
于 2014-03-27T20:49:10.487 回答