lzb1001 发表于 2023-5-25 12:58:54

请大神解答两个代码的返回结果的3个疑问

def fun1():
        print('fun1()正在被调用…')
        def fun2():
                print('fun2()正在被调用…')
        return fun2()

>>> print(fun1())
fun1()正在被调用…
fun2()正在被调用…
None # 问题1:是不是因为内部函数fun2()未定义return返回值?

-------------------------------------------------------------------------

def fun1():
        print('fun1()正在被调用…')
        def fun2():
                return 'fun2()正在被调用…'
        fun2()

>>> print(fun1())
fun1()正在被调用…
None # 问题2:是不是因为外部函数fun1()未定义return返回值?
            问题3:为何返回结果中没有fun2()正在被调用…?难道上面代码中的return 'fun2()正在被调用…'这条语句没有执行?

isdkz 发表于 2023-5-25 12:59:30

问题1:是的,这是因为内部函数fun2()没有定义return返回值,所以返回None。在Python中,如果函数没有指定返回值,则默认返回None。

问题2:是的,这是因为外部函数fun1()没有定义return返回值,所以返回None。

问题3:是的,这是因为在第二个代码示例中,fun2()函数虽然有返回值,但是没有被接收或者输出。如果要输出fun2()正在被调用…,需要将fun2()函数的返回值赋值给一个变量,然后输出该变量的值。修改后的代码如下:

def fun1():
    print('fun1()正在被调用…')
    def fun2():
      return 'fun2()正在被调用…'
    result = fun2()
    print(result)

>>> fun1()
fun1()正在被调用…
fun2()正在被调用…

lzb1001 发表于 2023-5-25 13:11:35

本帖最后由 lzb1001 于 2023-5-25 13:14 编辑

isdkz 发表于 2023-5-25 12:59
问题1:是的,这是因为内部函数fun2()没有定义return返回值,所以返回None。在Python中,如果函数没有指定 ...

上面的代码修改后输出的结果中还是有None哦,请看:

def fun1():
        print('fun1()正在被调用…')
        def fun2():
                return 'fun2()正在被调用…'
        result = fun2()
        print(result)

>>> print(fun1())
fun1()正在被调用…
fun2()正在被调用…
None


应该改成下面这样,输出的结果中就没有None了呢:

def fun1():
        print('fun1()正在被调用…')
        def fun2():
                return 'fun2()正在被调用…'
        result = fun2()
        return result

>>> print(fun1())
fun1()正在被调用…
fun2()正在被调用…
页: [1]
查看完整版本: 请大神解答两个代码的返回结果的3个疑问