Кто-нибудь знает аргументы относительно того, почему оператор унарного (*
) не может использоваться в выражении, включающем итераторы/списки/кортежи?
Почему это ограничивается функцией распаковки? или я ошибаюсь, думая об этом?
Например:
>>> [1,2,3, *[4,5,6]]
File "<stdin>", line 1
[1,2,3, *[4,5,6]]
^
SyntaxError: invalid syntax
Почему оператор *
не работает:
[1, 2, 3, *[4, 5, 6]] give [1, 2, 3, 4, 5, 6]
тогда, когда оператор *
используется с вызовом функции, он разворачивается:
f(*[4, 5, 6]) is equivalent to f(4, 5, 6)
Существует сходство между +
и *
при использовании списков, но не при расширении списка другим типом.
Например:
# This works
gen = (x for x in range(10))
def hello(*args):
print args
hello(*gen)
# but this does not work
[] + gen
TypeError: can only concatenate list (not "generator") to list