С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 20.06.2022
Сообщений: 7

PEP 8: E731 do not assign a lambda expression, use a def

03.02.2023, 23:54. Показов 4188. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, столкнулась с такой проблемой. PEP8 не принимает данное выражение. В чем проблема?
Python
1
is_glasn = lambda x: x in glasn
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# функция подсчитывает количество гласных в каждой фразе
# фразы разделены проблами, слова в фразах -- дефисами
def check_rithm(lirics):
    # создаем строки с заглавными и строчными гласными буквами
    glasn = 'ауоыиэяюёеAEIOUY'.upper() + 'ауоыиэяюёеAEIOUY'.lower()
    # создадим lambda-функцию с проверкой на гласность
    is_glasn = lambda x: x in glasn
    # разделим на фразы по пробелам
    phrases = lirics.split()
    # подсчитаем количество гласных в первой фразе чтобы ориентироваться на это количество при проверке
    n = len(list(filter(is_glasn, phrases[0])))
    # lambda phrase: len(list(filter(is_glasn, phrase))) == n проверяет количество гласных во фразе
    # [phrase for phrase in phrases] используется для прохода по фразам
    check = list(filter(lambda phrase: len(list(filter(is_glasn, phrase))) == n, [phrase for phrase in phrases]))
    # сравнение количества фраз удовлетворяющих условию с изначальным количеством фраз
    if len(check) == len(phrases):
        return 'Парам пам-пам'
    return 'Пам парам'
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.02.2023, 23:54
Ответы с готовыми решениями:

Python PyGame def draw,def move,def off_screen,def collision
Python pygame За что отвечают эти команды def draw,def move,def off_screen,def collision?

Надо сделать программу с использованием lambda, но без функции def
Описать функцию Perfect логического типа, определяющую, является ли данное число совершенным. Совершенное число равно сумме всех своих...

%EXPAND-FORM: (EQL N 0) should be a lambda expression
http://ideone.com/PsVwBi подскажите: в чем пробдлема? Заранее благодарен.

5
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
04.02.2023, 08:00
Цитата Сообщение от boopa Посмотреть сообщение
PEP8 не принимает данное выражение. В чем проблема?
Странный вопрос - ответ вынесен в заголовке.
Читаем PEP:

Always use a def statement instead of an assignment statement that binds a lambda expression directly to an identifier:

# Correct:
def f(x): return 2*x
# Wrong:
f = lambda x: 2*x

The first form means that the name of the resulting function object is specifically ‘f’ instead of the generic ‘<lambda>’. This is more useful for tracebacks and string representations in general. The use of the assignment statement eliminates the sole benefit a lambda expression can offer over an explicit def statement (i.e. that it can be embedded inside a larger expression)


Перевод примерно такой: преимущество анонимных функций - в их возможности встраивания в более крупные выражения. Но с оператором присваивания это преимущество нивелируется, потому как во втором примере у вас слева имя результирующей функции, а справа анонимная функция и ставить между ними знак равенства не comme il faut, а для трассировки и строковых представлений гораздо нагляднее объявление функции через def.
0
0 / 0 / 0
Регистрация: 20.06.2022
Сообщений: 7
04.02.2023, 08:55  [ТС]
Дело в том, что я пробовала заменить так. В этом случае ругается тестирующая система, все также на PEP
Python
1
2
3
4
5
6
7
8
9
stdout:
/bin/sh ./build.sh 1>&2
 
 
stderr:
solution.py:6:5: E704 multiple statements on one line (def)
Код не соответствует стандарту PEP8
или в нем есть синтаксические ошибки
make: *** [Makefile:2: build] Error 1
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
04.02.2023, 09:25
Ну читайте же ошибку - не пишите тело функции в той же строке, что и def.
Да, выше в цитате PEP было применено такое, но сделано это исключительно для наглядности.

Дословный перевод изначального кода будет такой:
Python
1
2
def is_glasn(x):
    return x in glasn
И здесь, кстати, очень наглядно проявляется преимущество рекомендации PEP8.
Тут сразу видно неоправданное использование глобальной переменной, которое может вызвать проблемы безопасности и источник ошибок.

Корректное (и даже не в смысле PEP, а логики) будет такой код:

Python
1
2
3
def is_glasn(x):
    glasn = 'ауоыиэяюёеAEIOUY'.upper() + 'ауоыиэяюёеAEIOUY'.lower()
    return x in glasn
Добавлено через 6 минут
Цитата Сообщение от boopa Посмотреть сообщение
c
Python
1
    check = list(filter(lambda phrase: len(list(filter(is_glasn, phrase))) == n, [phrase for phrase in phrases]))
Ох ты, боже мой

PEP не ругается здесь на длину строки?)
0
0 / 0 / 0
Регистрация: 20.06.2022
Сообщений: 7
05.02.2023, 18:10  [ТС]
не-а, не ругается)
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
05.02.2023, 19:45
Ну странно.
Python
1
2
3
4
5
6
7
8
9
10
11
12
def check_rhythm(lyrics):
    def vowels_cnt(phrase):
        vowels = 'ауоыиэяюёеAEIOUY'.upper() + 'ауоыиэяюёеAEIOUY'.lower()
        return len(list(filter(lambda x: x in vowels, phrase)))
 
    if len(set(map(vowels_cnt, lyrics.split()))) == 1:
        return 'Парам пам-пам'
    return 'Пам парам'
 
 
print(check_rhythm('Парам пам-пам'))
print(check_rhythm('Пам парам'))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.02.2023, 19:45
Помогаю со студенческими работами здесь

Проблема обработки исключений в lambda expression
Добрый день! Реализую калькулятор, использую лямбда выражения. Вопрос касаемо деления на ноль: как мы корректно запихать случай деления...

Возникает ошибка при компиляции SyntaxError: cannot assign to expression
При попытке скомпилировать выдает ошибку File &quot;C:\Users\pythonProject2\main.py&quot;, line 43 l = x(n)-0.5*x(n-1) +0.5*x(n-2) = y(n) ...

Создание объекта по его типу с использованием Lambda Expression
Имеется следующий код: public class A { public int first { get; set; } public string second { get; set; } } ...

Затруднения с лямбда-выражением: Cannot convert lambda expression to delegate type
Есть такой код: string FormLoading() { string st = &quot;&quot;; foreach (Control c in...

Ошибка в лямбде "Not all code paths return a value in lambda expression of type"
Добрый день ! При компиляции выдаётся такая ошибка: Not all code paths return a value in lambda expression of type Я не знаю, как её...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru