鱼C论坛

 找回密码
 立即注册
查看: 718|回复: 6

[已解决]向各位大佬求助一个关于作用域的问题

[复制链接]
发表于 2018-12-23 17:18:40 | 显示全部楼层 |阅读模式

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

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

x
如下图所示代码:
def f(x):
    def g():
        x="abc"
        print("x=",x)
    def h():
        z=x
        print("z=",z)
    x=x+1
    print("x=",x)
    h()
    g()
    print("x=",x)
    return g
x=3
z=f(x)
print("x=",x)
print("z=",z)
z()
运行结果为:
x= 4
z= 4
x= abc
x= 4
x= 3
z= <function f.<locals>.g at 0x0000022D6B507B70>
x= abc
求各位大佬给我讲解下运行结果中的最后两行是怎么回事
最佳答案
2018-12-23 18:08:09
烨烨玮 发表于 2018-12-23 18:02
我知道z=f()  调用f(x)函数,  f(x)函数return g()   ,但我还是不太懂为什么print("z=",z)就输出z= ,而 ...


我上面代码有敲  z本身没有值的,只是函数的一个对象,
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-12-23 17:46:46 | 显示全部楼层
本帖最后由 Stubborn 于 2018-12-23 17:59 编辑

z=f()  调用f(x)函数,  f(x)函数return g()      你这个和作用域有啥子关系,讲解下
  1. >>> def f(x):
  2.         def g():
  3.                 x="abc"
  4.                 print("gx=",x)
  5.         def h():
  6.                 z=x
  7.                 print("hzx=",x)
  8.         x +=1       
  9.         print("传入的X+1=",x)
  10.         print("正在调用H函数")
  11.         h()
  12.         print("正在调用G函数")
  13.         g()
  14.         return h
  15. >>>x = 3
  16. >>> z=f(x)
  17. 传入的X+1= 4
  18. 正在调用H函数
  19. hzx= 4
  20. 正在调用G函数
  21. gx= abc
  22. >>> z
  23. <function f.<locals>.h at 0x000000000308E1E0>
  24. >>> z()
  25. hzx= 4
  26. >>>x
  27. 3
  28. >>>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-23 17:49:01 | 显示全部楼层
Stubborn 发表于 2018-12-23 17:46
z=f()  调用f(x)函数,  f(x)函数return g()      你这个和作用域有啥子关系,讲解下

这个例题放在了一本书的作用域那一节。不管怎样,大佬解释一下后两行嘛。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-23 17:51:07 | 显示全部楼层
烨烨玮 发表于 2018-12-23 17:49
这个例题放在了一本书的作用域那一节。不管怎样,大佬解释一下后两行嘛。

我传了代码了哦,你看下,有哪里不懂吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-23 18:02:46 | 显示全部楼层
Stubborn 发表于 2018-12-23 17:51
我传了代码了哦,你看下,有哪里不懂吗?

我知道z=f()  调用f(x)函数,  f(x)函数return g()   ,但我还是不太懂为什么print("z=",z)就输出z= <function f.<locals>.g at 0x0000022D6B507B70>,而z()就输出x=abc,可能因为我是初学者吧,让大佬见笑了,还请大佬解释详细一点,书上写得太抽象了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-23 18:05:36 | 显示全部楼层
倒数第二行是打印函数的内存地址把
最后就执行f函数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-23 18:08:09 | 显示全部楼层    本楼为最佳答案   
烨烨玮 发表于 2018-12-23 18:02
我知道z=f()  调用f(x)函数,  f(x)函数return g()   ,但我还是不太懂为什么print("z=",z)就输出z= ,而 ...


我上面代码有敲  z本身没有值的,只是函数的一个对象,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-19 17:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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