由于某种原因,当另一个函数访问时,Python解释器不会修改函数中的返回语句值。
x=10
def example():
global_variable_x = x
print(" i know i can access it", global_variable_x)
global_variable_x +=5
print(" woa, i can modify it" ,global_variable_x)
return global_variable_x
example()
def modify_another_function():
return 10*example()
modify_another_function()
答案 0 :(得分:1)
该计划按预期运作。
您定义global_variable_x = x
并将其命名为global_variable,但实际上它是一个局部变量。能够保持数据持久性的最简单方法是修改x
或使用类并将其写入类变量。
为您提供一些更详细的信息:
x=10
def example():
global_variable_x = x
print(" i know i can access it", global_variable_x)
global_variable_x +=5
print(" woa, i can modify it" ,global_variable_x)
return global_variable_x
example()
它可能是抽象的,但只是为了给你一些想法:
您将调用example()
example()函数调用将为其创建一个新的堆栈帧
函数调用放置global_variable_x
。
return
语句时
被删除,唯一剩下的就是x
。example()
时,它将创建一个新堆栈
框架,再次放置global_variable_x
并再次实例化它
值为x
,为10。此处的问题与范围界定有关,建议您查看一下:this blog
答案 1 :(得分:0)
内部打印示例将始终显示相同的内容。
这是因为在example
的上下文中没有任何变化。
差异仅在example
内modify_another_function
之外可见。与{10}的乘法发生在example
之外,如果您将modify_another_function
更改为此,则会看到差异:
def modify_another_function():
return print 10*example()
答案 2 :(得分:0)
我认为你的意思是你得到的是:
i know i can access it 10
woa, i can modify it 15
i know i can access it 10
woa, i can modify it 15
我假设你想要类似的东西:
i know i can access it 10
woa, i can modify it 15
i know i can access it 15
woa, i can modify it 20
你可以这样做:
x=10
def example():
print(" i know i can access it", x)
x +=5
print(" woa, i can modify it", x)
return x
example()
def modify_another_function():
return 10*example()
modify_another_function()
但是你不能按照你的方式去做,因为数字是值和不可变的。因此,如果你复制它们,你只是复制它们的值,而不是它们的引用。