求大神帮我解释一下,为什么这个程序打印出来的是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: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
函数外给 var 赋值 520,则对于此时的 var 是全局变量,而定义函数中的 var = 1314 是局部变量
而此时因为和全局变量 var = 520 同变量名就会导致触发 Python 的屏蔽机制
暂时屏蔽全局变量 var = 520 ,在函数 var 的值为局部变量的 var = 1314
所以调用函数时先运行到 fun 函数中的 print ,为 1314 且不换行,之后再执行函数外的 print 打印 520 fish_nian 发表于 2021-6-26 10:51
因为函数内部对 var 重新赋值为 1314 触发屏蔽机制,暂时屏蔽外部的 var = 520,此时函数打印的结果就是131 ...
谢谢!!懂啦!!! 阿傅 发表于 2021-6-28 20:20
谢谢!!懂啦!!!
{:10_254:}给个最佳答案把 var的名称是同一个,但函数内部声明的变量未使用global时,两者指向内存的地址不相同,不是同一个变量,将不会修改全局变量的值;第2行的var=1314是局部变量,第5行的var=520是全局变量,当第六行调用fun(var)函数时,执行你定义的函数时,函数不能修改全部变量var=520,会自行创建一个函数内部的var=1314,然后再执行打印语句,控制台将会打印1314;最后走到第7步时,第5行的var值在第6步执行fun时没有修改,将会打印520
页:
[1]