You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何两段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"。

额外小技巧:让第一段代码也能修改全局变量

如果想让第一段代码达到和第二段一样的效果,有两种常见方式:

  1. 在函数内用global关键字声明要修改全局变量:
s = "a"
def func(y):
    global s
    s = s.replace(s,y)
    print(s)
func("b")  # 输出b
  1. 让函数返回修改后的字符串,在外部赋值给s:
s = "a"
def func(x,y):
    return x.replace(x,y)
s = func(s,"b")
print(s)  # 输出b

内容的提问来源于stack exchange,提问作者Matt7425

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:45:57