鱼C论坛

 找回密码
 立即注册
查看: 88|回复: 10

[技术交流] 如何使用global语句实现让嵌套内的函数访问全局变量,而让第一层函数访问自己的变量

[复制链接]
回帖奖励 15 鱼币 回复本帖可获得 3 鱼币奖励! 每人限 1 次(中奖概率 80%)
发表于 前天 17:09 | 显示全部楼层 |阅读模式

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

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

x
如何使用global语句实现让嵌套内的函数访问全局变量,而让第一层函数访问自己的变量呢
  1. x = 880
  2. def funA():
  3.     def funB():
  4.         print("In finB x =",x)
  5.     print("In finA x =",x)
复制代码

在上方代码中如何使用global语句实现让finA的x的值等于520,让finB值等于880
游客,如果您要查看本帖隐藏内容请回复

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 前天 17:10 | 显示全部楼层
在嵌套函数中,可以通过在内部函数使用 `global` 声明访问全局变量,而外部函数使用局部变量。以下是简洁的实现方案:


  1. x = 880  # 全局变量

  2. def funA():
  3.     x = 520  # funA的局部变量
  4.     def funB():
  5.         global x  # 声明使用全局变量x
  6.         print("In funB x =", x)  # 访问全局变量880
  7.    
  8.     funB()  # 调用内部函数
  9.     print("In funA x =", x)  # 访问局部变量520

  10. funA()
  11. print("全局 x =", x)  # 验证全局变量未被修改
复制代码


运行结果:
In funB x = 880
In funA x = 520
全局 x = 880

关键点说明:
1. 在 funB 中使用 global x 强制访问全局变量
2. 在 funA 中直接赋值 x=520 创建局部变量
3. 两个 x 分别属于不同作用域,互不影响

这种方法比在外部函数使用 global 更安全,不会意外修改全局变量值。注意 global 声明只需在需要访问全局变量的函数内部使用即可。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 前天 17:17 | 显示全部楼层
FishC 发表于 2025-7-31 17:10
在嵌套函数中,可以通过在内部函数使用 `global` 声明访问全局变量,而外部函数使用局部变量。以下是简洁的 ...

原来如此,global语句竟然还有访问全局变量的意思,学到了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 前天 17:18 | 显示全部楼层
666999666999 发表于 2025-07-31 17:17
FishC 发表于 2025-7-31 17:10
在嵌套函数中,可以通 ...


你说得非常对!`global` 语句的关键作用就是**在函数内部声明并访问全局变量**。你提出的需求可以通过以下简洁方案实现:


  1. x = 880  # 全局变量

  2. def funA():
  3.     x = 520  # 创建 funA 的局部变量
  4.    
  5.     def funB():
  6.         global x  # 声明使用全局变量 x
  7.         print("In funB x =", x)  # 访问全局变量 880
  8.    
  9.     funB()  # 调用内部函数
  10.     print("In funA x =", x)  # 访问局部变量 520

  11. funA()
  12. print("全局 x =", x)  # 验证全局变量未被修改
复制代码


运行结果:
In funB x = 880
In funA x = 520
全局 x = 880

核心要点:
1. global x 只在需要访问全局变量的 funB() 内部声明
2. funA() 中的 x = 520 自动创建局部变量
3. 两个 x 属于不同作用域:
   - 全局 x:始终为 880
   - 局部 x:仅在 funA 内有效

这种设计比在外部函数使用 global 更安全,完全符合你的需求:内层函数访问全局变量,外层函数使用自己的局部变量。既清晰又不会意外污染全局命名空间!{:5_146:}

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 前天 17:48 | 显示全部楼层

回帖奖励 +3 鱼币

x = 880
def funA():
    def funB():
        x = 520
        print("In finB x =",x)
    global x
    print("In finA x =",x)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 前天 18:24 | 显示全部楼层
global内层也能用
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 前天 18:25 | 显示全部楼层

回帖奖励 +3 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 前天 19:06 | 显示全部楼层

回帖奖励 +3 鱼币

看看.
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 前天 19:06 | 显示全部楼层

回帖奖励 +3 鱼币

clever
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 前天 21:47 | 显示全部楼层

回帖奖励 +3 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 昨天 14:48 | 显示全部楼层

学到了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-2 19:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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