Для петлевых отпечатков Нет - PullRequest
0 голосов
/ 01 июня 2018

У меня есть список с кортежами:

my_list = [('a', 1), ('b', 2), ('c', 3)]

Когда я хочу напечатать каждый элемент списка, используя inline для цикла :

[print(i) for i in my_list]

Я получаю:

('a', 1)
('b', 2)
('c', 3)
[None, None, None]

Почему вывод также содержит оператор [None, ...]?

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Ваш [None, None, None] вытекает из вывода, сгенерированного print - print возвращает None и побочные эффекты помещения 3 операторов print в список (и вывода их частей), в результате получается список [None,None,None], которыйавтоматически переводится вашим переводчиком.

ИМХО было бы лучше деконструировать список и использовать фитинг sep:

my_list = [('a', 1), ('b', 2), ('c', 3)]

print(*my_list,sep="\n")

Вывод:

('a', 1)
('b', 2)
('c', 3)
0 голосов
/ 01 июня 2018

Возможно, вы используете интерактивный Python-интерпретатор , который вызовет выражение print(i) во время оценки и поэтому вы получите первую часть вывода:

('a', 1)
('b', 2)
('c', 3)

Более тогорезультат вызова print(i) (это значение, которое вы получаете при оценке выражения print(i)) равно None, и так как вы используете понимание списка значение выражения, которое вы передалипереводчику - [None, None, None].Как обычно, интерпретатор печатает значение введенного вами выражения, которое объясняет последнюю строку:

[None, None, None]

Если бы вы выполнили выражение в виде скрипта, вы бы получили ожидаемый результат:

% cat ./1.py
#!/usr/bin/python3

[print(i) for i in range(1, 3)]
% ./1.py
1
2

Обратите внимание, что это , а не и , встроенный для цикла , насколько я могу судить, такого понятия не существует.Вместо этого он называется списком и представляет собой специальный синтаксис для создания списков.

Если вы находитесь в интерпретаторе и хотите одну строку для цикла, вы можете попробовать:

for i in range(3): print(i)

, но вам нужнонажать , дважды ввести .

...