Функция Python переопределить

Я хотел бы сделать что-то вроде этого:

f = lambda x: None

x = [f]

def f(n):
    return n

print x[0](2)

Ожидаемый результат 2, но это на самом деле None,

Я знаю, что это можно решить с помощью классов, но можно ли это сделать без них?

4 ответа

Здесь вы создаете анонимную функцию и добавляете ее в список. Теперь есть две ссылки, указывающие на лямбду. Хотя вы определяете другую функцию с тем же именем f, это не влияет на ссылку в списке, поскольку она указывает на лямбду.

Чего ты здесь пытаешься достичь?

Вы можете установить f в качестве глобальной переменной:

глобальный е
F = лямбда х: х +1

х = ф

х (1)

OUT: 2

f = лямбда х: х +2

х = ф

х (1)

OUT: 3

Хм, это легко (:. Функция - это объект, как и все остальное.

x = [f]

или же

x[0] = f

после того, как вы переопределили f?

Вы сохраняете ссылку на функцию в списке, а не на ее имя.

Вы могли бы сделать что-то вроде

f = lambda x: None
x = ['f']
def f(n):
    return n

print globals()[x[0]](2)

но это вроде "плохо". Может быть, вы могли бы объяснить, почему вы пытаетесь это сделать, и мы можем найти вам лучший способ.

Другие вопросы по тегам