python – 在函数外部访问函数变量而不使用“global”
作者:互联网
我试图在Python中访问函数外部的本地函数变量.所以,例如,
bye = ''
def hi():
global bye
something
something
bye = 5
sigh = 10
hi()
print bye
以上工作正常.既然我想知道我是否可以在hi()之外访问再见而不使用全局再见,我试过:
def hi():
something
something
bye = 5
sigh = 10
return
hi()
x = hi()
print x.bye
上面给出了AttributeError:’NoneType’对象没有属性’bye’.
然后,我试过:
def hi():
something
something
bye = 5
sigh = 10
return bye
hi()
x = hi()
print x.bye
这次它甚至没有出错.
那么,是否有一种方法可以在不使用全局变量的情况下访问函数(hi())之外的本地函数变量(bye),而不打印变量叹息? (编辑问题以包括@hcwhsa在下面的评论之后的叹息.
解决方法:
您可以沿着这条线做一些事情(当我测试它/它们时,它在Python v2.7.15和v3.7.1中都有效):
def hi():
# other code...
hi.bye = 42 # Create function attribute.
sigh = 10
hi()
print(hi.bye) # -> 42
函数是Python中的对象,可以为其分配任意属性.
如果您经常要做这种事情,可以通过创建一个函数装饰器来实现更通用的东西,该函数装饰器为每个对装饰函数的调用添加一个this参数.
这个额外的参数将为函数提供一种引用自己的方法,而不需要将它显式地嵌入(硬编码)到它们的定义中,并且类似于类方法自动接收的实例参数作为它们的第一个参数,通常命名为self – 我选择了不同的东西.避免混淆,但就像自我论证一样,它可以根据你的意愿命名.
以下是该方法的一个示例:
def with_this_arg(func):
def wrapped(*args, **kwargs):
return func(wrapped, *args, **kwargs)
return wrapped
@with_this_arg
def hi(this, that):
# other code...
this.bye = 2 * that # Create function attribute.
sigh = 10
hi(21)
print(hi.bye) # -> 42
标签:python,local-variables 来源: https://codeday.me/bug/20190915/1806412.html