news 2026/8/29 5:21:27

Python3 operator模块完全指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python3 operator模块完全指南

好的,这是一个关于Python 3中operator模块的全面学习教程。


Python3 operator模块全面学习教程

operator模块提供了Python内置运算符的函数版本。它包含了一系列的函数,这些函数对应于Python中的大多数运算符(如+,-,*,/,==,>等)以及一些常用操作(如属性访问、序列操作)。使用operator模块可以使代码更简洁、更具可读性,特别是在函数式编程(配合map()filter()reduce()等)或需要将操作作为参数传递的场景中。

1. 模块导入
import operator
2. 算术运算符函数

这些函数实现了基本的算术运算:

  • operator.add(a, b): 返回a + b
    print(operator.add(3, 5)) # 输出: 8
  • operator.sub(a, b): 返回a - b
    print(operator.sub(10, 4)) # 输出: 6
  • operator.mul(a, b): 返回a * b
    print(operator.mul(7, 6)) # 输出: 42
  • operator.truediv(a, b): 返回a / b(真除法,结果为浮点数)
    print(operator.truediv(10, 3)) # 输出: 3.333...
  • operator.floordiv(a, b): 返回a // b(向下取整除法)
    print(operator.floordiv(10, 3)) # 输出: 3
  • operator.mod(a, b): 返回a % b(取模)
    print(operator.mod(10, 3)) # 输出: 1
  • operator.pow(a, b): 返回a ** b(幂运算)
    print(operator.pow(2, 3)) # 输出: 8
  • operator.neg(a): 返回-a(取负)
    print(operator.neg(7)) # 输出: -7
  • operator.pos(a): 返回+a(取正,通常返回自身)
    print(operator.pos(-5)) # 输出: -5
  • operator.abs(a): 返回abs(a)(绝对值)
    print(operator.abs(-10)) # 输出: 10
3. 比较运算符函数

这些函数实现了比较运算,通常返回布尔值TrueFalse

  • operator.eq(a, b): 返回a == b
    print(operator.eq(5, 5)) # 输出: True
  • operator.ne(a, b): 返回a != b
    print(operator.ne(5, 3)) # 输出: True
  • operator.lt(a, b): 返回a < b
    print(operator.lt(3, 5)) # 输出: True
  • operator.le(a, b): 返回a <= b
    print(operator.le(3, 3)) # 输出: True
  • operator.gt(a, b): 返回a > b
    print(operator.gt(5, 3)) # 输出: True
  • operator.ge(a, b): 返回a >= b
    print(operator.ge(5, 5)) # 输出: True
  • operator.is_(a, b): 返回a is b(对象身份比较)
    a = [1, 2]; b = a; c = [1, 2] print(operator.is_(a, b)) # 输出: True print(operator.is_(a, c)) # 输出: False
  • operator.is_not(a, b): 返回a is not b
    print(operator.is_not(a, c)) # 输出: True
4. 逻辑运算符函数
  • operator.not_(a): 返回not a(逻辑非)
    print(operator.not_(True)) # 输出: False
  • operator.and_(a, b): 返回a and b(逻辑与 - 注意:此函数实际计算的是按位与,逻辑与通常用and关键字)
    print(operator.and_(True, False)) # 输出: False (按位与结果) # 注意:逻辑与效果通常直接用 `and`
  • operator.or_(a, b): 返回a or b(逻辑或 - 同上,此函数是位或)
    print(operator.or_(True, False)) # 输出: True (按位或结果) # 注意:逻辑或效果通常直接用 `or`
5. 位运算符函数

这些函数实现了按位运算:

  • operator.and_(a, b): 返回a & b(按位与)
  • operator.or_(a, b): 返回a | b(按位或)
  • operator.xor(a, b): 返回a ^ b(按位异或)
    print(operator.xor(0b1100, 0b1010)) # 输出: 0b0110 (即 6)
  • operator.invert(a): 返回~a(按位取反)
    print(operator.invert(5)) # 输出: -6 (因为 ~5 = -6)
  • operator.lshift(a, b): 返回a << b(左移)
    print(operator.lshift(5, 1)) # 输出: 10 (5<<1 = 10)
  • operator.rshift(a, b): 返回a >> b(右移)
    print(operator.rshift(10, 1)) # 输出: 5 (10>>1 = 5)
6. 序列操作函数

这些函数用于处理序列(列表、元组等):

  • operator.concat(a, b): 返回a + b(序列连接)
    print(operator.concat([1, 2], [3, 4])) # 输出: [1, 2, 3, 4]
  • operator.contains(a, b): 返回b in a(成员测试)
    print(operator.contains([1, 2, 3], 2)) # 输出: True
  • operator.countOf(a, b): 返回a.count(b)(计算ba中出现的次数)
    print(operator.countOf("hello", "l")) # 输出: 2
  • operator.indexOf(a, b): 返回a.index(b)(ba中首次出现的索引)
    print(operator.indexOf("hello", "l")) # 输出: 2
  • operator.getitem(a, b): 返回a[b](索引访问)
    lst = ['a', 'b', 'c'] print(operator.getitem(lst, 1)) # 输出: 'b'
  • operator.setitem(a, b, c): 执行a[b] = c(索引赋值)
    lst = ['a', 'b', 'c'] operator.setitem(lst, 1, 'x') print(lst) # 输出: ['a', 'x', 'c']
  • operator.delitem(a, b): 执行del a[b](删除索引项)
    lst = ['a', 'b', 'c'] operator.delitem(lst, 1) print(lst) # 输出: ['a', 'c']
  • operator.length_hint(obj, default=0): 返回len(obj)的估计值(对于迭代器很有用,不一定是精确长度)
7. 对象属性与元素访问
  • operator.attrgetter(attr): 返回一个可调用对象,该对象从其操作数中获取命名属性attr。如果请求多个属性,则返回一个属性元组。
    class Person: def __init__(self, name, age): self.name = name self.age = age p = Person("Alice", 30) get_name = operator.attrgetter('name') print(get_name(p)) # 输出: 'Alice' get_name_age = operator.attrgetter('name', 'age') print(get_name_age(p)) # 输出: ('Alice', 30)
  • operator.itemgetter(item): 返回一个可调用对象,该对象使用其操作数的__getitem__()方法获取给定索引item处的元素。如果指定了多个索引,则返回一个查找值元组。
    data = [('apple', 3), ('banana', 2), ('cherry', 5)] get_second = operator.itemgetter(1) print(get_second(data[0])) # 输出: 3 get_first_and_second = operator.itemgetter(0, 1) print(get_first_and_second(data[1])) # 输出: ('banana', 2)
  • operator.methodcaller(name, /, *args, **kwargs): 返回一个可调用对象,该对象在其操作数上调用给定方法name。任何额外的位置参数或关键字参数都将传递给方法。
    s = "hello world" upper_call = operator.methodcaller('upper') print(upper_call(s)) # 输出: 'HELLO WORLD' split_call = operator.methodcaller('split', ' ') print(split_call(s)) # 输出: ['hello', 'world']
8. 函数式编程应用示例

operator模块的函数非常适合与map(),filter(),reduce()(在Python 3的functools中)等函数式工具结合使用。

  • 使用map()add进行向量加法:
    import operator import functools vec1 = [1, 2, 3] vec2 = [4, 5, 6] sum_vec = list(map(operator.add, vec1, vec2)) print(sum_vec) # 输出: [5, 7, 9]
  • 使用reduce()mul计算乘积:
    numbers = [1, 2, 3, 4, 5] product = functools.reduce(operator.mul, numbers) print(product) # 输出: 120
  • 使用itemgetter进行排序:
    students = [('Charlie', 'B', 15), ('Alice', 'A', 20), ('Dave', 'B', 10), ('Bob', 'C', 5)] # 按姓名排序 sorted_by_name = sorted(students, key=operator.itemgetter(0)) print(sorted_by_name) # 输出: [('Alice', 'A', 20), ('Bob', 'C', 5), ('Charlie', 'B', 15), ('Dave', 'B', 10)] # 按年龄排序 (索引2) sorted_by_age = sorted(students, key=operator.itemgetter(2)) print(sorted_by_age) # 输出: [('Bob', 'C', 5), ('Dave', 'B', 10), ('Charlie', 'B', 15), ('Alice', 'A', 20)]
9. 总结

operator模块为Python的运算符和常用操作提供了函数接口。它的主要优势在于:

  1. 代码简洁性:可以用函数名替代lambda表达式(如lambda x, y: x + y可以用operator.add替代)。
  2. 可读性:函数名称清晰表达了操作意图。
  3. 函数式编程:便于将操作作为参数传递给高阶函数(如map,filter,reduce,sorted)。
  4. 性能:通常比等价的lambda表达式稍快。

熟练掌握operator模块,特别是attrgetter,itemgetter,methodcaller,能显著提升编写高效、清晰Python代码的能力。


希望这个教程能帮助你全面了解并有效使用Python 3的operator模块!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/22 21:10:41

ubuntu通过windows主机访问网络

背景&#xff1a;校园网限制用户连接数量 方法&#xff1a;用usb网卡。用一台windows主机连接校园网登录&#xff0c;插usb网卡连网线到ubuntu机器&#xff1b;ubuntu机器不需要什么额外配置&#xff0c;windows更改网络适配器设置&#xff0c;把 校园网连接->属性->共享…

作者头像 李华
网站建设 2026/8/24 10:04:51

Doris与Flink整合实战:构建流批一体的大数据处理平台

Doris与Flink整合实战&#xff1a;构建流批一体的大数据处理平台 关键词&#xff1a;Doris、Flink、流批一体、大数据处理平台、实时计算 摘要&#xff1a;本文聚焦于Doris与Flink的整合&#xff0c;旨在构建流批一体的大数据处理平台。详细介绍了Doris和Flink的核心概念及两者…

作者头像 李华
网站建设 2026/8/26 5:04:21

【C标准库】一文吃透 C 语言 assert 断言

文章目录一、assert 是什么&#xff1f;二、基本语法和使用步骤2.1 核心语法2.2 最简单的示例三、assert 的工作机制3.1 如何定义 NDEBUG&#xff08;关闭断言&#xff09;&#xff1f;四、assert 的适用场景五、assert 的使用禁忌禁忌1&#xff1a;断言中包含有副作用的表达式…

作者头像 李华
网站建设 2026/8/25 14:33:24

社会网络仿真软件:NetLogo_(17).NetLogo教学与研究资源

NetLogo教学与研究资源 在社会网络仿真的研究和教学中&#xff0c;NetLogo 提供了丰富的资源和工具&#xff0c;帮助用户更好地理解和应用这一强大的仿真平台。本节将详细介绍 NetLogo 的教学与研究资源&#xff0c;包括官方文档、示例模型、在线教程、社区支持以及第三方资源等…

作者头像 李华
网站建设 2026/8/16 10:54:47

社会网络仿真软件:NodeXL_(3).NodeXL安装与基本设置

NodeXL安装与基本设置 在开始使用NodeXL进行社会网络分析之前&#xff0c;首先需要安装NodeXL并进行一些基本设置。本节将详细介绍如何安装NodeXL&#xff0c;并配置其基本环境&#xff0c;以便您能够顺利地进行后续的社会网络仿真和分析工作。 安装NodeXL NodeXL是一个基于…

作者头像 李华