Skip to main content
 首页 » 编程设计

Python之函数内的静态变量

2025年05月04日14lyj

我正在尝试在一个函数中设置一个静态变量。本质上,我希望这个变量最初为 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 

但是,这仍然不会执行您想要的操作,因为此时您将获得一个未绑定(bind) 方法对象:

>>> LKTracker.track_points 
<unbound method LKTracker.track_points> 

方法对象是按需创建的(因为函数是 descriptors ),在方法对象上创建属性是徒劳的;他们通常只能活很短一段时间。

您需要改为访问该函数:

>>> 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'):