Python 如何检查变量是否存在
变量被定义为用于存储一些数据的容器。它们代表一个内存位置。在Python中,可以存储任何类型的数据或值,包括整数、字符串、浮点数和布尔值等。
在Python中,变量的数据类型在定义时不需要指定。然而,在任何函数或应用程序使用变量之前,必须先对其进行定义。可以通过将一个值赋给一个名称来完成,如下所示:
x = 5
这里的 ‘x’ 是一个变量的名称。同时,由于 x 保存着一个整数值,它是一个整数变量。
变量的作用域
变量并不是在程序的所有时间点都可以访问。变量的声明决定了这一点。变量的作用域决定了程序中标识符可以被访问的位置。Python变量中存在两个基本的作用域。
- 局部变量
-
全局变量
局部变量
在一个代码块中定义的变量通常只能在此代码块内部使用。在代码块外部,它们无法被访问。这种类型的变量被称为局部变量。局部变量的行为类似于形式参数标识符。以下示例说明了这一点。如果它们被在其作用域之外访问,将会触发 NameError 异常。
示例
def greet():
name = 'Rahul'
print('Hello ', name)
greet()
print(name)
在上面的示例中,‘name’是greet()函数的局部变量,不能在其外部访问。
输出:
Hello Rahul
Traceback (most recent call last):
File "main.py", line 5, in
print(name)
NameError: name 'name' is not defined
全局变量
全局变量是存在于函数块外部的变量。任何函数都可以访问它的值。在定义函数之前,必须初始化name变量。
name = 'Rahul'
def greet():
print("Hello",name)
greet()
如果我们执行以上简单程序,结果如下所示。
输出
Hello Rahul
验证变量是否存在
可以通过异常来检查变量是否存在,但这并不推荐,因为我们并不总是知道一个变量是否被定义。在Python中,检查变量是否存在的最安全和最优的方法是使用以下方法。
- 使用 locals() 方法,在特定的block中查找变量是否存在。
-
使用 globals() 方法,确定变量在整个程序中是否存在。
使用Locals()方法
使用locals()函数可以验证局部变量的存在性。在局部命名空间中, locals() 返回一个包含当前活动变量名称的字典,其中变量名称作为键。
示例
在下面的示例中,定义了一个函数“local_func”,并创建了一个字符串类型的局部变量“var”。由于locals()方法以键的形式返回包含当前局部变量的字典,我们可以使用“in”运算符来检查变量是否存在。为了更精确,我们还可以在局部命名空间之外调用locals()方法来检查其存在性。
def local_func():
var = "Test"
if 'var' in locals():
print ('variable found in local namespace')
else:
print ('variable not found in the local namespace')
local_func()
if 'var' in locals():
print ('variable found in the global namespace')
else:
print ('variable not found in the global namespace')
输出
variable found in local namespace
variable not found in the global namespace
使用globals()方法
在全局命名空间中,可以使用globals()方法来确定变量的状态。全局变量名在该方法返回的字典中表示为字符串。
示例
可以使用“in”运算符在字典中检查变量名字符串。如果一个变量存在于全局命名空间中,则为真;否则,不为真。
var = "Python"
if 'var' in globals():
print ("variable present in global namespace")
else:
print ("variable does not present in global namespace")
输出
variable present in global namespace
检查类中是否存在变量
hasattr() 函数可以用来检查类中是否存在变量。如果一个对象包含了给定的名称属性,则此方法的返回值为true,否则为false。
hasattr()方法的语法为−
hasattr(object, name)
示例
在下面的示例中,我们定义了一个包含描述其特征的属性的类”fruit”。使用hasattr()方法,我们检查是否存在特定的属性;如果是,则显示它们的值。
class fruit:
color = 'Red'
name = 'Apple'
frt = fruit()
if hasattr(frt, 'name'):
print("Fruit's name:", frt.name)
if hasattr(frt, 'color'):
print("Fruit's color:", frt.color)
输出
Fruit's name: Apple
Fruit's color: Red
示例
让我们看另一个示例,检查一个变量在Python程序中是否存在。
x =10
class foo:
g = 'rt'
def bar(self):
m=6
if 'm' in locals():
print ('m is local variable')
else:
print ('m is not a local variable')
f = foo()
f.bar()
if hasattr(f, 'g'):
print ('g is an attribute')
else:
print ("g is not an attribute")
if 'x' in globals():
print ('x is a global variable')
输出
执行上述程序后,输出结果显示如下 −
m is local variable
g is an attribute
x is a global variable