簡體   English   中英

Python-函數內部的靜態變量

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM