鱼C论坛

 找回密码
 立即注册
查看: 1817|回复: 8

[已解决]python

[复制链接]
发表于 2023-5-5 16:45:47 | 显示全部楼层 |阅读模式

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

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

x

                               
登录/注册后可看大图



请问一下大神,为啥test2打印出来是a=200?
最佳答案
2023-5-5 17:27:31
大大大大力无限 发表于 2023-5-5 17:25
1,哦哦那大神帮我看下这个代码
a=100
def x():

1. 在这段代码中,全局变量 a 被定义为 100,在函数 x() 中通过关键字 global 将其标记为全局变量,并在函数中修改了该变量的值为 200,然后再将其修改为 300。因此,当调用函数 y() 输出全局变量 a 的值时,输出的是最终的结果,即 a=300

2. 是的,这段代码先访问了全局变量 a,然后在函数 test1() 中使用了 global a 将其标记为全局变量,并对其进行了修改。因此,当函数 test2() 访问全局变量 a 时,它获取的是最新的全局变量 a,即被 test1() 修改后的值 200。这就是 Python 中使用 global 声明的变量都是同一个变量的原因。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-5 16:46:34 | 显示全部楼层
哪个Test2?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-5 16:46:37 | 显示全部楼层
代码或截图呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-5 17:02:15 | 显示全部楼层
a=100
def test1():
    global a
    print('...test1...修改前..a=%d'%a)
    a=200
    print('...test1...修改后..a=%d'%a)

   
def test2():
    print('...test3...a=%d'%a)

   
test1()
...test1...修改前..a=100
...test1...修改后..a=200
test2()
...test3...a=200
不好意思啊亲们,照片没发上来,我就手动写了,这里的test2为啥是a=200啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-5 17:03:25 | 显示全部楼层
在该段代码中,全局变量a的值被函数test1()修改为200并保持不变,直到程序结束。因此,当test2()调用时,它会输出全局变量a的当前值,即200。这是因为函数test1()中使用了关键字global声明,将a变量标记为全局变量,以便在其他函数中也能修改它的值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-5 17:25:19 | 显示全部楼层
歌者文明清理员 发表于 2023-5-5 17:03
在该段代码中,全局变量a的值被函数test1()修改为200并保持不变,直到程序结束。因此,当test2()调用时,它 ...

1,哦哦那大神帮我看下这个代码
a=100
def x():
    global a
    a=200
    print('修改前a=%d'%a)
    a=300
    print('修改后a=%d'%a)

   
def y():
    print('a=%d'%a)

   
x()
修改前a=200
修改后a=300
y()
a=300
这里全局变量100为啥就被修改为300了呢,是按照最终的结果吗?
2,在这个代码当中执行的逻辑是先访问了全局变量,然后在test1中被修改为200,然后调用test2的时候用到全局变量,但是是修改后的是这个意思吗?
a=100
def test1():
    global a
    print('...test1...修改前..a=%d'%a)
    a=200
    print('...test1...修改后..a=%d'%a)

   
def test2():
    print('...test3...a=%d'%a)

   
test1()
...test1...修改前..a=100
...test1...修改后..a=200
test2()
...test3...a=200
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-5 17:27:31 | 显示全部楼层    本楼为最佳答案   
大大大大力无限 发表于 2023-5-5 17:25
1,哦哦那大神帮我看下这个代码
a=100
def x():

1. 在这段代码中,全局变量 a 被定义为 100,在函数 x() 中通过关键字 global 将其标记为全局变量,并在函数中修改了该变量的值为 200,然后再将其修改为 300。因此,当调用函数 y() 输出全局变量 a 的值时,输出的是最终的结果,即 a=300

2. 是的,这段代码先访问了全局变量 a,然后在函数 test1() 中使用了 global a 将其标记为全局变量,并对其进行了修改。因此,当函数 test2() 访问全局变量 a 时,它获取的是最新的全局变量 a,即被 test1() 修改后的值 200。这就是 Python 中使用 global 声明的变量都是同一个变量的原因。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-5 17:30:50 | 显示全部楼层
歌者文明清理员 发表于 2023-5-5 17:27
1. 在这段代码中,全局变量 a 被定义为 100,在函数 x() 中通过关键字 global 将其标记为全局变量,并在 ...

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

使用道具 举报

发表于 2023-5-5 22:11:38 | 显示全部楼层

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 04:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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