我试图了解python如何存储和访问其对象对象的功能。 例如,使用以下代码-
def make_pretty(func):
def inner():
print("I got decorated")
func()
return func
return inner
def ordinary():
print("I am ordinary 2")
ordinary()
pretty=make_pretty(ordinary)
pretty()
执行后,pretty()返回
I got decorated
I am ordinary 2
<function __main__.ordinary()>
这似乎意味着传递给make_pretty()的normal()函数的访问方式与在主作用域中一样,并且dir(pretty)的显示方式不是普通的(如果我错了,请纠正我)。 现在,如果我在此之后运行这段代码
def ordinary():
print("I am ordinary 3")
pretty()
即使更改了普通的全局定义,我仍然获得与以前相同的输出,即,即使我重新定义了普通且func中的函数是指全局普通,我仍然在考虑普通的先前定义。
为什么会这样?我显然在某个地方错了,但我不知道在哪里。 一些见识将不胜感激。谢谢
答案 0 :(得分:1)
即使我更改了common的全局定义, 即漂亮仍然在考虑普通的先前定义 即使我已经重新定义了普通且漂亮的功能是 指全球普通人
您没有更改Please select a file to upload.
所引用的功能对象。您创建了一个新函数,并为其命名了pretty
。原始函数仍然存在,但是不能再用名称ordinary
来引用。
ordinary
对此一无所知。一直都是原始功能。
名称“普通”和函数pretty
指的是同一函数:
pretty
名称“普通”是指新功能,但是<function 1> <-- "ordinary"
<-- pretty
仍指原始功能:
pretty