Python list .__ iadd__ примет аргумент str - PullRequest
0 голосов
/ 07 мая 2020

Я случайно узнал об этом:

>>> l = []
>>> l + 'a'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "str") to list
>>> l += 'a'
>>> l
['a']
>>> l + 'abcd'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "str") to list
>>> l += 'abcd'
>>> l
['a', 'a', 'b', 'c', 'd']

Это ожидаемое поведение? Я нигде не могу найти объяснения этому, и это кажется мне действительно странным. потому что это итерация, поэтому я попробовал:

>>> class Test:
...     l = [1, 2, 3]
...     
...     def __iter__(self):
...         for i in self.l:
...             yield i
... 
>>> l += Test()
>>> l
['a', 'a', 'b', 'c', 'd', 1, 2, 3]
>>> l + Test()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "Test") to list

Теперь это кажется довольно странным и не очень pythoni c, мне было интересно, может ли это быть ошибкой, какие-нибудь мысли?

...