python - 嵌套函数是 Pythonic 的吗?

标签 python python-3.x raspberry-pi nested-function

我在我的 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 .

关于python - 嵌套函数是 Pythonic 的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40748286/

相关文章:

java - 寻找基于终端的 IDE 以通过 SSH 工作 - Java

Python Gzip - 即时附加到文件

python - 在seaborn中可视化直方图

python - splinter 的绘图形状

python - 更新 AWS Elastic Beanstalk 解决方案堆栈名称

python - 将图标放在右侧并将文本居中放置在 QPushButton 中

python - 如何在Mac上安装OpenCV+Python?

python - 在 python 中结合 with 语句和 for 循环

python - 如何检查迭代的内容是否是字典中的最后一个键/值? (可能需要在django模板中完成)

java - 运行 linux 命令时 Tomcat 问题