redaiconglin 发表于 2021-1-28 14:07:14

关于python中return返回值的疑问

老师好。我有个疑问请老师能解答一下谢谢
def funX():
    x = 5
    def funY():
      nonlocal x
      x += 1
      return x
    return funY

a = funX()
print(a())
print(a())
print(a())
这段代码中内嵌函数两个return返回值是将x和funY返回给谁是a吗?一直没搞明白函数体中return返回到哪一步。谢谢老师能讲解一下。

Twilight6 发表于 2021-1-28 14:47:26



善用论坛的搜索功能~:[已解决] 内嵌函数和闭包课后题


def funX():
    x = 5
    def funY():
      nonlocal x
      x += 1
      return x
    return funY
首先定义函数 funX() 已经该函数的内嵌函数 funY():
a = funX()
然后调用 funX 函数,从函数定义中可以看出 funX 函数 return 返回值为 funY

那么此时 a = funX() 相当于 a = funY (注意这里没有括号,说明是指代 funY 函数本身,而不是调用 funY 函数)

而且此时 x 被赋值为 5 ,然后你执行 :
print(a())
此时 a() 因为 a = funY ,所以 a() 相当于 funY() ,使得 x + 1 然后返回 x 的值,被 print 函数打印

后续反复执行两次,即 funY() 函数的调用

redaiconglin 发表于 2021-1-28 16:21:51

Twilight6 发表于 2021-1-28 14:47
善用论坛的搜索功能~:[已解决] 内嵌函数和闭包课后题




老师我还有个疑问为什么
def funX():
    x = 5
    def funY():
      nonlocal x
      x += 1
      return x
    return funY()

a = funX()
print(a())
print(a())
print(a())
不能这样返回funY()的值而是一定要返回函数体。我看了返回funY()报错不可调用

Twilight6 发表于 2021-1-28 16:26:58

redaiconglin 发表于 2021-1-28 16:21
老师我还有个疑问为什么
def funX():
    x = 5



这样代码你调用 funX() 是不是 返回 funY()了?

那么 a = funX() 就是 a = funY() 而 funY() 返回 x 所以 a 最后等于 x 即6

a = 6 此时你 print(a()) 就等价于 6() ,而 6() 没有这种语法呀~

redaiconglin 发表于 2021-1-28 16:43:35

本帖最后由 redaiconglin 于 2021-1-28 16:48 编辑

Twilight6 发表于 2021-1-28 16:26
这样代码你调用 funX() 是不是 返回 funY()了?

那么 a = funX() 就是 a = funY() 而 funY() 返回...

感谢老师的讲解。那我把代码改成这样
def funX():               2步
    x = 5                     3步
    def funY():             5步
      nonlocal x
      x += 1
      return x            
    return funY()         4步

a = funX()                1步
print(a)
print(a)
print(a)
输出的是6、6、6这个里面return x为什么返回的值是5而不是6.这个里面不是已经用nonlocal 申明过了吗?另外我没弄明白这段代码运行的顺序。是我标注的这样吗?感谢老师谢谢。

Twilight6 发表于 2021-1-28 16:45:03

redaiconglin 发表于 2021-1-28 16:43
感谢老师的讲解。那我把代码改成这样
def funX():
    x = 5



你认真看 return x 的前面一行代码~

redaiconglin 发表于 2021-1-28 16:50:54

Twilight6 发表于 2021-1-28 16:45
你认真看 return x 的前面一行代码~

return x前面的这段代码是x =x + 1,那是不是返回的是6不是5.

Twilight6 发表于 2021-1-28 16:53:15

redaiconglin 发表于 2021-1-28 16:50
return x前面的这段代码是x =x + 1,那是不是返回的是6不是5.

redaiconglin 发表于 2021-1-28 16:55:52

Twilight6 发表于 2021-1-28 16:53


def funX():               2步
    x = 5                     3步
    def funY():             5步
      nonlocal x
      x += 1
      return x            
    return funY()         4步

a = funX()                1步
print(a)
print(a)
print(a)
老师那这段代码运行的顺序是这样吗?谢谢{:5_110:}

Twilight6 发表于 2021-1-28 16:57:27

redaiconglin 发表于 2021-1-28 16:55
def funX():               2步
    x = 5                     3步
    def funY():             5 ...

对~,客气拉~

redaiconglin 发表于 2021-1-28 17:06:15

Twilight6 发表于 2021-1-28 16:57
对~,客气拉~

实在不好意思老师最后一个问题
def funX():
    x = 5
    def funY():
      nonlocal x
      x += 1
      
    return funY()

a = funX()
print(a)
print(a)
print(a)
这段代码中我把return x这个删除了,为什么输出是none,在返回funY的时候x不是应该计算过了吗?谢谢

Twilight6 发表于 2021-1-28 17:07:44

redaiconglin 发表于 2021-1-28 17:06
实在不好意思老师最后一个问题
def funX():
    x = 5




因为 funY 函数没有设置返回值,Python 默认返回 None

页: [1]
查看完整版本: 关于python中return返回值的疑问