鱼C论坛

 找回密码
 立即注册
查看: 1607|回复: 2

[已解决]关于内嵌函数和闭包

[复制链接]
发表于 2021-6-4 16:14:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. >>> def test(x):
  2.         a=x+1
  3.         print(a)
  4.         def test2(a):
  5.                 nonlocal x
  6.                 x=x
  7.                 return a,x
  8.         return test2(x)

  9. >>> test(1)
  10. 2
  11. (1, 1)
  12. >>> test(2)
  13. 3
  14. (2, 2)
  15. >>>
复制代码

请问为什么在test2函数之中,a的输出值不是在test函数中定义的x+1,而是a等于了x?
通过print输出了a在test函数中的值,可见此时完全正常,a=x+1,符合目标公式
但是当将a输入被嵌套的函数test2之后,a却莫名的改为了等同于x
这是为什么?又怎么解决?
最佳答案
2021-6-4 16:21:15

你 return test2(x) 传入的是 x 的值,而不是 a 的值

test2 函数因为 参数设置为 a ,那么此时屏蔽了 test 相对 test2 的全局变量 a ,此时 a = x

所以最后你返回 a,x 都是相等的值 ,把 return test2(x) 改成 return test2(a) 就可以了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-6-4 16:21:15 | 显示全部楼层    本楼为最佳答案   

你 return test2(x) 传入的是 x 的值,而不是 a 的值

test2 函数因为 参数设置为 a ,那么此时屏蔽了 test 相对 test2 的全局变量 a ,此时 a = x

所以最后你返回 a,x 都是相等的值 ,把 return test2(x) 改成 return test2(a) 就可以了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-4 16:23:13 | 显示全部楼层
Twilight6 发表于 2021-6-4 16:21
你 return test2(x) 传入的是 x 的值,而不是 a 的值

test2 函数因为 参数设置为 a ,那么此时屏蔽了  ...

return后的值忘改了,没发现
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-23 02:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表