Python:在函数中引用全局变量

Python:在函数中引用全局变量,python,global-variables,counter,Python,Global Variables,Counter,我遇到了无法从函数内部引用golbal变量的问题。它总是抛出一个错误,称为“赋值前引用的局部变量‘variable_name’”。 我编写了一个简单的代码,在尝试返回两个数字的乘积数组时会抛出相同的错误 table=[] counter = 0 def multiplier(num): if counter >9: print (table) else: table.append(num*counter) counter

我遇到了无法从函数内部引用golbal变量的问题。它总是抛出一个错误,称为“赋值前引用的局部变量‘variable_name’”。 我编写了一个简单的代码,在尝试返回两个数字的乘积数组时会抛出相同的错误

table=[]
counter = 0
def multiplier(num):

    if counter >9:
        print (table) 
    else:
        table.append(num*counter)
        counter +=1
        multiplier(num)

multiplier (5)

我做错了什么?我的原始代码要求一次又一次地调用该函数,因此我想使用计数器来跟踪它被调用的次数。这意味着我无法初始化函数内部的计数器,因为一旦调用函数,并且由于计数器在函数内部初始化,它将被重置

在功能块的第一行使用
global
关键字

比如:

你必须申报

global counter

在函数中访问全局变量,而不是创建同名的局部变量。更好的解决方案是定义一个类。

您可以使用
global
关键字来使用全局变量。要记住以下几点:


  • 仅在更改全局变量值时使用
    global
    关键字


  • 如果仅通过使用变量名称(此处不需要全局变量定义)进行读取,则可以使用
    global
    变量

  • 例如:

    var = 10
    
    def change_var():
        global var
        var = 2
        return var
    
    def read_var():
        print "Variable is:",var
    

    希望这有帮助

    使
    计数器
    成为默认值为零的函数参数。当您递归时,向计数中添加一个

    table=[]
    def multiplier(num, counter = 0):
        if counter >9:
            print (table) 
        else:
            table.append(num*counter)
            multiplier(num, counter+1)
    multiplier(5)
    

    下面是经过重构的函数,它返回一个值,而不是打印它

    table=[]
    def multiplier(num, counter = 0):
        if counter >9:
            return table 
        else:
            table.append(num*counter)
            return multiplier(num, counter+1)
    print(multiplier(5))
    

    无需将
    声明为
    全局
    。因为
    是采集数据类型。在函数块内部,它只是引用变量,而不是赋值。你说得对。但是它会痛吗(只是不确定它是否有任何效果)?嘿,是的,我一直在使用这个方法,直到我发布了这个问题。谢谢
    table=[]
    def multiplier(num, counter = 0):
        if counter >9:
            return table 
        else:
            table.append(num*counter)
            return multiplier(num, counter+1)
    print(multiplier(5))