关于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返回到哪一步。谢谢老师能讲解一下。
善用论坛的搜索功能~:[已解决] 内嵌函数和闭包课后题
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() 函数的调用
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()报错不可调用 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: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 申明过了吗?另外我没弄明白这段代码运行的顺序。是我标注的这样吗?感谢老师谢谢。 redaiconglin 发表于 2021-1-28 16:43
感谢老师的讲解。那我把代码改成这样
def funX():
x = 5
你认真看 return x 的前面一行代码~ Twilight6 发表于 2021-1-28 16:45
你认真看 return x 的前面一行代码~
return x前面的这段代码是x =x + 1,那是不是返回的是6不是5. redaiconglin 发表于 2021-1-28 16:50
return x前面的这段代码是x =x + 1,那是不是返回的是6不是5.
对 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:} redaiconglin 发表于 2021-1-28 16:55
def funX(): 2步
x = 5 3步
def funY(): 5 ...
对~,客气拉~ 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不是应该计算过了吗?谢谢 redaiconglin 发表于 2021-1-28 17:06
实在不好意思老师最后一个问题
def funX():
x = 5
因为 funY 函数没有设置返回值,Python 默认返回 None
页:
[1]