[英]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.