为何两段Python代码的执行结果不一致?
为什么两段代码的执行结果不一样?
这问题核心在于Python中函数参数的传递逻辑和字符串的不可变性,咱们拆开来看:
第一段代码的运行逻辑
s = "a" def func(x,y): x = x.replace(x,y) print(s) func(s,"b")
- 当你调用
func(s,"b")时,Python会把全局变量s的当前值(字符串"a")复制一份,传给函数的参数x。因为字符串是不可变类型,函数里的x只是局部变量,和全局的s是完全独立的两个变量。 - 函数里的
x = x.replace(x,y)确实生成了新的字符串"b",但这个操作只改变了局部变量x的指向,丝毫没碰全局的s。所以最后print(s)输出的还是最初的"a"。
第二段代码的运行逻辑
s = "a" s = s.replace(s,"b") print(s)
- 这里你直接对全局变量
s进行了操作:s.replace()方法会返回一个替换后的新字符串(因为字符串不可变,原字符串不会被修改),然后你把这个新字符串重新赋值给了全局的s。 - 这一步直接更新了全局变量
s的指向,所以最后print(s)自然输出修改后的"b"。
额外小技巧:让第一段代码也能修改全局变量
如果想让第一段代码达到和第二段一样的效果,有两种常见方式:
- 在函数内用
global关键字声明要修改全局变量:
s = "a" def func(y): global s s = s.replace(s,y) print(s) func("b") # 输出b
- 让函数返回修改后的字符串,在外部赋值给
s:
s = "a" def func(x,y): return x.replace(x,y) s = func(s,"b") print(s) # 输出b
内容的提问来源于stack exchange,提问作者Matt7425
相关产品推荐
相关产品推荐

