Python 为什么这两个场景不会返回相同的输出?

Python 为什么这两个场景不会返回相同的输出?,python,Python,Hello bellow同一函数有两次运行。他们都应该返回AB作为答案。但只有第一个能做到。全局变量是怎么回事 txt='' def test(): global txt txt+='A' print(txt) return 'B' tmp=test() print('tmp: ', tmp) txt+=tmp print(txt) 第二轮 编辑 在第二个例子中 txt += test() 这可以分解为 txt = txt + test() 在这种情况下,

Hello bellow同一函数有两次运行。他们都应该返回AB作为答案。但只有第一个能做到。全局变量是怎么回事

txt=''

def test():
    global txt
    txt+='A'
    print(txt)
    return 'B'
tmp=test()
print('tmp: ', tmp)
txt+=tmp
print(txt)
第二轮

编辑

在第二个例子中

txt += test()
这可以分解为

txt = txt + test()
在这种情况下,第一个txt不会更改为A

因此,你实际上在做什么

txt = '' + 'B'
对于第一个示例,txt变量已在创建tmp的过程中更改为A

因此,

txt += test()
在第二个示例中,您正在执行txt='A'+'B'

txt += test()
这可以分解为

txt = txt + test()
在这种情况下,第一个txt不会更改为A

因此,你实际上在做什么

txt = '' + 'B'
对于第一个示例,txt变量已在创建tmp的过程中更改为A

因此,

txt += test()

您正在执行txt='A'+'B'

我的猜测是,当您在第二次运行中执行函数时,python存储了一个对该字符串当时的引用。当返回值并且txt+=添加“B”时,“A”就消失了。你真的在第二次运行之前做了txt=吗?@Barmar我添加了照片证明。我猜,当你在第二次运行中执行函数时,python会存储一个对字符串当时的引用。当返回值并且txt+=加上“B”时,“A”就消失了。你真的在第二次运行之前做了txt=吗?@Barmar我加了照片校样。是的,这也是我的想法。但这更容易理解+1。是的,这也是我的想法。但是+1更容易理解。