Python:"方法变量"为了独立的功能

时间:2015-09-18 03:03:02

标签: python regex

我正在编译一个正则表达式模式以多次使用它。

但是,我想在函数中使用它,所以现在我将它用作全局变量。但是,我不需要在这个特定的函数之外,所以我想知道我是否可以将它作为静态变量编写,这意味着它将被编译一次并且对于所有函数实例/出现。

import re
p = re.compile(“[0-9|-]+”)

def search(txt):
    global p

    # some stuff
    return p.search(txt).group(0)

PS当然,在这个具体的例子中,它不会为我节省足够的内存,我只是想知道我是否可以这样做。另外,我认为这会让我更具可读性。

2 个答案:

答案 0 :(得分:2)

在C中,一个"静态变量"只是一个全局变量,只能在一个函数中看到。*术语"静态"在其他语言中有其他含义,但这显然是OP的意思。

Python没有这种变体的静态变量。如果您只想在一个函数中使用全局变量,那么只在一个函数中使用它。 Globals除了内置函数之外从不影响任何东西,所以如果你选择一个合理的变量名称(全局常量的PEP 8 recommends ALL_CAPS),这不应该是困难的。 Globals也被它们的模块封装,因此命名空间污染也不应该是一个太大的问题。

在设计方面,使用常量全局变量没有任何错误。编译一次但从未改变的模式与任何其他全局常量没有区别。

*从技术上讲,它通常以相反的方式定义(全局变量是一个全局可见的静态变量),但我为了方便起见这样做。

答案 1 :(得分:0)

您可以将它全部放在一个对象中,然后编译的正则表达式将是一个实例变量:

import re

class Searcher:

    def __init__(self):
        self.p = re.compile("[0-9|-]+")

    def search(self, text):
        return self.p.search(text).group(0)

s = Searcher()

# Use it as much as you want now
print s.search("123-345")
print s.search("123-abc")