跳至主要内容

变量的基本操作

Basic Operations with Variables in Python

Python 提供了各种操作和方法,用于处理数据和执行各种任务。我们来回顾一下与所有变量类型相关的最流行的操作。

类型定义

有几种方法可以检查 Python 中变量的类型。我们来看看如何在 Python 中检查变量的类型。

函数 type()

此内置 type() 函数返回变量的数据类型,它相当于其他编程语言中的 typeof

我们来看看如何在 Python 中打印变量的类型

x = 23
print(type(x))   # Output: <class 'int'>

y = 3.14
print(type(y))   # Output: <class 'float'>

z = "Hello, friend!"
print(type(z))   # Output: <class 'str'>

w = True
print(type(w))   # Output: <class 'bool'>

在此示例中,type() 函数用于确定变量 xyzw 的类型。输出显示变量的类。

函数 isinstance()

此内置函数检查变量是否为指定类的实例。使用此函数,我们可以轻松检查变量是否为 string

因此,我们在这里检查 Python 中的变量类型

x = 5
print(isinstance(x, int))  # Output: True

y = "hello"
print(isinstance(y, str))  # Output: True

z = [1, 2, 3]
print(isinstance(z, list))  # Output: True

使用 __class__ 属性

此属性返回对象的类。

示例

x = 17
print(x.__class__)  # Output: <class 'int'>

y = "hello"
print(y.__class__)  # Output: <class 'str'>

z = [1, 2, 3]
print(z.__class__)  # Output: <class 'list'>

此示例展示了如何在 Python 中打印变量的类型。

type() 函数与 assert 语句一起使用

这是一种检查变量类型的方法,如果类型与预期不符,则会引发错误。

示例

x = 98
assert type(x) == int

y = "hello"
assert type(y) == str

z = [1, 2, 3]
assert type(z) == list

这些方法可以获取 Python 中变量的类型,例如,你可以检查变量是否为列表(参见上面的示例)。

删除变量

使用 del 语句

在 Python 中,del 语句用于从列表、字典或任何其他集合对象中删除变量或项。使用 del 的语法为

del object

其中 object 可以是变量、列表项、字典项或任何其他对象。

这里有一些示例

# Delete a variable
x = 5
del x

# Delete an item from a list
my_list = [1, 2, 3, 4, 5]
del my_list[2]

# Delete an item from a dictionary
my_dict = {'a': 1, 'b': 2, 'c': 3}
del my_dict['b']

在第一个示例中,使用 del 语句删除了变量 x。在执行该语句后,变量 x 不再存在。

在第二个示例中,使用 del my_list[2] 删除了列表 my_list 中的第三个项。在执行该语句后,my_list 包含项 [1, 2, 4, 5]

在第三个示例中,使用 del my_dict['b'] 从字典 my_dict 中删除了键为 'b' 的项。在执行该语句后,my_dict 包含项 {'a': 1, 'c': 3}

请注意,del 仅删除对对象的引用,而不是对象本身。如果对象在代码中的其他位置仍有引用,则不会从内存中删除它。

None 赋值给变量

清除变量的另一种方法是将值 None 赋值给变量,以表明它没有值。None 值是一个内置常量,表示没有值。这里有一个示例

x = None
print(x)  # Output: None

在此示例中,我们将值 None 赋值给变量 x。当我们打印 x 的值时,我们看到它输出 None

使用 locals()globals() 函数

你可以使用 locals()globals() 函数 分别访问局部和全局命名空间。这些函数返回一个字典,其中包含当前命名空间中的所有变量及其值。你可以使用这些函数通过使用 del 语句从命名空间中删除变量。

这是一个示例

def my_function():
    x = 5
    y = 10
    del locals()['y']
    print(x)
    print(y)  # This will raise a NameError

my_function()

在此示例中,我们定义了一个函数 my_function(),它创建了两个变量 xy。然后,我们使用 del 语句通过使用 del locals()['y'] 从局部命名空间中删除变量 y。在执行该语句后, y 不再在局部命名空间中定义,因此当我们尝试打印其值时,我们会得到一个 NameError

你还可以使用 globals() 函数从全局命名空间中删除变量。这是一个示例

x = 5
y = 10

def my_function():
    del globals()['x']

my_function()

print(x)  # This will raise a NameError
print(y)  # Output: 10

在此示例中,我们在全局命名空间中定义了两个变量 xy。然后,我们定义了一个函数 my_function(),它使用 del globals()['x'] 从全局命名空间中删除变量 x。在调用该函数后, x 不再在全局命名空间中定义,因此当我们尝试打印其值时,我们会得到一个 NameError。但是, y 仍然在全局命名空间中定义,因此我们可以打印其值而不会出现任何错误。

此外,你可以使用 globals()locals() 函数清除当前命名空间中的所有变量。以下是如何执行此操作

# Clear all global variables
for var in globals().copy():
    if var.startswith("__"):
        continue
    del globals()[var]

# Clear all local variables
for var in locals().copy():
    if var.startswith("__"):
        continue
    del locals()[var]

以上代码将删除全局和局部命名空间中的所有变量,但内置 Python 变量(以 __ 开头)除外。请记住,这可能是危险的,因为它将删除你的所有变量,你将无法在程序中稍后访问它们。因此,请确保谨慎使用它。

使用 __del__() 方法

__del__() 方法是一个特殊方法,当对象即将被销毁或垃圾回收时调用。你可以在你的类中定义此方法,以便在对象被销毁之前执行任何所需的清理任务。

__del__() 方法不接受任何参数,也没有返回值。这是一个示例

class MyClass:
    def __init__(self, name):
        self.name = name
    
    def __del__(self):
        print(f"{self.name} has been deleted")
        
obj1 = MyClass("Object 1")
obj2 = MyClass("Object 2")
del obj1

在此示例中,我们定义了一个类 MyClass,其中有一个 __init__() 方法,该方法初始化一个实例变量名称。我们还定义了一个 __del__() 方法,该方法在对象被删除时打印一条消息。我们创建了类 MyClass 的两个实例,然后使用 del 语句删除了其中一个实例。

当我们运行此代码时,我们会得到以下输出

Object 1 has been deleted

此输出表明当对象 obj1 被删除时调用了 __del__() 方法。

请注意, __del__() 方法并不保证在所有情况下都会被调用。例如,如果程序突然终止,则可能不会调用该方法。因此,通常不建议依赖此方法来执行关键清理任务。相反,最好在可能的情况下使用其他清理机制,例如 with 语句 或上下文管理器。

变量操作

我们已经介绍了变量的赋值。但我们也来看看我们还可以使用变量做什么。

复制变量

要在 Python 中复制变量,你可以使用赋值运算符 =copy() 方法。但是,需要注意的是,这些方法的行为可能因变量的类型而异。

  • 浅拷贝:当您使用赋值运算符复制列表、字典或其他可变对象时,您将创建一个浅拷贝。这意味着新变量引用与原始变量在内存中相同的对象。对原始变量所做的任何更改都将反映在副本中,反之亦然。例如
original_list = [1, 2, 3]
copy_list = original_list  # Shallow copy
original_list[0] = 4
print(copy_list)  # Output: [4, 2, 3]
  • 深拷贝:如果您想在内存中创建一个新对象,该对象是原始变量的副本,则可以使用copy()方法。这将创建一个深拷贝,这意味着对原始变量所做的任何更改都不会反映在副本中,反之亦然。例如
import copy

original_list = [1, 2, 3]
copy_list = copy.deepcopy(original_list)  # Deep copy
original_list[0] = 4
print(copy_list)  # Output: [1, 2, 3]

为了避免代码中出现意外行为,使用适当的方法复制变量非常重要。

检查变量是否已定义

您可以使用in运算符检查变量是否已定义。

这是一个示例

if 'my_variable' in locals() or 'my_variable' in globals():
    print('my_variable is defined')
else:
    print('my_variable is not defined')

此代码检查变量my_variable是否在本地或全局命名空间中定义。如果已定义,则代码将打印'my_variable is defined',否则将打印'my_variable is not defined'

请注意,如果变量已定义但值为None,则此方法仍会将其视为已定义。如果您想专门检查非None值,则可以像这样修改代码

if 'my_variable' in locals() and locals()['my_variable'] is not None or 'my_variable' in globals() and globals()['my_variable'] is not None:
    print('my_variable is defined and has a non-None value')
else:
    print('my_variable is not defined or has a value of None')

此代码同时检查变量是否已定义以及是否具有非None值。如果满足这两个条件,它将打印'my_variable is defined and has a non-None value',否则将打印'my_variable is not defined or has a value of None'

检查变量是否为空

在 Python 中,有几种方法可以检查变量是否为空

  • 使用带有变量名的if语句
if my_variable:
    # do something
    pass
else:
    # the variable is empty
    pass

如果my_variable为空或求值为False,则将执行else块。

  • 使用带有变量名的not运算符
if not my_variable:
    # the variable is empty
    pass
else:
    # do something
    pass

如果my_variable为空或求值为False,则将执行if块。

  • 使用内置的len()函数
if len(my_variable) == 0:
    # the variable is empty
    pass
else:
    # do something
    pass

如果my_variable的长度为 0,则认为它为空。

  • 使用带有Noneis运算符
if my_variable is None:
    # the variable is empty
    pass
else:
    # do something
    pass

如果my_variable等于None,则认为它为空。但是,需要注意的是,None是 Python 中的一个特定值,它与空字符串、列表或其他数据类型不同。

获取变量的名称

变量只是引用内存中对象的名称。在 Python 中,您可以使用locals()globals()函数获取变量的名称,具体取决于变量是在本地命名空间还是全局命名空间中。

这是一个示例

x = 42
var_name = [k for k,v in locals().items() if v is x][0]
print(var_name)

此代码将值42分配给变量x。然后它使用列表解析来遍历本地命名空间中的所有项,并找到引用具有x值的对象的变量名。最后,它打印出该变量名,在本例中为x

请注意,此方法假设变量在命名空间中具有唯一值,但这可能并不总是如此。此外,通常不建议在代码逻辑中依赖变量名,因为它会使您的代码更脆弱且更难重构。

检查变量是否存在

您可以使用in关键字以及locals()globals()函数检查变量在 Python 中是否存在。这里有一个例子

if 'my_variable' in locals():
    print("my_variable exists in the local scope.")

if 'my_variable' in globals():
    print("my_variable exists in the global scope.")

在上面的示例中,我们使用 in 关键字和 locals()globals() 函数分别在局部或全局范围内检查一个名为 my_variable 的变量是否存在。如果变量存在,我们打印一条消息,指出它存在于指定的范围内。

请注意,使用 in 关键字和 locals()globals() 函数检查变量是否存在仅适用于已在程序中定义的变量。如果您不确定某个变量是否已定义,可以使用 try-except 块来捕获如果变量不存在时引发的 NameError 异常。这是一个示例

try:
    my_variable
    print("my_variable exists.")
except NameError:
    print("my_variable does not exist.")

在此示例中,我们尝试访问 my_variable 变量,如果它不存在,则引发 NameError 异常。我们使用 except 块捕获异常,并打印一条消息,指出该变量不存在。

与我们一起贡献!

不要犹豫,在 GitHub 上为 Python 教程做出贡献:创建一个 fork,更新内容并发出一个 pull 请求。

Profile picture for user almargit
Python 开发人员,内容经理。
Profile picture for user AliaksandrSumich
更新:05/03/2024 - 21:53
Profile picture for user angarsky
已审阅并批准