Python operator 模块
最后修改:2025 年 2 月 15 日
在本文中,我们将介绍如何在 Python 中使用 operator 模块。operator 模块提供了与 Python 运算符对应的函数。当您需要将运算符用作函数参数时,例如与 map 或 filter 一起使用时,它特别有用。
operator 模块是 Python 标准库的一部分,因此无需额外安装。
operator 的基本用法
下面的示例演示了如何使用 operator 模块执行算术运算。
import operator
a = 10
b = 3
print("Addition:", operator.add(a, b))
print("Subtraction:", operator.sub(a, b))
print("Multiplication:", operator.mul(a, b))
print("Division:", operator.truediv(a, b))
在此程序中,使用 operator.add、operator.sub、operator.mul 和 operator.truediv 函数执行相应的算术运算。
$ python main.py Addition: 13 Subtraction: 7 Multiplication: 30 Division: 3.3333333333333335
比较运算符
下面的示例演示了如何使用 operator 模块执行比较。
import operator
a = 10
b = 3
print("Equal:", operator.eq(a, b))
print("Not Equal:", operator.ne(a, b))
print("Greater Than:", operator.gt(a, b))
print("Less Than:", operator.lt(a, b))
print("Greater Than or Equal:", operator.ge(a, b))
print("Less Than or Equal:", operator.le(a, b))
在此程序中,使用 operator.eq、operator.ne、operator.gt、operator.lt、operator.ge 和 operator.le 函数执行相应的比较。
$ python main.py Equal: False Not Equal: True Greater Than: True Less Than: False Greater Than or Equal: True Less Than or Equal: False
逻辑运算符
下面的示例演示了如何使用 operator 模块执行逻辑运算。
import operator
account_balance = 1000
withdrawal_amount = 500
deposit_amount = 200
if operator.ge(account_balance, withdrawal_amount):
print("Withdrawal successful. New balance:", account_balance - withdrawal_amount)
else:
print("Insufficient balance for withdrawal.")
if operator.ge(account_balance, deposit_amount):
print("Deposit successful. New balance:", account_balance + deposit_amount)
else:
print("Error: Deposit amount exceeds account balance.")
if operator.eq(account_balance, 0):
print("Account balance is zero.")
else:
print("Account balance is not zero.")
if operator.ne(account_balance, 0):
print("Account balance is not zero.")
else:
print("Account balance is zero.")
在此示例中,我们使用 operator 模块对账户余额执行各种比较。
我们使用这些运算符来检查账户余额是否足以进行某些交易,例如提款和存款。我们还使用它们来检查账户余额是否为零或不为零。
$ python main.py And: 2 Or: 11 Not: -11
位运算符
下面的示例演示了如何使用 operator 模块执行位运算。
import operator
READ = 0b0001 # 1
WRITE = 0b0010 # 2
EXECUTE = 0b0100 # 4
user_permissions = READ | WRITE
has_read = operator.and_(user_permissions, READ) != 0
print("Has read permission:", has_read)
has_execute = operator.and_(user_permissions, EXECUTE) != 0
print("Has execute permission:", has_execute)
user_permissions = operator.or_(user_permissions, EXECUTE)
print("Added execute permission:", bin(user_permissions))
user_permissions = operator.and_(user_permissions, operator.not_(WRITE))
print("Removed write permission:", bin(user_permissions))
user_permissions = operator.xor(user_permissions, READ)
print("Toggled read permission:", bin(user_permissions))
在此程序中,我们使用 operator 模块在具有位运算符的假设用户权限系统中操作标志和权限。
READ = 0b0001 # 1 WRITE = 0b0010 # 2 EXECUTE = 0b0100 # 4
我们将一些权限定义为位掩码。
has_read = operator.and_(user_permissions, READ) != 0
print("Has read permission:", has_read)
我们检查用户是否具有读取权限。
has_execute = operator.and_(user_permissions, EXECUTE) != 0
print("Has execute permission:", has_execute)
在这里,我们检查用户是否具有执行权限。
user_permissions = operator.or_(user_permissions, EXECUTE)
print("Added execute permission:", bin(user_permissions))
我们将执行权限添加到用户。
user_permissions = operator.and_(user_permissions, operator.not_(WRITE))
print("Removed write permission:", bin(user_permissions))
我们从用户那里删除写入权限。
user_permissions = operator.xor(user_permissions, READ)
print("Toggled read permission:", bin(user_permissions))
最后,我们切换读取权限(如果用户有,则删除;如果没有,则添加)。
$ python main.py Has read permission: True Has execute permission: False Added execute permission: 0b111 Removed write permission: 0b0 Toggled read permission: 0b1
从对象中检索项
operator 模块提供了访问序列和字典中元素的方法。
import operator
my_list = [1, 2, 3, 4, 5]
get_second = operator.itemgetter(1)
print(get_second(my_list))
my_dict = {'a': 10, 'b': 20, 'c': 30}
get_value = operator.itemgetter('b')
print(get_value(my_dict))
该示例演示了如何使用 operator.itemgetter 从列表和字典中提取特定项。
get_second = operator.itemgetter(1) print(get_second(my_list))
operator.itemgetter(1) 创建一个可调用对象,该对象从其操作数中获取索引为 1 的项。get_second(my_list) 使用 my_list 作为参数调用此可调用对象。它从 my_list 中检索第二个元素,即 2。
get_value = operator.itemgetter('b')
print(get_value(my_dict))
operator.itemgetter('b') 创建一个可调用对象,该对象从其操作数中获取与键 'b' 关联的值。get_value(my_dict) 使用 my_dict 作为参数调用此可调用对象。它检索与键 'b' 关联的值,即 20。
使用 itemgetter 进行排序
根据特定元素对元组列表进行排序是一项常见任务。itemgetter 函数从每个元组中提取特定索引,从而可以轻松地根据该值进行排序。
from operator import itemgetter
students = [("John", 85), ("Jane", 90), ("Dave", 80)]
sorted_students = sorted(students, key=itemgetter(1), reverse=True)
print(sorted_students)
该示例按第二个元组项对元组列表进行排序。
$ python main.py
[("Jane", 90), ("John", 85), ("Dave", 80)]
使用 methodcaller 进行映射
当对对象列表应用相同的方法时,methodcaller 函数很有用。我们可以使用 methodcaller 来调用列表中每个元素的 upper 等方法,而不是使用 lambda 函数。
from operator import methodcaller
words = ["an", "old", "falcon"]
upper_words = list(map(methodcaller("upper"), words))
print(upper_words)
该示例将 upper 方法应用于列表中的每个元素。
$ python main.py ["AN", "OLD", "FALCON"]
使用 attrgetter 进行过滤
在处理对象时,使用 attrgetter 可以简化基于属性过滤元素的操作。attrgetter 提供了一种更简洁、更易读的方法,而不是使用 lambda 函数来访问属性。
from operator import attrgetter
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
people = [Person("Alice", 30), Person("Bob", 25), Person("Charlie", 35)]
adults = list(filter(lambda p: attrgetter("age")(p) >= 30, people))
print([(p.name, p.age) for p in adults])
在示例中,我们按年龄过滤用户;我们选择所有年龄大于或等于 30 的用户。
$ python main.py
[("Alice", 30), ("Charlie", 35)]
来源
在本文中,我们介绍了如何在 Python 中使用 operator 模块进行运算符操作。operator 模块是任何 Python 程序员的有用工具。
作者
列出所有 Python 教程。