在函数中使用python中的全局变量

时间:2016-03-23 06:11:23

标签: python function namespaces

def foo():
    global a 
    a = 10

VS

a = 0
def foo():
    a = 10

在函数中声明全局而不是在顶部声明变量有什么用?它应该更干净吗?

6 个答案:

答案 0 :(得分:1)

如果您将其声明为全局,则不必返回它。 如果不使用global,则可以返回a。 没有全球化就是这样:

In [7]: def foo():
   ...:     a = 10
   ...:     return a
   ...: 

In [9]: a = foo()

In [10]: a
Out[10]: 10

全球:

In [11]: a = 0

In [12]: def foo2():
   ....:     global a
   ....:     a = 10
   ....:     

In [13]: a
Out[13]: 0

In [14]: foo2()

In [15]: a
Out[15]: 10

决定您是希望函数返回还是使用全局函数的是您。 它可以简化你的代码,它可以用于计算一些你不想每次都调用它的常量的函数。 但如果将它用于单个程序,则更喜欢“返回”方法。

答案 1 :(得分:1)

在第一种情况下,值在所有函数中保持相同。

def set_globvar_to_one():
    global globvar
    globvar = 1
    print globvar

def print_globvar():
    print globvar     # No need for global declaration to read value of globvar

set_globvar_to_one()
print_globvar()

输出将为1和1.

但是第二个案例

def set_globvar_to_one():
    globvar = 1
    print globvar

def print_globvar():
    print globvar     # No need for global declaration to read value of globvar

set_globvar_to_one()
print_globvar()

在这里,您errorglobvar is not defiend,因为没有名为globavar的本地或全局变量

答案 2 :(得分:1)

这会使它变得含糊不清。看看这个,

a = 0
def foo():
    a = 10 # *

查看标有*的行。您是要分配给全局a还是属于a的本地变量10。口译员无法知道你的意思。因此,需要global

a = 0
def foo():
    a = 10 # local variable a

def bar():
    global a # will be modifying global variable a in this function
    a = 10 # assign 10 to global variable 

答案 3 :(得分:1)

在你的第一个例子" a"在调用foo()之前不可用。一旦在功能中定义它在函数外部可用。

在第二个例子中,它在调用foo()之前可用,但在函数内部对它进行更改不会影响全局版本。

这个例子应该证明两个例子之间的区别

#!/usr/bin/python

def foo():
    global a
    a = 10
    print a

try:
 print a
except Exception,e:
 print e

foo()
print a

print "-"*70

b = 0
def bar():
    b = 10
    print b

print b
bar()
print b

输出:

global name 'a' is not defined
10
10
----------------------------------------------------------------------
0
10
0

答案 4 :(得分:1)

Q值。在函数中声明全局而不是在顶部声明变量有什么用?

通常我们将常用的常量定义为全局变量。

>>> import math
>>> math.pi
3.141592653589793

数学内容/网页/邮件名称/网址 - 在一段时间内不会改变。

通常,不建议在函数中使用RE-DEFINE全局变量或定义全局变量。但很少有例外情况,我们没有选择,只能重新定义它。可能是由于旧系统中的新升级导致此变量被大量使用。

  

所以请按照你的第二种方法。定义' a'在你的外面   功能。这看起来也不错易于阅读。

>>> a = 10
>>> def foo():
...     a = 14 # defining a local variable called a
...
>>> a
10
>>>
>>> foo()
>>> a  
10
>>> # a = 14 has no scope outside foo function
>>> 
>>> def foo():
...     global a # notify function to use global variable here.
...     a = 15 # re-defining global ==> nt preferred it
...
>>> a
10
>>> foo()
>>> a # see now it changed here.
15

希望这有帮助。

答案 5 :(得分:0)

如果你在循环中使用相同的变量,那么全局变量和局部变量之间将存在竞争。所以如果你想在循环中使用全局变量的值,你必须提到'global'关键字