所以我有这个功能(例子):
def monty(x):
if abs(int(x)) == 1:
print("Cool!")
print("Took %s attempts.") % (z)
elif abs(int(x)) == 0:
print("Nope.")
else:
z = z + 1
y = x - 1
monty(y)
现在,当然,'z'尚未定义,因此当运行此函数以便调用'else'语句时,程序将返回NameError异常。
好吧,好吧。让我们试着说出这个陈述:
else:
try: z
except NameError: z = 0
else: z = z + 1
y = x - 1
monty(y)
还假设我们在'if'语句中添加了相同的NameError catch。
该语句始终将'z'返回为0,因为当再次运行'monty'时,该变量完全被遗忘。好的,如果我们首先尝试在'monty'之外定义z,并删除NameError catch?
好吧,它再次返回一个NameError,如果我们保留NameError catch,它仍然只输出0。
那么,如何在每次有效调用函数时使函数增加?换句话说,如何让程序静默计算函数的运行次数,稍后会被召回?为了方便用户,我们尝试避免在函数中添加另一个参数。
答案 0 :(得分:3)
只需将z
添加为关键字参数:
def monty(x, _z=0):
# ...
else:
_z = _z + 1
y = x - 1
monty(y, _z)
我将z
重命名为_z
,表示这是最终用户无需担心的实施细节。由于关键字参数具有默认值,因此monty()
的来电者不必担心它。