def foo():
global a
a = 10
VS
a = 0
def foo():
a = 10
在函数中声明全局而不是在顶部声明变量有什么用?它应该更干净吗?
答案 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()
在这里,您error
说globvar 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'关键字