Форум программистов, компьютерный форум, киберфорум
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. Показов 4288. Ответов 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
Ответ Создать тему
Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru