鱼C论坛

 找回密码
 立即注册
查看: 2725|回复: 5

[已解决]求大神帮我解释一下,为什么这个程序打印出来的是1314520?

[复制链接]
发表于 2021-6-26 10:44:14 | 显示全部楼层 |阅读模式

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

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

x
1.        def fun(var):
2.            var = 1314
3.            print(var, end='')
4.       
5.        var = 520
6.        fun(var)
7.        print(var)

求大神帮我解释一下,为什么这个程序打印出来的是1314520?
最佳答案
2021-6-26 10:51:32
本帖最后由 fish_nian 于 2021-6-26 10:56 编辑

因为函数内部对 var 重新赋值为 1314 触发屏蔽机制,暂时屏蔽外部的 var = 520,此时函数打印的结果就是1314了。而后面在函数外直接打印var变量的值,此时的结果就是520,因为第三行的end = ' ',那么此时两个结果显示在同一行,显示为1314520 了
def fun(var):           # var在外面已经定义了,传入函数内的就是局部变量
    var=1314            # 局部变量 var 被赋新值 1314,由于和函数外部变量重名,启动屏蔽机制,暂时屏蔽外部变量
    print(var,end='')   # 打印var的值,因为end=''所以不换行
var=520                 # 定义函数外的变量var值为520
fun(var)                # 执行函数fun()打印1314
print(var)              # 打印函数外的变量520
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-26 10:51:32 | 显示全部楼层    本楼为最佳答案   
本帖最后由 fish_nian 于 2021-6-26 10:56 编辑

因为函数内部对 var 重新赋值为 1314 触发屏蔽机制,暂时屏蔽外部的 var = 520,此时函数打印的结果就是1314了。而后面在函数外直接打印var变量的值,此时的结果就是520,因为第三行的end = ' ',那么此时两个结果显示在同一行,显示为1314520 了
def fun(var):           # var在外面已经定义了,传入函数内的就是局部变量
    var=1314            # 局部变量 var 被赋新值 1314,由于和函数外部变量重名,启动屏蔽机制,暂时屏蔽外部变量
    print(var,end='')   # 打印var的值,因为end=''所以不换行
var=520                 # 定义函数外的变量var值为520
fun(var)                # 执行函数fun()打印1314
print(var)              # 打印函数外的变量520
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-6-26 10:53:54 | 显示全部楼层

函数外给 var 赋值 520,则对于此时的 var 是全局变量,而定义函数中的 var = 1314 是局部变量

而此时因为和全局变量 var = 520 同变量名就会导致触发 Python 的屏蔽机制

暂时屏蔽全局变量 var = 520 ,在函数 var 的值为局部变量的 var = 1314

所以调用函数时先运行到 fun 函数中的 print ,为 1314 且不换行,之后再执行函数外的 print 打印 520
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-6-28 20:20:33 | 显示全部楼层
fish_nian 发表于 2021-6-26 10:51
因为函数内部对 var 重新赋值为 1314 触发屏蔽机制,暂时屏蔽外部的 var = 520,此时函数打印的结果就是131 ...

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

使用道具 举报

发表于 2021-6-28 23:44:32 | 显示全部楼层
阿傅 发表于 2021-6-28 20:20
谢谢!!懂啦!!!

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

使用道具 举报

发表于 2021-6-29 09:13:35 | 显示全部楼层
var的名称是同一个,但函数内部声明的变量未使用global时,两者指向内存的地址不相同,不是同一个变量,将不会修改全局变量的值;第2行的var=1314是局部变量,第5行的var=520是全局变量,当第六行调用fun(var)函数时,执行你定义的函数时,函数不能修改全部变量var=520,会自行创建一个函数内部的var=1314,然后再执行打印语句,控制台将会打印1314;最后走到第7步时,第5行的var值在第6步执行fun时没有修改,将会打印520
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-14 18:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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