阿傅 发表于 2021-6-26 10:44:14

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

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

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

fish_nian 发表于 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

Twilight6 发表于 2021-6-26 10:53:54


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

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

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

所以调用函数时先运行到 fun 函数中的 print ,为 1314 且不换行,之后再执行函数外的 print 打印 520

阿傅 发表于 2021-6-28 20:20:33

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

谢谢!!懂啦!!!

fish_nian 发表于 2021-6-28 23:44:32

阿傅 发表于 2021-6-28 20:20
谢谢!!懂啦!!!

{:10_254:}给个最佳答案把

永无指境 发表于 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
页: [1]
查看完整版本: 求大神帮我解释一下,为什么这个程序打印出来的是1314520?