给定以下脚本中的以下内容:
class ClassA:
def GetExpBidBrice():
global x
x ='abc'
def GetExpAskPrice():
y = x + 'zyz'
class ClassB:
def GetExpBidBrice():
x = 123
def GetExpAskPrice():
y = x + 'zyz'
ClassA.GetExpBidPrice()
中的global
是否使x
全局仅适用于ClassA
中的其他方法?或它使其全局整体上,即在ClassB
中或使用称为x
的变量的其他类?
该变量仅在当前代码块中进行全局。来自global
语句文档:
。
global
语句是一项声明,可为整个当前代码块。这意味着列出的标识符应被解释为全球群体。没有全局,尽管免费变量可能是指无需宣布全局的全球变量,但不可能分配给全球变量。
其他方法中的变量x
不受影响。它仅是ClassA.GetExpBidBrice()
方法中的全局。
如果您希望它也是其他方法的全局(ClassA.GetExpAskPrice()
,ClassB.GetExpBidBrice()
和ClassB.GetExpAskPrice()
),则您需要单独声明x
一个全局。
在给定函数中使用global
关键字标记该函数范围内的变量的任何用途,它是指带有该名称的模块级全局变量。
在您的示例中,使用的方法Just global
声明对其他方法中的使用没有影响。
使用内部函数内部功能的全局关键字将在该功能块中有效。Global将帮助您从功能内部进行更改/更新全局变量。
我说"在整个脚本中"。这意味着在没有标识的名称空间中,紧随>>>
之后>>> def g():
def f():
global x
print x
return f
>>> f = g()
>>> f.func_globals is g.func_globals
True
>>> f.func_globals is globals()
True
>>> x = 3
>>> f()
3
第二个示例告诉您:它始终是模块/脚本命名空间
>>> x = 3
>>> def g():
x = 0
def f():
global x
print x
x += 1
return f
>>> f = g()
>>> f() # would be 0 if x of g was used.
3
>>> f()
4
它取决于。
做 sissignments 的方法将创建本地变量,除非用同一方法用global
关键字声明它们。
仅读取变量的方法将尝试通过该名称读取全局。例如:
class ClassA:
def GetExpBidBrice(self):
global x
x ='abc'
class ClassB:
def GetExpAskPrice(self):
print(x)
a = ClassA()
b = ClassB()
a.GetExpBidBrice()
b.GetExpAskPrice()
将显示abc
。
但是:如果您省略了第一个方法调用,只是这样做:
b = ClassB()
b.GetExpAskPrice()
您得到:
NameError: global name 'x' is not defined
现在,如果我们更改为:
def GetExpAskPrice(self):
x = 'xyz'
print(x)
此任务是指称为" x"的本地变量,它不会影响全局。