我正在用我的R.Pi学习Python,遇到了一个小问题。在我看来,当“inputchecker”函数路由回“getinput”函数时,下面的代码将在内存中保持打开状态。在
这是坏代码吗?应该采取完全不同的做法吗?在
def getinput(i):
if i == 1:
first = input("Would you like A or B? ")
inputchecker(1, first)
elif i == 2:
second = input("Would you like C or D? ")
inputchecker(2, second)
def inputchecker(n, userinput):
def _tryagain_(n):
usage(n)
getinput(n)
if n == 1:
if userinput in ("A", "B"):
print("You chose wisely.")
getinput(2)
else:
_tryagain_(n)
elif n == 2:
if userinput in ("C", "D"):
print("You chose wisely.")
else:
_tryagain_(n)
def usage(u):
if u == 1:
print("Usage: Just A or B please.")
if u == 2:
print("Usage: Just C or D please.")
getinput(1)
不,嵌套函数中的名称
getinput
不会创建引用。每次调用_tryagain_
时都会查找它,因为它是全局的。这并不重要,因为当Python退出时,一个模块作为一个整体被清除,所以这里没有内存泄漏的真正机会。在但是,您使用递归来请求用户输入,您的代码很难理解。请使用简单的循环,请参见Asking the user for input until they give a valid response。在
我当然会避免递归调用。另外,我会让验证函数返回一个布尔值,而不是下一个问题的数字。因为你总是按顺序问问题,这似乎只会让你的代码读者觉得复杂。在
另外,我会让validation总是返回一些您永远不知道的东西:第一个参数也可能是错误的:
让两个函数无限地互相调用并不是最好的控制流。最好使用
while
循环如果你把它简化成一个函数可能会更好。没有理由要分开。在
相关问题 更多 >
编程相关推荐