鱼C论坛

 找回密码
 立即注册
查看: 1656|回复: 11

[已解决]新手求助一个全局变量的问题

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

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

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

x
新手求助一个全局变量的问题,原代码如下:

num = 1
def fun1():
    global num  # 需要使用 global 关键字声明
    print(num)
    num = 123
    print(num)
fun1()

上述代码为何要声明全局变量,不声明就会报错?如果代码修改如下:

num = 1
def fun1():
    print(num)
    num = 123
    print(num)
fun1()
按程序逻辑,第一个print(num)调用的是全局变量,num = 1,第二个print(num)是在函数内调用定义过的变量num = 123,但运行为何会出错呢?第二个print(num)明明是在函数内被定义了的,为何提示没有被定义过呢?
最佳答案
2017-7-17 19:09:05
原谅我刚才没说清楚
不访问全局变量就在函数内部进行定义的话是没问题的:
一旦访问全局变量python就指向了全局变量
一般我们都避免同名变量这种事情
Screenshot_2017-07-17-19-01-33-118_com.hipipal.qpy3.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-17 18:48:02 | 显示全部楼层
虽然在函数内部定义了,但是内部变量名与外部不能重复~python就是这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-17 18:54:45 | 显示全部楼层
Python内部不能调用外部的变量,想调用,就必须 global
第二个代码没有 global,所以报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-17 18:56:54 | 显示全部楼层
MSK 发表于 2017-7-17 18:48
虽然在函数内部定义了,但是内部变量名与外部不能重复~python就是这样

但是如果去掉第一个print(num)程序又是可以运行的,同样是和外部重复的啊,不解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-17 18:59:54 | 显示全部楼层
新手·ing 发表于 2017-7-17 18:54
Python内部不能调用外部的变量,想调用,就必须 global
第二个代码没有 global,所以报错

num = 1
def fun1():
    print(num)   
fun1()
如果代码改成这样,是可以运行的,内部是可以调用外部变量的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-17 19:08:16 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-17 19:09:05 | 显示全部楼层    本楼为最佳答案   
原谅我刚才没说清楚
不访问全局变量就在函数内部进行定义的话是没问题的:
一旦访问全局变量python就指向了全局变量
一般我们都避免同名变量这种事情
Screenshot_2017-07-17-19-01-33-118_com.hipipal.qpy3.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-17 19:12:48 | 显示全部楼层
python 是预编译的

def fun1():
    print(num)  # 在变量定义之前使用该变量是错误的
    num = 123 # = 号用于 定义局部变量,并覆盖全局的同名变量

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-17 19:14:11 | 显示全部楼层
MSK 发表于 2017-7-17 19:09
原谅我刚才没说清楚
不访问全局变量就在函数内部进行定义的话是没问题的:
一旦访问全局变量python就指向 ...

非常感谢,这下终于明白了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-17 19:18:20 | 显示全部楼层
MSK 发表于 2017-7-17 19:09
原谅我刚才没说清楚
不访问全局变量就在函数内部进行定义的话是没问题的:
一旦访问全局变量python就指向 ...

恕我再啰嗦一下,你说一旦访问就指向全局变量,那第二个print(num) 就应该打印全局变量,但为何会报错呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-17 19:19:59 From FishC Mobile | 显示全部楼层
python
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-17 19:21:21 From FishC Mobile | 显示全部楼层
tqhl 发表于 2017-7-17 19:18
恕我再啰嗦一下,你说一旦访问就指向全局变量,那第二个print(num) 就应该打印全局变量,但为何会报错呢

报错的是修改全局变量这一句~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 04:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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