Palavras-chave: Python, pegadinhas, gotchas, pitfalls, listas, extends
Em Python o operador de soma e atribuição += pode ser usado na forma “a += 1” que tem o mesmo significado que a expressão “a = a + 1“.
Até aí nada de diferente. Mas a linguagem Python disponibiliza uma função própria para tratar o operador += (__iadd__) e outra para o operador de adição + (__add__). Na maioria das vezes o método __iadd__ chama __add__ e tudo fica certo. Mas não é isso que acontece com as listas.
Nos objetos do tipo list o método .__iadd__() irá chamar o método .extend() da lista. Desta forma podemos fazer coisas como:
>>> a = [1,2,3] >>> a += [4,5,6] >>> a [1, 2, 3, 4, 5, 6] >>> a.extend([7,8,9]) >>> a [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> a = [1,2,3] >>> a + [4,5,6] [1, 2, 3, 4, 5, 6]
As coisas começam a ficar complicadas quando temos uma situação que envolve strings, como no caso seguinte. Lembre-se que strings também são consideradas seqüências em Python.
>>> a = [1,2,3] >>> a + "spam" Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can only concatenate list (not "str") to list >>> a += "spam" >>> a [1, 2, 3, 's', 'p', 'a', 'm'] >>> a.extend("eggs") >>> a [1, 2, 3, 's', 'p', 'a', 'm', 'e', 'g', 'g', 's']
Os exemplos acima deixam claro que é preciso tomar cuidado com esse tipo de situação em seus programas.
Alguns argumentam que esse comportamento da lista não é muito consistente e que esse “problema” deveria ser consertado. Mas existe um outro grupo que diz que esso é o comportamento correto. Até que esses grupos entrem num acordo é bom ficarmos de olho.
“Palavras-chave: Python, pegaGinhas,”
Ops! Arrumado, valeu :)