我可以在Python中使用"静态"变量的匿名函数吗?
例如
lambda x: re.compile(r'foobar').match(x)
Run Code Online (Sandbox Code Playgroud)
是不是很好,因为它可能会在每次调用时重新编译(如果re用完了缓存 - 感谢响应者指出缓存机制).
我可以这样做而无需重新编译:
def f(line):
try:
f.c
except:
f.c = re.compile(r'foobar')
return f.c.match(line)
Run Code Online (Sandbox Code Playgroud)
怎么用lambda做,不重新编译?
好吧,我不想使用辅助函数,在lambda中使用.使用lambdas的全部意义是"匿名".所以是的,lambda是匿名的,并且是独立的.
通常的技巧是为您不打算提供的参数提供默认值.
lambda x, regexobject=re.compile(r'foobar'): regexobject.match(x)
Run Code Online (Sandbox Code Playgroud)
lambda定义时会计算默认值,而不是每次调用默认值.
lambda不过,我只是明确定义你的正则表达式,而不是使用
regex1 = re.compile(r'foobar')
regex2 = re.compile(r'bazquux')
# etc
Run Code Online (Sandbox Code Playgroud)
然后在需要的地方传递绑定方法.也就是说,而不是
somefunction(lambda x, regexobject=re.compile(r'foobar'): regexobject.match(x))
Run Code Online (Sandbox Code Playgroud)
使用
somefunction(regex1.match)
Run Code Online (Sandbox Code Playgroud)
匿名函数的用例是只调用一次的用例,因此将名称绑定到它是没有意义的.您担心re.compile被多次调用这一事实表明这些函数将被多次调用.
| 归档时间: |
|
| 查看次数: |
497 次 |
| 最近记录: |