Сохранение функции как переменной в Python

Вопрос: Я новичок в Python и создаю переводчика для моей малины Pi, который получит вход, затем выдает код Морзе со светодиодом. У меня есть функция, которая точно выводит код Морзе для выбранной мной буквы. Я пытаюсь назначить функцию параметрам переменной для более быстрого доступа, подобного этому. a=letter(dot, dash) но когда я пытаюсь сохранить его таким

Вопрос:

Я новичок в Python и создаю переводчика для моей малины Pi, который получит вход, затем выдает код Морзе со светодиодом. У меня есть функция, которая точно выводит код Морзе для выбранной мной буквы. Я пытаюсь назначить функцию параметрам переменной для более быстрого доступа, подобного этому. a=letter(dot, dash) но когда я пытаюсь сохранить его таким образом, он запускает функцию с этими параметрами, я также не могу назвать ее чем-то вроде a(). Там может быть простое решение, но я не могу понять это. Если вам нужна дополнительная информация, я могу передать ее вам. Спасибо за помощь.

Лучший ответ:

То, что вам нужно, называется currying, привязывая аргументы к функциям, возвращающим новые функции. Или частичное применение. Каково решение вашей проблемы:

from functools import partial a = partial(func, arg1, arg2) Ответ №1

Да, вы можете использовать partial для этого:

from functools import partial a = partial(letter, dot, dash)

Частичная конструкция создает новую функцию. Если эта функция вызывается, она вызовет letter с dot и dash. В случае, если вы звоните с параметрами, эти параметры добавляются в конце (безымянные параметры), а названные параметры обновляются. a

Ответ №2

Вы можете установить переменную в функцию, а затем использовать переменную в качестве имени функции. Вот пример:

def cube(number): return number ** 3 make_cube = cube # Take out those parentheses

Теперь переменную make_cube можно использовать как функцию:

print(make_cube(2)) # 8

Оба cube и make_cube указывают на тот же адрес памяти, который вы можете подтвердить с помощью id(make_cube) == id(cube).

В вашем случае это может быть:

a = letter a(dot, dash) Ответ №3

Вы также можете написать выражение функции как строку, а затем позвонить с помощью eval.

a = «letter(dot, dash)» eval(a)

(Не требует импорта модуля)

Оцените статью
Добавить комментарий