2015-03-02 85 views
-3

說:有沒有一種方法,我可以告訴Python來檢查它是否是一個變量

def sumer(num1,num2) 
    if num1 or num2 is a non-defined variable 
     print("variable isnt defined") 

我怎麼能寫在這樣一個taht實際工作?

編輯:我應該澄清,我希望python進行一項行動,如果它被定義。

+2

沒有,NUM1和NUM2肯定會在函數體中定義的,因爲它們的參數。您可以檢查它們是否爲None,但是... – 2015-03-02 05:41:48

+0

將它們分配給try-block中的自己 – motoku 2015-03-02 05:42:54

回答

1

你的函數的嘗試裏面檢查它是否存在不依賴於異常

try: 
    num1 
except NameError: 
    print "num1 does not exists" 
else: 
    print "num1 exists" 

try: 
    num2 
except NameError: 
    print "num2 does not exists" 
else: 
    print "num2 exists" 
+0

'num1'和'num2'將始終存在,因爲它們是函數定義的一部分。 – 2015-03-02 05:54:19

1

恩替代方法:假設NUM1

if num1 in locals() or num1 in globals(): 
    print('Exists') 

是一個包含字符串變量名來尋找。

+0

'num1'和'num2'將始終存在,因爲它們是函數定義的一部分。 – 2015-03-02 05:54:06

+0

我認爲num1是一個包含變量名稱的字符串,用於查找。否則你是正確的。 – Marcin 2015-03-02 05:55:51

2

在這個例子中你給

def foo(var1 = None, var2 = None): 
    if var1 is not None: ... 
    if var2 is not None: ... 

注意,他們將永遠是定義,正如所寫的,因爲他們在函數簽名。你要檢查的是他們是否提供,這是上述代碼的作用。

在上面的例子中,我用「is」而不是「==」。這是一個首選項(String comparison in Python: is vs. ==),但我喜歡它,因爲「==」可能會拋出一個異常,例如使用一個數組numpy array

如果已經使用變量名,那麼選擇手動操作是非常奇怪的做法,但可以通過使用locals()和globals()完成,如其他答案中給出的。更多的pythonic將會是duck-type,並且會在例外情況下覆蓋你的軌道。如果您不想明確檢查參數是否已通過,那麼這往往是順其自然的方式。

另一種方法是使用** kwargs或可變長度的關鍵字參數。考慮:

def foo(**kwargs): 
    if 'my_variable_name' in kwargs.keys(): ... 

也會完成任務。

讀控制流蟒頁面可能是一個很好的起點參考地點:

https://docs.python.org/2/tutorial/controlflow.html

相關問題