[英]Using global variables in python in a function
def foo():
global a
a = 10
與
a = 0
def foo():
a = 10
在函數中聲明全局而不是在頂部聲明變量有什么用。 這樣應該更清潔嗎?
如果您將其聲明為全局變量,則不必返回它。 如果不使用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
由您決定是要函數返回還是使用全局函數。 它可以簡化您的代碼,對於計算不需要每次都調用的常量的函數很有用。 但是,如果將其用於單個過程,則首選“返回”方法。
在第一種情況下,所有功能中的值均保持不變。
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的局部或全局變量
那將使其變得模棱兩可。 看這個,
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
在您的第一個示例中,在調用foo()之前“ a”不可用。 一旦在函數中定義它,它就可以在函數外部使用。
在第二個示例中,它在調用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
問:在函數中聲明全局而不是在頂部聲明變量有什么用?
通常,我們將很少使用的常量定義為全局變量。
>>> import math
>>> math.pi
3.141592653589793
數學內容/網頁/服務器名稱/ URL-在一段時間內不會改變。
通常,不建議重新定義全局變量或在函數中定義全局變量。 但是很少有例外情況,我們別無選擇,只能重新定義它。 可能是由於舊系統中的新升級所導致,此變量在其中大量使用。
因此,請繼續使用第二種方法。 在函數外定義“ 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
希望這可以幫助。
如果在循環中使用相同的變量,則全局變量和局部變量之間將存在競爭。 因此,如果要在循環中使用全局變量的值,則必須提及“ global”關鍵字
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.