如何在python函数中使用全局变量



如何在python函数内部设置全局变量?

要在函数中使用global变量,需要在函数中执行global <varName>,如下所示。

testVar = 0
def testFunc():
    global testVar
    testVar += 1
print testVar
testFunc()
print testVar

给出输出

>>> 
0
1

请记住,如果要进行赋值/更改,只需要在函数中声明它们global。打印和访问不需要global

你可以,

def testFunc2():
    print testVar

而不必像我们在第一个函数中那样声明它global,它仍然会给出正确的值。

list为例,不能在不声明global的情况下分配list,但可以调用它的方法并更改列表。如下所示。

testVar = []
def testFunc1():
    testVar = [2] # Will create a local testVar and assign it [2], but will not change the global variable.
def testFunc2():
    global testVar
    testVar = [2] # Will change the global variable.
def testFunc3():
    testVar.append(2) # Will change the global variable.

考虑以下代码:

a = 1
def f():
    # uses global because it hasn't been rebound
    print 'f: ',a
def g():
    # variable is rebound so global a isn't touched
    a = 2
    print 'g: ',a
def h():
    # specify that the a we want is the global variable
    global a
    a = 3
    print 'h: ',a
print 'global: ',a
f()
print 'global: ',a
g()
print 'global: ',a
h()
print 'global: ',a

输出:

global:  1
f:  1
global:  1
g:  2
global:  1
h:  3
global:  3

基本上,当您需要每个函数访问同一个变量(对象(时,您会使用全局变量。不过,这并不总是最好的方式。

任何函数都可以访问全局,但只有在函数内部使用"global"关键字显式声明全局时,才能对其进行修改。以实现计数器的函数为例。你可以用这样的全局变量来做:

count = 0
def funct():
    global count
    count += 1
    return count
print funct() # prints 1
a = funct() # a = 2
print funct() # prints 3
print a # prints 2
print count # prints 3

现在,这一切都很好,但通常情况下,除了常数之外,使用全局变量不是一个好主意。您可以有一个使用闭包的替代实现,这样可以避免污染名称空间,并且更干净:

def initCounter():
    count = 0
    def incrementCounter():
        count += 1
        return count
    #notice how you're returning the function with no parentheses 
    #so you return a function instead of a value
    return incrementCounter 
myFunct = initCounter()
print myFunct() # prints 1
a = myFunct() # a = 2
print myFunct() # prints 3
print a # prints 2
print count # raises an error! 
            # So you can use count for something else if needed!

在函数中使用global <variable name>的显式声明应该有助于

在下面的示例中,我们在任何其他函数之外定义了一个变量c。在foo中,我们还声明了一个c,对其进行增量,并将其打印出来。您可以看到,重复调用foo()会一次又一次地产生相同的结果,因为foo中的c在函数的作用域中是本地的。

然而,在bar中,关键字global被添加在c之前。现在,变量c引用全局作用域中定义的任何变量c(即在函数之前定义的c = 1实例(。调用CCD_ 22重复更新全局CCD_。

>>> c = 1
>>> def foo():
...     c = 0
...     c += 1
...     print c
...
>>> def bar():
...     global c
...     c += 1
...     print c
...
>>> foo()
1
>>> foo()
1
>>> foo()
1
>>> bar()
2
>>> bar()
3

正常变量只能在函数内部使用,全局变量可以在函数外部调用,但如果不需要,请不要使用它,它可能会产生错误,大型编程公司认为这是新手做法。

几天来,我一直在处理同样的问题/误解我想要的东西,我认为你可能想要实现的是让函数输出一个结果,这个结果可以在函数运行完成后使用。

实现上述操作的方法是使用返回"某个结果",然后将其分配给函数后的变量。下面是一个例子:

#function
def test_f(x):
    y = x + 2
    return y
#execute function, and assign result as another variable
var = test_f(3)
#can use the output of test_f()!
print var      #returns 5
print var + 3  #returns 8

相关内容

  • 没有找到相关文章

最新更新