我想在函数内使用全局范围内的字符串。 我在某处读到,不同的范围对于它们各自的局部变量具有不同的值,即使它们具有相同的名称。
但就我而言,我得到的是这样的东西
https://i.stack.imgur.com/hyqZk.png(此链接包含图片)
答案 0 :(得分:0)
来自Python FAQ:
在Python中,仅在函数内引用的变量是隐式全局变量。如果在函数体内的任何位置为变量赋值,则除非明确声明为全局,否则将其视为局部值。
虽然起初有点令人惊讶,但片刻的考虑解释了这一点。一方面,要求指定变量的全局性可以防止意外的副作用。另一方面,如果所有全局引用都需要全局,那么您将一直使用全局。您必须将对内置函数或导入模块的组件的每个引用声明为全局。这种混乱会破坏全球声明识别副作用的有用性。
因此printscr
函数可以在全局范围内看到该变量,但如果您尝试修改string
的值,则会得到UnboundLocalError
,因为该名称不存在在本地范围内,您不能从函数内部修改全局变量。
def printscr():
# No local name `string` exists and can't assign to the global variable.
string += 2
答案 1 :(得分:0)
查看下面的代码
def printstr():
print string
string = 1
printstr()
输出
1
但是,如果您尝试更新函数中的值,则该值仅存在于本地范围
中def printstr():
string =+ 1
print string
string = 1
printstr()
print string
输出
2
1
所以在printstr之外的字符串仍然保持1
全局更新值
def printstr():
global string
string =+ 1
print string
string = 1
printstr()
print string
输出
2
2
我们必须使用global关键字来引用全局范围变量,我希望这可以澄清你的怀疑