使用Ubuntu 14.04提供的Python 2.7.6。Python:檢查globals()中是否存在變量使其在本地上下文中不可見
我有一些函數引用由調用者定義的變量。我想要一種方法來查找調用者是否設置了變量(如果他們沒有,我會在本地設置一個默認值),所以我在StackOverflow上找到了this answer。
我遇到的問題是檢查變量的存在使其不可見/不存在以下代碼。
爲方便調查此事的人員,下面的代碼塊應該可以直接剪切粘貼到系統上的文件進行測試。
#!/usr/bin/env python
# Tested on Python 2.7.6 from Ubuntu 14.04.
def calledfunction():
print globals()
print
print locals()
print
# Try commenting the next five lines out. While they're here, the variable
# becomes invisible to the print statement below.
if not 'globalvar' in globals():
globalvar = "created within the function"
print "assigning variable locally"
else:
print "variable assigned globally"
# global globalvar
# If you uncomment the above line, the variable is visible, but Python
# prints a syntax warning.
print
print globals()
print
print locals()
print
print "the variable 'globalvar' is:", globalvar
print
# -----------------
print "calling function before the variable is defined"
print
calledfunction()
globalvar = "created outside the function"
print "calling function after the variable is defined"
print
calledfunction()
我的期望是,在全局「變量」()試驗不應導致變量從print語句它後面的可見性消失。我的期望不正確嗎? (Python似乎認爲我不是)
我對你想做什麼感到困惑。您定義的函數會感知作爲函數定義模塊一部分的全局變量。也就是說,您控制的模塊。因此,爲什麼不只是用合理的默認值初始化全局變量? – Dunes 2014-10-06 19:27:49
@Dunes:函數並不總是在我控制的模塊中。它是庫的一部分,將被導入到其他代碼中,我可能會或可能不會控制它。 – 2014-10-06 20:41:49
導入函數的全局變量是它在其中定義的模塊的全局變量。將其導入到其他模塊不會改變它。 – Dunes 2014-10-06 21:07:31