繁体   English   中英

Python:缓存一个本地 function 变量以供后续调用

[英]Python: cache a local function variable for subsequent calls

在 C/C++ 中, function 可以将局部变量声明为static 这样做时,该值将保留在 memory 中,并且可用于随后对 function 的调用(此变量不再是本地变量,但除此之外)。

有没有办法在 Python 中做类似的事情,不必在 function 之外声明任何全局变量?

用例:function(除其他外)使用正则表达式从输入字符串中提取值。 我想预编译模式( re.compile() ),而不必在 function scope 之外声明变量。

我可以将变量直接注入globals()

globals()['my_pattern'] = re.compile(...)

但这看起来不是一个好主意。

您可以使用 function 属性。 在 Python 中,函数是一等对象,因此您可以滥用此功能来模拟 static 变量:

import re

def find_some_pattern(b):
    if getattr(find_some_pattern, 'a', None) is None:
        find_some_pattern.a = re.compile(r'^[A-Z]+\_(\d{1,2})$')
    m = find_some_pattern.a.match(b)
    if m is not None:
        return m.groups()[0]
    return 'NO MATCH'

现在,你可以试试:

try:
    print(find_some_pattern.a)
except AttributeError:
    print('No attribute a yet!')

for s in ('AAAA_1', 'aaa_1', 'BBBB_3', 'BB_333'):
    print(find_some_pattern(s))

print(find_some_pattern.a)

这是 output:

No attribute a yet!
initialize a!
1
NO MATCH
3
NO MATCH
re.compile('^[A-Z]+\\_(\\d{1,2})$')

这不是最好的方法(包装器或可调用对象更优雅,我建议您使用其中之一),但我认为这清楚地解释了以下含义:

在 Python 中,函数是一等对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM