[英]Python - Static Variable inside Function
我正在尝试在函数内设置静态变量。 本质上,我希望此变量最初为false
。 第一次调用此函数后,我希望将变量设置为true
。
我目前有以下内容:
class LKTracker(object):
def track_points(self,width,height):
if not hasattr(track_points, "gotInitialFeatures"):
track_points.gotInitialFeatures = None
if not track_points.gotInitialFeatures:
#do some stuff
track_points.gotInitialFeatures = True
有了这段代码,我不断收到以下错误:
NameError: global name 'track_points' is not defined
有人知道这里发生了什么吗?
在全局函数中,可以通过查找名称直接引用函数对象。
这并不在方法工作; 您必须在类上查找该方法:
LKTracker.track_points
但是,这仍然无法完成您想要的操作,因为此时您将获得一个未绑定的方法对象:
>>> LKTracker.track_points
<unbound method LKTracker.track_points>
方法对象是按需创建的(因为函数是描述符 ),而在方法对象上创建属性是徒劳的。 他们通常只活一小会儿。
您需要访问该函数:
>>> LKTracker.track_points.__func__
<function track_points at 0x103e7c500>
但是您可以对self
做同样的事情:
self.track_points.__func__
现在,您可以添加一个属性:
track_points = self.track_points.__func__
if not hasattr(track_points, "gotInitialFeatures"):
track_points.gotInitialFeatures = None
if not track_points.gotInitialFeatures:
#do some stuff
track_points.gotInitialFeatures = True
但是,仅将属性存储在类中会容易得多 :
if not hasattr(LKTracker, 'gotInitialFeatures'):
您应在调用函数之前初始化静态变量。
def static_var(varname, value):
def decorate(func):
setattr(func, varname, value)
return func
return decorate
现在您可以:
@static_var("gotInitialFeatures", False)
def track_points(self, width, height):
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.