2017-05-02 37 views
1

我想定義一個Python函數: 1.檢查一個變量是否已經存在。 2.如果沒有,將其創建爲全局變量(因爲我想在函數外部使用它)。如何創建一個全局變量,如果它不存在於Python中?

def foo(): 
    try: 
     x 
    except NameError: 
     global x 
     x = 1 
    else: 
     pass 

foo() 
print(x) 

然後有一個錯誤:

SyntaxError: name 'x' is used prior to global declaration

如何解決這個問題?謝謝:)

+4

這聽起來並不像你應該想要做的事。你爲什麼要嘗試這樣做? –

+0

是什麼導致這樣做? –

+0

這裏是一些寫在文件中的變量名,我想通過讀這個文件來創建這些變量。 – Hypo

回答

1

只需在功能上的變量聲明爲全局不會創建它 - 所以這種形式的作品:

def foo(): 
    global x 
    try: 
     x 
    except NameError: 
     x = 1 

最關鍵的事情在這裏明白的是,當Python的一個編譯函數,它將函數中的每個變量作爲本地,非本地或全局(或內置)變量「烘焙」 - 對該變量的任何訪問都將具有一個或另一個相關的字節碼。因此,「全局」聲明會影響整個函數,不管它是否是 - 因爲tryig在全局語句看起來模糊之前訪問變量,所以您看到的錯誤是被強制的。

但是既然你在這 - 你確定要這樣做嗎? 全局變量適用於具有可在模塊中的函數中共享的值 - 但是,即使它們要在對特定函數的調用中進行初始化,它們也應該在模塊體中進行聲明並進行適當的記錄。如果在模塊加載時沒有最終值,只需將其分配給None。

+1

爲什麼'else'子句? –

+0

我jsut複製並粘貼OP代碼 - :-) – jsbueno

+0

謝謝你的作品。但說實話,我對這裏的理解並不難...... – Hypo

0

像這樣的東西可以工作。

​​

只是檢查x變量是否存在。

你也可以檢查,如果一個變量聲明爲全球

if not('x' in globals()): 
+0

這是行不通的,因爲「本地人」顯然不會返回全局變量。 – jsbueno

+0

在全局變量()中使用「'x」而不是「locals()」是我想要的。它的作品謝謝你。 – Hypo

相關問題