在Python中作为对象的功能范围

时间:2018-08-18 19:11:07

标签: python-3.x function scope

我试图了解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中的函数是指全局普通,我仍然在考虑普通的先前定义。

为什么会这样?我显然在某个地方错了,但我不知道在哪里。 一些见识将不胜感激。谢谢

1 个答案:

答案 0 :(得分:1)

  

即使我更改了common的全局定义,   即漂亮仍然在考虑普通的先前定义   即使我已经重新定义了普通且漂亮的功能是   指全球普通人

您没有更改Please select a file to upload.所引用的功能对象。您创建了一个新函数,并为其命名了pretty。原始函数仍然存在,但是不能再用名称ordinary来引用。

ordinary对此一无所知。一直都是原始功能。

之前

名称“普通”和函数pretty指的是同一函数:

pretty

之后

名称“普通”是指新功能,但是<function 1> <-- "ordinary" <-- pretty 仍指原始功能:

pretty