不需要在python的全局范围内全局定义变量吗?

时间:2017-09-20 01:23:11

标签: python python-3.x

我想在函数内使用全局范围内的字符串。 我在某处读到,不同的范围对于它们各自的局部变量具有不同的值,即使它们具有相同的名称。

但就我而言,我得到的是这样的东西

https://i.stack.imgur.com/hyqZk.png(此链接包含图片)

2 个答案:

答案 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关键字来引用全局范围变量,我希望这可以澄清你的怀疑