news 2026/6/26 4:26:25

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/6/15 19:30:13

Nginx基础

Nginx 基础文档 一、Nginx 配置文件结构概述 Nginx 的主配置文件通常位于&#xff1a; Linux: /etc/nginx/nginx.confmacOS (Homebrew): /usr/local/etc/nginx/nginx.confWindows: nginx/conf/nginx.conf 配置文件采用分层块结构&#xff0c;主要由以下几部分组成&#xff…

作者头像 李华
网站建设 2026/6/25 21:54:54

从 JSON Schema 到企业级动态数据模型:动态表单的终极演进路线

从 JSON Schema 到企业级动态数据模型:动态表单的终极演进路线 在很多团队里,“动态表单”往往被理解为: 前端根据一份 JSON 配置渲染表单,避免写死页面。 但真正有价值的动态表单系统,从来不只是 UI 技术,而是一个 以 Schema 为核心的企业级动态数据模型平台。 它让数据…

作者头像 李华
网站建设 2026/6/25 23:58:18

选九影网络做游戏定制开发,硬核技术壁垒,全流程技术护航

在数字娱乐全面渗透的当下&#xff0c;游戏早已突破传统休闲的边界&#xff0c;成为品牌营销、教育科普、政企宣传与文化传播的重要媒介。轻量化社交互动小游戏、沉浸式 AR/VR 体验游戏、教育场景知识闯关游戏、品牌引流互动营销游戏…… 多元场景下&#xff0c;市场对游戏的个…

作者头像 李华
网站建设 2026/6/23 19:38:30

社会网络仿真软件:NetLogo_(12).社会网络仿真在社会科学中的应用

社会网络仿真在社会科学中的应用 在社会科学领域&#xff0c;社会网络仿真是研究社会结构、关系和动态的重要工具。通过社会网络仿真&#xff0c;研究人员可以模拟和分析复杂的社会系统&#xff0c;探索个体行为如何影响整体社会动态。NetLogo 是一个广泛使用的多智能体仿真平…

作者头像 李华
网站建设 2026/6/22 18:05:08

麦角甾醇PEG生物素;Ergosterol-PEG-Biotin的核心价值

试剂基本信息 英文名称&#xff1a;Ergosterol-PEG-Biotin&#xff1b;Ergosterol 中文名称&#xff1a; 麦角甾醇PEG生物素&#xff1b;甲基胆固醇&#xff1b;麦角固醇 纯度&#xff1a;>95% 外观性状&#xff1a;固体 溶解条件&#xff1a;溶于部分有机溶液 供应厂…

作者头像 李华