2024-05-19 00:41:49 发布
网友
我试着检查变量是否存在,但在函数内部。 我被教导,要做到这一点,你唯一需要做的就是:
'a' in locals()
不幸的是,事情比我想象的要困难一点
我试图定义一个包含此方法的函数
q=[1,2,3] def f(): print('q' in locals())
当我运行此函数时,它返回:
False
问题是,正如我们所看到的,q是一个变量,所以当我运行相同的命令,但在函数之外时:
'q' in locals()
它返回:
True
有办法解决这个问题吗
你可以用
hasattr(obj, "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
您可以在globals()字典中测试列表q是否存在,因为它存在于函数f的全局作用域中,而不是局部作用域中,即:
globals()
q
f
def f(): print('q' in globals())
正如注释中所指出的,像这样使用变量的字符串名测试变量的存在性并不理想,您可以使用try/except:
def f(): try: # Do something with q print(q) except NameError: print("Variable not defined")
当您编写以下代码行时
q=[1,2,3] def f(): print('q' in locals()) f()
在这里,变量“q”不是函数f()的局部变量,因为它是在函数作用域之外声明的。在函数内部,可以使用全局变量访问q。 但是,函数外的“q”是一个局部变量。 因此,当您检查函数内部时
它将返回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()
你可以用
hasattr(obj, "var")
并用self替换obj
输出
您可以在
globals()
字典中测试列表q
是否存在,因为它存在于函数f
的全局作用域中,而不是局部作用域中,即:正如注释中所指出的,像这样使用变量的字符串名测试变量的存在性并不理想,您可以使用try/except:
当您编写以下代码行时
在这里,变量“q”不是函数f()的局部变量,因为它是在函数作用域之外声明的。在函数内部,可以使用全局变量访问q。 但是,函数外的“q”是一个局部变量。 因此,当您检查函数内部时
它将返回False
但如果您在函数内声明并检查如下:-
它将返回True,因为q现在是函数的局部
此外,如果您将函数内的“q”选为全局,它将返回True,因为“q”在函数外声明并具有全局作用域
输出
相关问题 更多 >
编程相关推荐