Python-为什么我的递归函数返回None

发布于 2021-02-02 23:24:21

我有一个自称的函数:

def get_input():
    my_var = input('Enter "a" or "b": ')

    if my_var != "a" and my_var != "b":
        print('You didn\'t type "a" or "b". Try again.')
        get_input()
    else:
        return my_var

print('got input:', get_input())

现在,如果我只输入"a"或 "b",则一切正常:

Type "a" or "b": a
got input: a

但是,如果我输入其他内容,然后输入 "a"或 "b",则会得到以下信息:

Type "a" or "b": purple
You didn't type "a" or "b". Try again.
Type "a" or "b": a
got input: None

我不知道为什么get_input()要回来None,因为它应该只回来my_var。这None是哪里来的,我该如何修复我的功能?

关注者
0
被浏览
171
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    之所以返回,是None因为当你递归调用它时:

    if my_var != "a" and my_var != "b":
        print('You didn\'t type "a" or "b". Try again.')
        get_input()
    

    ..你不返回该值。

    因此,当确实发生递归时,返回值将被丢弃,然后你就无法使用该函数了。退出函数的末尾意味着python隐式返回None,就像这样:

    >>> def f(x):
    ...     pass
    >>> print(f(20))
    None
    

    因此,而不是只是调用 get_input()你的if说法,你需要return它:

    if my_var != "a" and my_var != "b":
        print('You didn\'t type "a" or "b". Try again.')
        return get_input()
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看