这个为什么不是d?用global后不是可以改变全局变量吗?
本帖最后由 isdkz 于 2022-2-25 15:49 编辑准确来说,不是 print 有先后顺序,而是对参数的求值有先后顺序,
在对函数传参的时候,不可变对象传的是值,可变对象传的是引用,
而 s 是整数,整数是不可变对象,所以在传参的时候是传值,
print(s, run(5)) 在传参的时候先获取了 s 的值10,并把 10 传进去,而不是传 s 所在的那块内存地址(引用),再来求 run(5) 的值,
获取到的 s 的值是没有执行 run(5) 之前的,所以打印出的 s 的值就是 10。
你可以用一个可变对象来试一下,比如把 s 换成一个列表,
然后在函数里面往列表添加元素,你会发现换成可变对象打印出来的就是两个一样的结果:
s = []
def run(n):
for i in range(n):
s.append(i)
return s
print(s, run(5))
或
s = []
def run(n):
global s
for i in range(n):
s += # 在可变对象中,s = s + 与 s += 是有区别的,前者会改变 s 的指向,而后者不会,你可以把 s += 改成 s = s + 试试
return s
print(s, run(5)) 我现在才发现print有先后顺序{:10_250:}
你看我小小改动了一下print函数中的顺序
s = 10
def fun(n):
global s
for i in range(n):
s += 1
return s
print(fun(s), s)
结果是 20 20
为了进一步验证改成这样
print(fun(s), s,fun(s))
结果是 20 20 40
所以说print是有先后顺序的
所以就是它会先打印 s 的值,再去执行后面的 run() 函数来改变 s? isdkz 发表于 2022-2-25 11:49
准确来说,不是 print 有先后顺序,而是对参数的求值有先后顺序,
在对函数传参的时候,不可变对象传的 ...
谢谢您 风百默 发表于 2022-2-25 13:15
谢谢您
不客气{:5_109:}
页:
[1]