Python 中的链式操作——重点讲解链式调用

news/2025/10/7 22:21:11/文章来源:https://www.cnblogs.com/wangya216/p/19128962

Python 中的链式操作——重点讲解链式调用

在 Python 中,链式操作是一种优雅的代码风格,通过连续调用方法或操作来处理数据。其中,链式调用(Method Chaining)是最常用也最强大的一种,指的是对同一个对象(或方法返回的新对象)连续调用多个方法,形成一个操作链。

下面重点讲解链式调用及其他常见链式操作:

一、链式调用(Method Chaining)

链式调用的核心是:方法调用后返回一个对象(通常是自身或新对象),使得可以继续调用该对象的其他方法

1. 字符串的链式调用

字符串方法通常返回新的字符串对象,因此非常适合链式调用:

# 字符串链式调用示例
text = "  Hello, WORLD!  "# 链式调用:去除空格 → 转小写 → 替换内容 → 拼接后缀
result = text.strip()       # 去除首尾空格 → "Hello, WORLD!".lower()       # 转小写 → "hello, world!".replace("world", "python")  # 替换 → "hello, python!".rstrip('!')   # 去除末尾感叹号 → "hello, python"+ "!"          # 拼接 → "hello, python!"print(result)  # 输出: hello, python!

2. 自定义类的链式调用

通过让方法返回 self(自身实例),可以实现自定义类的链式调用:

class Calculator:def __init__(self, value=0):self.value = value# 加法:返回自身以支持链式调用def add(self, num):self.value += numreturn self  # 关键:返回实例本身# 乘法:返回自身以支持链式调用def multiply(self, num):self.value *= numreturn self# 显示结果def result(self):return self.value# 链式调用:创建计算器 → 加5 → 乘3 → 加10 → 显示结果
calc = Calculator()
result = calc.add(5).multiply(3).add(10).result()
print(result)  # 计算过程:(0+5)×3+10 = 25

3. 数据处理库中的链式调用(Pandas 示例)

Pandas 是链式调用的典型场景,几乎所有方法都返回新的 DataFrame/Series 对象:

import pandas as pd# 创建示例数据
data = {"name": ["Alice", "Bob", "Charlie", "David"],"age": [25, 30, 35, 28],"salary": [5000, 6000, 7000, 5500]
}
df = pd.DataFrame(data)# 链式调用:筛选 → 新增列 → 排序 → 选择列
result = df[df["age"] > 28]  # 筛选年龄>28的行.assign(salary_after_raise=lambda x: x["salary"] * 1.1)  # 新增涨薪后薪资列.sort_values("salary_after_raise", ascending=False)  # 按涨薪后薪资降序排序.reset_index(drop=True)  # 重置索引[["name", "age", "salary_after_raise"]]  # 选择需要的列print(result)
# 输出:
#       name  age  salary_after_raise
# 0  Charlie   35               7700.0
# 1      Bob   30               6600.0

4. 链式调用的注意事项

  • 方法必须返回可操作的对象:如果方法返回 None(如列表的 append()sort()),则无法链式调用。

    # 错误示例:列表append()返回None,不能链式调用
    my_list = [1, 2]
    my_list.append(3).append(4)  # 报错:'NoneType' object has no attribute 'append'
    
  • 避免过度链式:过长的链式调用会降低可读性,建议每行不超过 1-2 个方法调用。

  • 调试难度增加:链式调用中某个环节出错时,难以定位具体问题,可拆分中间结果调试。

二、其他常见链式操作

1. 链式比较

可以将多个比较条件合并为一个表达式:

x = 10
print(5 < x < 15)  # True(等价于 5 < x and x < 15)
print(1 == 1 < 2 != 0)  # True(等价于 1==1 and 1<2 and 2!=0)

2. 链式赋值

同时为多个变量赋值:

a = b = c = 0  # 从右向左赋值,a、b、c都指向0
x = y = [1, 2]  # 注意:x和y指向同一个列表对象

3. 链式索引/切片

对嵌套数据结构连续访问:

# 嵌套列表
matrix = [[1, 2], [3, 4], [5, 6]]
print(matrix[1][0])  # 3(访问第2个子列表的第1个元素)# 嵌套字典
user = {"info": {"name": "Alice", "age": 25}}
print(user["info"]["name"])  # Alice

4. 链式逻辑运算

通过 and/or 连续判断,返回第一个决定结果的值:

# and 链式:返回第一个False值(全为True则返回最后一个)
print(1 and 0 and 2)  # 0# or 链式:返回第一个True值(全为False则返回最后一个)
print("" or "hello" or "world")  # hello

总结

链式操作的核心价值是简化代码、减少临时变量,而其中的链式调用是最具实用性的技巧,尤其在数据处理、字符串操作等场景中应用广泛。

使用链式调用时需牢记:方法必须返回可继续操作的对象,并在简洁性与可读性之间保持平衡。合理使用链式操作能让代码更 Pythonic,提升开发效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/930907.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电子商务网站的建设 论文谷歌浏览器搜索引擎入口

在 Spring Boot 中&#xff0c;可以通过自定义异常处理器来实现统一的异常处理。 创建自定义异常类 首先&#xff0c;创建一个自定义的异常类&#xff0c;继承自 RuntimeException 或其子类。这个异常类可以用来表示应用程序中的特定异常情况。 public class CustomExceptio…

网站内容管理规范旅游网站建设的论文

书单再不跑路就要被迫C位出道了花瓶女配和影帝组CP后豪门娇美人是爽文剧本1再不跑路就要被迫C位出道了作者&#xff1a;墨流霜文案&#xff1a;顾星染一觉醒来发现自己是某小说炮灰&#xff0c;未来会嫁给某女主爱慕者&#xff0c;度过悲惨的下半生。她为了逆天改命&#xff0c…

io设备概述

io设备的概念和分类 什么是io设备 IO input output io设备就是将数据输入到计算机,或者可以接受计算机输出数据的外部设备,数据计算机中的硬件部件 io设备分类-按照使用特性 人机交互类外部设备 鼠标键盘打印机 这些…

多元线性回归-梯度下降法-吴恩达机器学习

0.工具 import copy, math, sys import numpy as np1.线性回归模型 def f_wb(x,w,b):return np.dot(w,x) + b2.成本函数 def compute_cost(X, y, w, b):m,_ = X.shapeJ_wb = 0.0for i in range(m):J_wb += (f_wb(X[i],…

高性能网站建设指南 当当wordpress 谷歌竞价

文章目录 一. 实验专题1.1. 实验1&#xff1a;配置OSPF特殊区域1.1.1. 实验目的1.1.2. 实验拓扑图1.1.3. 实验步骤&#xff08;1&#xff09;配置IP地址&#xff08;2&#xff09;创建环回口&#xff08;3&#xff09;查看路由表&#xff08;4&#xff09;设置Stub区域&#xf…

站长之家域名信息查询网站建设需求分析调研表

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

AI 产品研发的一些思考

从两年前开始做公司现有产品的 AI 化转型尝试,到现在从零到一完成一款 AI native 新产品的研发,踩了不少的坑。记录一下到目前为止的一些想法。 1. 产品层面 1.1 先去融入已有的工作流,别想着上来就颠覆Eating your…

04 APP 自动化- Appium toast 元素定位列表滑动 - 教程

04 APP 自动化- Appium toast 元素定位&列表滑动 - 教程2025-10-07 21:56 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !importa…

3.模块化与MVVM设计模式

Aquarius开发框架旨在帮助独立开发者和中小型团队,完成iOS App的快速实现与迭代。使用框架开发将给你带来简单、高效、易维护的编程体验。大家好,我是K哥。一名独立开发者,同时也是Swift开发框架【Aquarius】的作者…

2025舒适轮胎厂家、静音轮胎厂家企业品牌权威推荐榜:静音技术与驾乘体验口碑之选

随着汽车工业的快速发展,消费者对轮胎性能的要求日益提高。在众多轮胎性能指标中,舒适性成为越来越多车主关注的重点。舒适轮胎不仅关系到驾乘体验,更直接影响行车安全与车辆性能。优秀的舒适轮胎应当具备卓越的静音…

骗子会利用钓鱼网站做啥顺企网属于什么网站

填空题Linux_____可以理解为运行在_____之上&#xff0c;回避直接操作_____和配置文件的应用程序。在Linux中常见的两种图形环境是_____和______。在Linux中的配置文件为____和_____。在Fedor8.0中可以通过____窗口进行主题设置。在“自定义主题”对话框中可以对“控件”、“颜…

成品网站seowordpress 模板 淘宝客

在特征工程中&#xff0c;将分类特征转换为数字特征的任务称为编码。 有多种方法来处理分类特征&#xff0c;如OneHotEncoding和LabelEncoding&#xff0c;FrequencyEncoding或通过其计数替换分类特征。同样&#xff0c;我们可以使用均值编码(MeanEncoding)。 均值编码 均值…

20251005 耳朵龙字符串

因为*最多只会有10个,所以被它截断成的串也很少。 每个串跑一边kmp得到匹配序列,然后DP即可发现每次扩展一个字符的时候broder的增加是有限的。 我们每次扩展它最大+2,我们默认他+2,然后check,不符合再缩减直到符…

玩转树莓派屏幕之五:自定义LCD屏幕显示

上一章节中已经完成了lvgl适配以及tslib的屏幕校准。自己要展示的内容还没有展示出来,还是使用玩转树莓派屏幕之二:自定义屏幕显示 中直接展示的文字,没有任何渲染。 lvgl中支持很多控件,屏幕展示的内容更加丰富。…

AtCoder ARC207 总结

AtCoder ARC207 总结 B 构造题。观察样例,发现 \(i\) 恰好三步到达 \(n-i\),其他点都是两步到达,这使我们想到 \(n\) 为偶数时的解法:分成 \(\le n/2\) 和 \(>n/2\) 的两部分点,对于其中一部分,我们让一个点恰…

工信部信息备案网站首页wordpress 多站点 合集

目录 前提&#xff1a;list 的基本介绍 一、构造/析构/拷贝/赋值 1、构造函数 2、析构函数 3、拷贝构造函数 4、赋值 二、修改操作 1、push_back 2、insert 3、erase 4、clear 三、list iterator 的使用 1、operator * 2、operator 3、operator -- 4、operator &…

http长连接维护【yet】

http长连接维护【yet】。

2025.10.7模拟赛

赛时 唐完了 开题,看错T1,以为是可重边,然后推性质,发现假了 看一眼题目,没有可重边,是个红题,唐完了,然后写完1h15min已经过去了 T2想了几种转化,然后脑子不思考了 看到左右<=7,觉得只有部分的顺序会影响…