我可以在Python中使用「靜態」變量的匿名函數嗎?我可以在Python中使用「靜態」變量的匿名函數嗎?
例如
lambda x: re.compile(r'foobar').match(x)
沒有那麼大,因爲它可能會重新編譯每次調用時間(如果re
用完緩存 - 謝謝你響應者指出了緩存機制)。
我可以做到這一點無需重新編譯:
def f(line):
try:
f.c
except:
f.c = re.compile(r'foobar')
return f.c.match(line)
如何用拉姆達做到這一點,而無需重新編譯?
嗯,我不想使用幫助函數,在lambda內部使用。使用lambdas的全部觀點是「匿名」。所以是的,lambda是匿名的,並且是獨立的。
're'庫有一個緩存機制,所以每次調用函數時都不應該編譯正則表達式。 –
實際上我不會爲此擔心。 're'模塊內部緩存了100個正則表達式,所以如果你使用的模式不超過100個,那麼執行此操作時不會看到任何顯着的性能增益 – wim
爲什麼第二個示例不會重新編譯? – hitzg