Функция 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)
но это вроде "плохо". Может быть, вы могли бы объяснить, почему вы пытаетесь это сделать, и мы можем найти вам лучший способ.