簡體   English   中英

在函數中使用python中的全局變量

[英]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()

在這里,您會收到errorglobvar 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM