Страницы

Поиск по вопросам

понедельник, 24 февраля 2020 г.

Не работает lambda функция при печати случайной буквы из списка

#python #случайные_числа #lambda


import random
print(lambda upletters: (random.choice(['Q','W','E','R','T','Y','U','I','O','P','A','S','D','F','G','H','J','K','L','Z','X','C','V','B','N','M'])))


Возможно синтаксис не корректен. Помогите разобраться.
    


Ответы

Ответ 1



Если вы хотите использовать лямбду в точке объявления, именовать её не надо. Более того, код вида lambda upletters : ... объявляет лямбду с параметром upletters. Для использования лямбды "на месте" её нужно вызвать следующим образом: (lambda : ...)() Таким образом, корректный код в данном случае имеет следующий вид: import random print( (lambda : (random.choice(['Q','W']))) () ) (Массив сократил для улучшения понимания конструкции.)

Ответ 2



О вопросе: код не выбрасывает SyntaxError, то есть синтаксис корректен. Достаточно запустить код в вопросе, чтобы это увидеть в коде нет явного словаря, поэтому не ясно к чему заголовок "Не работает lambda функция в словаре" относился выражение с lambda также как и def cоздаёт функцию, но не вызывает её upletters -- это агрумент функции в коде (который никак не используется) lambda здесь не нужна, код можно переписать как: import random print(random.choice('QWERTYUIOPASDFGHJKLZXCVBNM')) или для ясности: import random import string print(random.choice(string.ascii_uppercase)) Назначение lambda создание анонимных функций. Если хочется вызывать код по имени, то следует def использовать: import random import string def random_letter(letters=string.ascii_uppercase): """Select a random letter from *letters*.""" return random.choice(letters) print(random_letter()) Функции являются полноценными объектами в Питоне: им можно дать имя, их можно передавать в качестве параметров в другие функции (такие как print()) и тд: random_letter (без скобочек) возвращает саму функцию (объект) random_letter() (со скобками) вызывает функцию (и возвращает букву в данном случае, то есть выражение возвращает строку). Если хочется передать функцию как выражение (без имени), например, в другую функцию f(), то можно functools.partial() использовать, чтобы облегчить интроспекцию: f(functools.partial(random.choice, string.ascii_uppercase)) # instead of `f(lambda: random.choice(string.ascii_uppercase))`

Ответ 3



import random upletters = lambda : (random.choice(['Q','W','E','R','T','Y','U','I','O','P','A','S','D','F','G','H','J','K','L','Z','X','C','V','B','N','M'])) print(upletters()) lambda возвращает функцию

Комментариев нет:

Отправить комментарий