有没有一种方法,我可以告诉Python来检查它是否是一个变量

问题描述:

说:有没有一种方法,我可以告诉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

你的函数的尝试里面检查它是否存在不依赖于异常

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

恩替代方法:假设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

在这个例子中你给

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