Автор оригинала: Chris.
Вопрос:|: Можно ли назвать функцию внутри Понимание списка утверждение?
Фон : Понимание списка является компактным способом создания списков. Простая формула – [Выражение + контекст]
Отказ
- Выражение: Что делать с каждым элементом списка?
- Контекст: Какие элементы для выбора? Контекст состоит из произвольного количества
для
иЕсли
заявления.
Например, код [x ** 2 для x в диапазоне (3)]
Создает список квадратных чисел [0, 1, 4]
С помощью выражения х ** 2
Отказ
Связанная статья: Понимание списка в Python – полезное иллюстрированное руководство
Итак, вы можете использовать функцию с возвращаемой или без возврата или без него в качестве выражения в понимании списка?
Ответ : Вы можете использовать любое выражение внутри понимания списка, включая функции и методы. Выражение может быть целым числом 42
, численное вычисление 2 + 2)
или даже функция звонка np.sum (x)
на любом ущербе ?| х Отказ Любая функция без возврата, возвращает
Нет по умолчанию. Вот почему вы даже можете позвонить в функции с побочными эффектами в операторе понимания списка.
Вот пример:
[print('hi') for _ in range(10)] ''' hi hi hi hi hi hi hi hi hi hi '''
Вы используете выброс подчеркивания _
Потому что вы хотите выполнить ту же функцию в десять раз. Если вы хотите распечатать первые 10 номеров в оболочку, следующий код делает трюк:
[print(i) for i in range(10)] ''' 0 1 2 3 4 5 6 7 8 9 '''
Давайте посмотрим на содержание списка, который вы только что создали:
lst = [print(i) for i in range(10)] print(lst) # [None, None, None, None, None, None, None, None, None, None]
Список содержит десять Нет
значения, потому что возвращаемое значение Печать ()
Функция это Нет
Отказ Побочный эффект выполнения функции печати в операторе понимания списка состоит в том, что первые десять значений от 0 до 9 появляются на вашем стандартном выходе.
Уолрус Оператор
Python 3.8 представил Оператор Walrus , также известный как Выражение назначения Отказ Этот оператор полезен, если выполнение определенной функции имеет побочные эффекты, которые вы не хотите. Например, если у вас есть метод создания строки внутри оператора понимания списка, обусловлен некоторым критерием фильтрации в суффиксе. Без оператора Walrus Python будет выполнять эту же рутину несколько раз, даже если это очень избыточно. Вы можете избежать этой резервирования, назначив его переменной S
После использования оператора WALRUS и повторное использование этой точной переменной в выражении.
import random def get_random_string(): return f'sss {random.randrange(0, 100)}' # Goal: Print all random strings that contain 42 # WRONG lst = [get_random_string() for _ in range(1000) if '42' in get_random_string()] print(lst) # ['sss 74', 'sss 13', 'sss 76', 'sss 13', 'sss 92', 'sss 96', 'sss 27', 'sss 43', 'sss 80'] # CORRECT lst = [s for _ in range(1000) if '42' in (s := get_random_string())] print(lst) # ['sss 42', 'sss 42', 'sss 42', 'sss 42', 'sss 42', 'sss 42', 'sss 42', 'sss 42', 'sss 42', 'sss 42', 'sss 42', 'sss 42', 'sss 42']
С оператором Walrus S ()
, вы храните результат вызова функции в переменной s
и извлечь его внутри выражения части списка. Все это происходит внутри утверждения по пониманию списка.
Я преподаю эти концепции в моем эксклюзивном академии электронной почты Finxter – присоединяйтесь к нам, это бесплатно!
Похожие видео: список пометки
Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.
Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.
Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.
Оригинал: “https://blog.finxter.com/python-function-call-inside-list-comprehension/”