关于函数变量的问题
def fun(var):var = 1314
print(var, end='')
var = 520
fun(var)
print(var)
为什么上述程序输出的是1314520呢?
我理解的是var = 1314是函数中的局部变量,下面var = 520是全局变量,后面print语句是在这个程序的作用域中实现的,所以不应该是输出520吗 本帖最后由 jackz007 于 2020-11-24 10:43 编辑
fun() 内的变量 var 赋值在先,所以,是局部变量,与主函数中的 var 不属于同一个变量。
调用 fun() 的时候,打印的 var 是 1314,不换行,然后在主函数中打印的 var 是 520,所以,最后输出的就是 1314520。 这涉及函数调用中参数传递的问题。在函数调用过程中,进行阐述的传递:
如果是不可变对象,在函数体的修改不会影响实参的值(例如:整型,字符串和元组)
如果是可变的对象,在函数体的修改会影响到实参的值(例如:集合,列表和字典)
我是这样理解的,显示运行函数外面var,赋值为int 520,然后调用fun(),将var=520传参数给函数。但是在函数内重新给了局部变量var赋值1314,所以函数内输出为1314,这时已经结束函数调用fun(var),下一句执行输出var(是实参)还是520,(end不换行,拼接输出)显示是1314520.
再举个例子:
# conding -utf-8
var = 520
t = 1
x =
def fun(var,t):
var = 1314
t = t+1
print(".............调用不可变对象.....................")
print(var,t)
fun(var,t,)
print(var,t)
print("...............调用可变对象 .........................")
def fun1(x=[]):
x.append(99)
for i in x:
print(i)
return x
fun1(x)
print(x)
输出为:
.............调用不可变对象.....................
(1314, 2)
(520, 1)
...............调用可变对象 .........................
1
2
3
99
jackz007 发表于 2020-11-24 10:39
fun() 内的变量 var 赋值在先,所以,是局部变量,与主函数中的 var 不属于同一个变量。
...
噢噢明白了 fun()函数运行之后本身是要打印出来的,不换行继续执行后面的程序就是最终结果了,感谢提醒 输出的是1314520
实际上是两个部分,分别是
1314 和 520
1314是fun函数打印的
def fun(var):
var = 1314
print(var, end='')
fun(var)
在fun(var)中有局部变量'var=1314'不论你传入什么参数,都会打印一个1314
而print最后的end='',意味着打印结束后,没有空格,不换行
之后你执行了
print(var)
在全局变量中var=520
会打印一个520
由于fun(var)中print参数end=‘’
这个520会打印在1314的后面
所以有了1314520的效果
页:
[1]