Python 如何检查函数中是否存在变量?
我试着检查变量是否存在,但在函数内部。 我被教导,要做到这一点,你唯一需要做的就是:Python 如何检查函数中是否存在变量?,python,function,variables,Python,Function,Variables,我试着检查变量是否存在,但在函数内部。 我被教导,要做到这一点,你唯一需要做的就是: 'a' in locals() 不幸的是,事情比我想象的要困难一点 我试图定义一个包含此方法的函数 q=[1,2,3] def f(): print('q' in locals()) 当我运行此函数时,它返回: False True 问题是,正如我们所看到的,q是一个变量,所以当我运行相同的命令,但在函数之外时: 'q' in locals() 它返回: False True 有办法解决
'a' in locals()
不幸的是,事情比我想象的要困难一点
我试图定义一个包含此方法的函数
q=[1,2,3]
def f():
print('q' in locals())
当我运行此函数时,它返回:
False
True
问题是,正如我们所看到的,q是一个变量,所以当我运行相同的命令,但在函数之外时:
'q' in locals()
它返回:
False
True
有办法解决这个问题吗?您可以使用
hasattrobj,var
并用self替换obj
class test():
def __init__(self):
self.a = 1
def check(self, var):
return hasattr(self, var)
t = test()
print(t.check("a"))
print(t.check("b"))
输出
True
False
当您编写以下代码行时
q=[1,2,3]
def f():
print('q' in locals())
f()
这里,变量“q”不是函数f的局部变量,因为它是在函数作用域之外声明的。在函数内部,可以使用全局变量访问q。
但是,函数外的“q”是一个局部变量。
因此,当您检查函数内部时
q=[1,2,3]
def f():
print('q' in locals())
它将返回False
但如果您在函数内声明并检查如下:-
def f():
q=[1,2,3]
print('q' in locals())
它将返回True,因为q现在是函数的局部
此外,如果您将函数内的“q”选为全局,它将返回True,因为“q”在函数外声明并具有全局作用域
q=[1,2,3]
def f():
print('q' in globals())
f()
输出
True
您可以在globals字典中测试列表q是否存在,因为它存在于函数f的全局范围内,而不是局部范围内,即: 正如注释中所指出的,像这样使用变量的字符串名测试变量的存在性并不理想,您可以使用try/except:
def f():
try:
# Do something with q
print(q)
except NameError:
print("Variable not defined")
def f:globals中的print'q'应为True。是否需要将变量名检查为sting?您是否可以尝试/删除该变量并捕获NameError?根据,请注意,在模块级别,局部变量和全局变量是同一个字典。这解释了为什么在函数外部运行时,局部变量为True。OP没有使用类。如果globals中的print'q'返回False,则变量不是局部变量,但如果它返回True,则变量是函数的局部变量