【发布时间】:2011-08-24 23:03:34
【问题描述】:
假设您有一个函数需要维护某种状态并根据该状态表现出不同的行为。我知道实现这一点的两种方法,其中状态完全由函数存储:
- 使用函数属性
- 使用可变默认值
使用稍微修改过的Felix Klings answer to another question 版本,这里有一个示例函数,可以在re.sub() 中使用,这样只会替换正则表达式的第三个匹配项:
功能属性:
def replace(match):
replace.c = getattr(replace, "c", 0) + 1
return repl if replace.c == 3 else match.group(0)
可变默认值:
def replace(match, c=[0]):
c[0] += 1
return repl if c[0] == 3 else match.group(0)
对我来说,第一个看起来更干净,但我看到第二个更常见。哪个更可取,为什么?
【问题讨论】:
-
人们只是不考虑函数属性,因为它们并没有被初学者广泛使用,但是 everyone 考虑使用可变默认值,因为 every i> 初学者至少被它们咬过一次。
标签: python