A compreensão da tupla do Python3.5 é realmente tão limitada?
Eu tenho amado as compreensões da tupla adicionadas ao Python3.5:
In [128]: *(x for x in range(5)),
Out[128]: (0, 1, 2, 3, 4)
No entanto, quando tentoreturn
uma compreensão de tupla diretamente, recebo um erro:
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
Isso é apenas um pequeno inconveniente, pois eu posso simplesmente atribuir a compreensão da tupla a uma variável e retornar a variável. No entanto, se eu tentar colocar uma compreensão de tupla dentro de uma compreensão de dicionário, recebo o mesmo erro:
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
Sinto que isso é um pouco mais problemático, pois a compreensão pode ser importante para o desempenho em algumas situações.
Não tenho nenhum problema em usar compreensões de dicionário e lista nessas situações. Quantas outras situações a compreensão da tupla não funciona quando outras pessoas o fazem? Ou talvez eu esteja usando errado?
Isso me faz pensar em que sentido era se seu uso é tão limitado ou talvez eu esteja fazendo algo errado? Se não estou fazendo algo errado, qual é a maneira mais rápida / mais pitônica de criar uma tupla que seja versátil o suficiente para ser usada da mesma maneira que as compreensões de lista e dicionário?