我非常喜欢Python3.5新增的元组推导式:
In [128]: *(x for x in range(5)),
Out[128]: (0, 1, 2, 3, 4)
然而,当我直接尝试返回元组推导时,我遇到了一个错误:
In [133]: def testFunc():
...: return *(x for x in range(5)),
...:
File "<ipython-input-133-e6dd0ba638b7>", line 2
return *(x for x in range(5)),
^
SyntaxError: invalid syntax
这只是一个小的不方便,因为我可以将元组推导分配给变量并返回变量。但是,如果我尝试在字典推导中放置元组推导,我会得到相同的错误:
In [130]: {idx: *(x for x in range(5)), for idx in range(5)}
File "<ipython-input-130-3e9a3eee879c>", line 1
{idx: *(x for x in range(5)), for idx in range(5)}
^
SyntaxError: invalid syntax
我感觉这可能是一个问题,因为在某些情况下,推导式对性能非常重要。
在这些情况下,我没有使用字典和列表推导式的问题。除了这种情况外,还有多少其他情况元组推导式不能正常工作?或者我使用方法不正确?
这让我想知道这个方法的意义是什么,如果它的使用范围如此有限,或者是我做错了什么?如果我没有做错什么,那么创建一个元组的最快/最符合Python风格的方法是什么,以便像列表和字典推导式一样灵活使用?
*
不是生成器表达式的一部分!它是展开符号。 - MisterMiyagireturn (*(...),)
,但是你应该使用tuple(...)
。 - tobias_kreturn
出现语法错误让我感到惊讶;这可能只是一个疏忽。 - Mark Dickinson