我应该在自己内部调用一个函数吗?

时间:2017-10-12 19:58:46

标签: python

def Main():
    print('\nWould you like to:\n1. Create a new account?\n2. Sign in?')
    try:
        Answer = int(input(':'))
    except:
        Answer = 3
    if Answer < 1 or Answer > 2:
        print()
        print('Invalid answer, please try again')
        print()
        Main()
    if Answer == 1:
        NewAccount()
        Main()

如上所示从内部调用函数是不是很糟糕?

当它起作用时,我甚至不会问这个是不是因为我听说你不应该从一个有点不可靠的来源这样做。

2 个答案:

答案 0 :(得分:1)

每次调用函数都需要堆栈上的内存。 Python有一个递归限制,用于阻止过于嵌套的函数调用。

另一点:循环更易读,控制流更清晰:

def main():
    while True:
        print('\nWould you like to:\n1. Create a new account?\n2. Sign in?')
        try:
            answer = int(input(':'))
        except ValueError:
            break
        if not 1 <= answer <= 2:
            print()
            print('Invalid answer, please try again')
            print()
        elif Answer == 1:
            new_account()
        else:
            break

答案 1 :(得分:0)

你在这里谈论递归。虽然递归本身并不是错误的,但是对于你正在做的事情以及你所处的递归深度来说,它可能非常棘手。这将是一种比现在更容易控制递归的方法。

另外,对主函数使用递归并使其更容易陷入递归陷阱是不受欢迎的。

def getInput():
    try:
        Answer = int(input(':'))
    except:
        Answer = 3

    if Answer < 1 or Answer > 2:
        print()
        print('Invalid answer, please try again')
        print()
        getInput()

    return Answer

def Main():
    print('\nWould you like to:\n1. Create a new account?\n2. Sign in?')

    Answer = getInput()

    if Answer == 1:
        NewAccount()