'global'仅在类内或整个脚本中使变量全局化?



给定以下脚本中的以下内容:

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"的本地变量,它不会影响全局。

相关内容

  • 没有找到相关文章

最新更新