Python 3.x Python中作为对象的函数范围
我试图理解python如何将其函数作为对象存储和访问。 以下面的代码为例-Python 3.x Python中作为对象的函数范围,python-3.x,function,scope,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)
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()返回
我仍然得到与以前相同的输出,即使我更改了普通的全局定义,也就是说,尽管我重新定义了普通,并且在pretty中func是指全局普通,但pretty仍然在考虑以前的普通定义
为什么会这样?我在某个地方显然错了,但我不知道在哪里。
如能提供一些见解,将不胜感激。谢谢
尽管我改变了普通人的全球定义,
i、 e.pretty仍在考虑之前对普通的定义
尽管我已经重新定义了“普通”和“漂亮”中的函数
指全球普通股
您没有更改pretty
引用的函数对象。您创建了一个新函数,并将其命名为normal
。原始函数仍然存在,但不能再以名称普通
引用
pretty
不知道这一切。它始终是指原始功能
之前
名称“普通”和函数pretty
均指相同的函数:
您应该阅读更多关于python中对象引用的内容。我从中了解到了对象引用,根据我在本例中的理解,普通对象在被更改之前一直被引用调用,当它被更改时,它就变成了值调用。这是正确的吗?是的,在使用id函数之后,我明白了,无论如何,谢谢
I got decorated
I am ordinary 2
<function __main__.ordinary()>
def ordinary():
print("I am ordinary 3")
pretty()