Python:方法的链式调用

embedded/2024/10/22 18:41:47/

相关阅读

Pythonicon-default.png?t=O83Ahttps://blog.csdn.net/weixin_45791458/category_12403403.html?spm=1001.2014.3001.5482


        在Python编程中,方法的链式调用是一种简洁且优雅的编程风格,它允许你在一行代码中连续调用多个方法,这种编程模式在简化代码、提升可读性和减少代码冗余方面发挥了重要作用。链式调用的原理是通过在每个方法结束时返回对象自身(通常命名为self),从而使后续的方法能够继续作用在同一个对象上。本文将深入探讨Python中链式调用的基本概念、优势、实现方式,以及常见的使用场景。

一、链式调用的基本概念

        链式调用,顾名思义,是指多个方法像链条一样连接在一起调用,通常在每个方法执行完毕后,返回当前对象自身,以便后续方法可以继续作用在同一个对象上。例1展示了一个链式调用。

python"># 例1
class Calculator:def __init__(self, value=0):self.value = valuedef add(self, num):self.value += numreturn selfdef subtract(self, num):self.value -= numreturn selfdef multiply(self, num):self.value *= numreturn selfdef result(self):return self.valuecalc = Calculator()
result = calc.add(5).subtract(3).multiply(10).result()
print(result)  # 输出 20

        在这个例1中可以看到,add、subtract、multiply等方法返回self,表达式的求值是从左向右执行,calc.add()方法执行后,返回值作为对象又执行了subtract(),以此类推。

        例2以另一种风格重写了例1,此时无法使用链式调用而只能写多行语句来进行多个方法调用。

python"># 例2
class Calculator:def __init__(self, value=0):self.value = valuedef add(self, num):self.value += numdef subtract(self, num):self.value -= numdef multiply(self, num):self.value *= numdef result(self):return self.valuecalc = Calculator()
calc.add(5)
calc.subtract(3)
calc.multiply(10)
result = calc.result()
print(result)  # 输出 20

二、链式调用的应用场景

1. Pandas数据操作

        Pandas库中的DataFrame方法就是链式调用的一个经典例子。它允许用户在一行中对数据执行多个操作:

python">df = df.dropna().reset_index().rename(columns={"old_name": "new_name"})

2. SQL查询构建器

        在ORM框架如SQLAlchemy中,链式调用被广泛用于构建复杂的SQL查询:

python">query = session.query(User).filter(User.age > 18).order_by(User.name)

 

3. 图像处理

        像PIL(Python Imaging Library)这样的图像处理库也使用链式调用处理图像,如改变大小、旋转、保存等操作: 

python">image = Image.open("example.jpg").resize((200, 200)).rotate(90).save("output.jpg")

4. 张量操作

        PyTorch支持丰富的链式调用操作,用于张量的各种变换、运算和处理:

python">x = torch.randn(3, 3)
y = x.abs().sqrt().add(2).clamp(0, 1)

http://www.ppmy.cn/embedded/127614.html

相关文章

Android Compose 控件基本属性

本文的代码由上一篇文章的Demo进一步书写完成, 传送门:Android Compose的基本使用-CSDN博客 _____________________________________________________________________________ 以下代码分别列举了控件的: 内边距,外边距,内容居中,渐变自定义边框,宽度权重,string资源引用等…

解决方案:“<”not supported between instances instances of “int” and “str”

文章目录 一、现象二、解决方案 一、现象 # 按照2024年10月01日为界拆分数据集 train df[:2024-09-30].iloc[:, 0:1].values #训练集 test df[2024-10-01:].iloc[:, 0:1].values #测试集“<”not supported between instances instances of “int” and “str” 二…

Tiktok 网络稳定与 IP 类型的关系

大家好&#xff01;今天&#xff0c;我们要聊一个既实用又接地气的话题——静态IP和动态IP&#xff0c;哪个更适合你的Tiktok账号呢&#xff1f;别担心&#xff0c;我会用最简单的方式帮你理清思路&#xff0c;让你轻松做出选择。 首先&#xff0c;咱们得明白什么是静态IP和动…

JavaScript 中的 DOM 尺寸测量与节流技巧

“今日事,今日毕” 文章目录 前言文章有误敬请斧正 不胜感恩&#xff01;一、如何获取元素的尺寸1. Element.clientHeight 和 Element.clientWidth2. Element.scrollHeight 和 Element.scrollWidth3. Element.scrollTop 和 Element.scrollLeft 二、节流&#xff08;Throttle&am…

【React】如何对组件加载进行优化

1. 懒加载 (Lazy Loading) 使用 React.lazy() 和 Suspense 来实现懒加载&#xff08;按需加载&#xff09;组件。只有在需要时才加载对应组件&#xff0c;可以减小初始加载的体积。 const LazyComponent React.lazy(() > import(./LazyComponent));function App() {retur…

3_路由器分组交换知多少?20241009

上次介绍到了路由器的分组交换戛然而止&#xff0c;这次扫盲式介绍下。 1、分组交换的主要特点 分组交换则采用存储转发技术1-11 表示把一个报文划分为几个分组后再进行传送。通常我们把要发送的整块数据称为一个报文(message)。在发送报文之前&#xff0c;先把较长的报文划分成…

电汽车充电革命:充电桩的过去现在与未来

电动汽车充电革命&#xff1a;中国充电桩行业的过去、现在与未来 一、发展历程概述 中国充电桩行业的发展历程可划分为以下几个阶段&#xff1a; 1. 初始期&#xff08;2006-2008年&#xff09;&#xff1a;在此阶段&#xff0c;国家队主导市场&#xff0c;主要参与者包括国…

MT1351-MT1360 码题集 (c 语言详解)

MT1351用函数判断素数 c 语言代码实现 #include <stdio.h> int isPrime(int num) {if (num < 1)return 0;for (int i 2; i * i < num; i) {if (num % i 0) {return 0;}}return 1; } int main() {int num;scanf("%d", &num);if (isPrime(num)) {pr…