如何检查函数中是否存在变量?

2024-05-19 00:41:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着检查变量是否存在,但在函数内部。 我被教导,要做到这一点,你唯一需要做的就是:

'a' in locals() 

不幸的是,事情比我想象的要困难一点

我试图定义一个包含此方法的函数

q=[1,2,3]
def f():
    print('q' in locals())

当我运行此函数时,它返回:

False

问题是,正如我们所看到的,q是一个变量,所以当我运行相同的命令,但在函数之外时:

'q' in locals()

它返回:

True

有办法解决这个问题吗


Tags: 方法函数in命令falsetrue定义def
3条回答

你可以用

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的全局作用域中,而不是局部作用域中,即:

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”是一个局部变量。 因此,当您检查函数内部时

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

相关问题 更多 >

    热门问题