Рубрики
Без рубрики

Python 3.8 Оператор Walrus (выражение назначения)

Выпуск Python 3.8 пришел с захватывающей новой особенностью: оператор Walrus. Это выражение задания, или в более простых терминах назначение внутри выражения. https://youtu.be/rgtjhaziv7w Давайте немедленно погрузимся в практику и посмотрим на следующий код: пользователи = [{«Имя»: «Алиса», «UID»: 123, «Утверждено»: True}, {«Имя» : «Боб», «UID»: 298, «Утверждено»: True}, {«Имя»: … Python 3.8 Оператор Walrus (выражение присваивания) Подробнее »

Автор оригинала: Lukas.

Выпуск Python 3.8. пришел с захватывающей новой особенностью: Уолрус Оператор Отказ Это Призначающее выражение или в более простых терминах назначение внутри выражения.

Давайте немедленно погрузимся и посмотрим на следующий код:

users = [
            {'name': 'Alice', 'uid': 123, 'approved': True},
            {'name': 'Bob',   'uid': 298, 'approved': True},
            {'name': 'Cloe',  'uid': 342},
            {'name': 'Dain',  'uid': 498, 'approved': False},
            {'name': 'Elon',  'uid': 567, 'approved': True},
        ]

appr_count = 0      
for user in users:
    appr = user.get('approved')
    if appr:
        appr_count += 1
        print(appr)

print(appr_count)

У нас есть список пользователей, данные которых представлены в словаре. Мы хотим сосчитать количество утвержденных пользователей. Вход «Утверждено» установлен на Правда Если пользователь был утвержден. Если пользователь не был одобрен, запись «Утверждено» может быть Ложь или отсутствует.

Внутри петли мы извлекаем значение «Утверждено» Сначала из пользователя пользователя и назначьте его переменную Утверждаться Отказ Во-вторых, мы используем IF-оператор для проверки, если значение Утверждаться это либо Правда или Ложь / Нет Отказ Используя оператор WALRUS, мы можем объединить эти два шага в одну, чтобы наш цикл выглядел так:

for user in users:
    if appr := user.get('approved'):
        appr_count += 1
        print(appr)

Попробуй сам:

Теперь вы можете увидеть, как мы назначаем и IF-выражение, стали одним шагом в нашем коде. И именно поэтому это называется Выражение назначения Отказ

Приложения

Оператор Walrus имеет широкий спектр приложений, которые мы хотим изучить в следующих параграфах.

Оператор Walrus с Regex

Регулярные выражения являются мощным инструментом в программировании. Мы даже написали целую книгу о них! (Проверьте «Самый умный способ изучить Python Regex».)

Вместе с регулярными выражениями оператор Walrus можно использовать для проверки и назначения совпадения в одной строке.

Вот код:

import re

pattern = r'ab+'
text = 'bbbaabbba'

if (match := re.search(pattern, text)) is not None:
    # process the match object
    print(match.span())
else:
    print('no match')

Я предлагаю, как упражнение, вы пытаетесь переписать код сверху без оператора Walrus.

Если вам нужен намек, проверьте первый абзац этой статьи.

Читайте файл байт-мудрый, используя оператор Walrus

Оператор WALRUS может быть красиво используется для чтения кусков байта данных из файла.

with open('data.txt', 'r') as file:
    # 1024 = number of bytes to return
    while chunk := file.read(1024):
        print(chunk)

В этом случае будет более сложно переписать код без оператора WALRUS, поскольку ему потребуется некоторое время Правда петля и внутри Петля, которую вы должны проверить, что вы читаете. Если файл.read () метод возвращает Нет Вы вырываетесь из-за петли, иначе вы обрабатываете кусок. Итак, здесь оператор Walrus приходит очень удобно.

Оператор Walrus в списке

Оператор WALRUS может использоваться в представлениях списка, так что функция не должна называться несколько раз.

# expensive function
f = lambda x: x**3

data = [1, 2, 3, 4, 5]
filtered_data = [y for x in data if (y := f(x)) > 25]

В IF-заявлении об понимании списка мы называем функцию F и назначить значение y Если результат f (x) заставляет состояние стать Правда Отказ

Если мы хотим добавить результат f (x) в список, который нам придется позвонить f (x) Опять без оператора WALRUS или напишите на петлю, где мы можем использовать временную переменную.

Используя оператор Walrus в понимании списка, мы можем избежать нескольких вызовов функций и уменьшить строки кода.

Повторно использовать значение, которое дорого вычислить

Я считаю это приложение оператора WALRUS скорее любопытства, но ради полноты, которую я хотел бы упомянуть это. В этом случае это уменьшает количество строк кода, которые вы должны написать на один.

Вместо письма:

y = f(x)
data = [y, y**2, y**3]

Вы можете сократить код, используя оператор Walrus на одну одну строку:

data = [y := f(x), y**2, y**3]

Я не рекомендую это использование оператора Walrus, поскольку это уменьшает читаемость. Теперь очень легко пропустить точку, где первоначальное значение y Получается вычислено.

Заключение

Оператор WALRUS – это крутая новая особенность, но не переверните ее. Как мы видели в приведенных выше примерах, это помогает записать код быстрее, потому что нам нужно меньше кода. Однако читабельность также очень важна, поскольку код написан только один раз, но читаю несколько раз. Если вы экономьте минуту, пишу свой код, но потратите два часа отладки, это явно не стоит.

Эта двусмысленность также вызвала противоречие вокруг операнда моржа и на мой взгляд, столько раз в жизни, средний путь – это путь.

Куда пойти отсюда?

Хотите начать зарабатывать на полный рабочий день с Python – пока работаю только неполный рабочий день? Затем присоединяйтесь к нашему бесплатным Python Freelancer Webinar Отказ

Он точно показывает, как вы можете вырастить свой бизнес и навыки Python в точку, где вы можете работать комфортно на 3-4 часа от дома и наслаждаться остальными часами), проводить время с людьми, которых вы любите делать вещи, которые вам нравится делать Отказ

Стать питоном фрилансером сейчас!