鱼C论坛

 找回密码
 立即注册
查看: 2739|回复: 3

[已解决]第45讲函数第3题调用完 innerC() 后,x为什么是250?

[复制链接]
发表于 2023-2-15 14:00:38 | 显示全部楼层 |阅读模式

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

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

x
def outter():
    def innerA():
        x = 100
    
    def innerB():
        nonlocal x
        x = 250
    
    def innerC():
        global x
        x = 520
    
    x = 880
    
    innerA()
    print(f"调用完 innerA() 函数之后,x = {x}")
    
    innerB()
    print(f"调用完 innerB() 函数之后,x = {x}")
    
    innerC()
    print(f"调用完 innerC() 函数之后,x = {x}")
    
outter()
print(f"此时此刻,全局变量 x = {x}")

def innerC():
        global x
        x = 520
这里已经声明 x 是全局变量了,可为什么最后结果是250啊?
最佳答案
2023-2-15 14:29:16
因为你之前已经定义过局部变量 x 了,你直接用 x 优先访问到的是局部变量,你应该用 globals()['x'] 来访问全局变量
def outter():
    def innerA():
        x = 100
    
    def innerB():
        nonlocal x
        x = 250
    
    def innerC():
        global x
        x = 520
    
    x = 880
    
    innerA()
    print(f"调用完 innerA() 函数之后,x = {x}")
    
    innerB()
    print(f"调用完 innerB() 函数之后,x = {x}")
    
    innerC()
    print(f"调用完 innerC() 函数之后,全局变量x = {globals()['x']}")               # 注意这里
    
outter()
print(f"此时此刻,全局变量 x = {x}")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-15 14:06:09 From FishC Mobile | 显示全部楼层
你没有定义全局变量啊
你的x=880也不是全局,而是函数fucter中的局部变量。你用global声明没有意义啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-15 14:09:15 From FishC Mobile | 显示全部楼层
本帖最后由 linke.zhanghu 于 2023-2-15 14:28 编辑

不是没有意义,如果你不声明的话可能会直接报错。
直接把x=880定义到全局里面不要定义在函数内部即可
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-15 14:29:16 | 显示全部楼层    本楼为最佳答案   
因为你之前已经定义过局部变量 x 了,你直接用 x 优先访问到的是局部变量,你应该用 globals()['x'] 来访问全局变量
def outter():
    def innerA():
        x = 100
    
    def innerB():
        nonlocal x
        x = 250
    
    def innerC():
        global x
        x = 520
    
    x = 880
    
    innerA()
    print(f"调用完 innerA() 函数之后,x = {x}")
    
    innerB()
    print(f"调用完 innerB() 函数之后,x = {x}")
    
    innerC()
    print(f"调用完 innerC() 函数之后,全局变量x = {globals()['x']}")               # 注意这里
    
outter()
print(f"此时此刻,全局变量 x = {x}")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 15:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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