python function return-value iterable-unpacking

python - Devolviendo la tupla con un solo elemento de una función



function return-value (4)

Acabo de encontrar este poco de rareza en Python y pensé que lo documentaría, escríbalo como una pregunta aquí, en caso de que alguien más esté tratando de encontrar una respuesta con los mismos términos de búsqueda infructuosos que yo.

Parece que el desempaquetado de la tupla lo hace así que no puede devolver una tupla de longitud 1 si está esperando iterar sobre el valor de retorno. Aunque parece que las miradas son engañosas. Ver las respuestas

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


Debe hacerlo explícitamente como una tupla (consulte el tutorial oficial):

def returns_tuple_of_one(a): return (a, )


En lugar de esa coma fea, puedes usar el método incorporado tuple() .

def returns_tuple_of_one(a): return tuple(a)


Esto no es un error, una tupla está construida por val, o (val,) . Es la coma y no los paréntesis los que definen la tupla en la sintaxis de python.

Tu función es en realidad devolver a sí mismo, que por supuesto no es iterable.

Para citar los tutorial :

Un problema especial es la construcción de tuplas que contienen 0 o 1 elementos: la sintaxis tiene algunas peculiaridades adicionales para acomodarlos. Las tuplas vacías se construyen con un par de paréntesis vacíos; una tupla con un elemento se construye siguiendo un valor con una coma (no es suficiente para encerrar un solo valor entre paréntesis). Feo, pero efectivo.


(a) no es una tupla de un solo elemento, es solo una expresión entre paréntesis. Utilice (a,) .