Python编程技巧 – 使用组合运算符

Python编程技巧 – 使用组合运算符

Python Programming Skills – Using Combined Operators

Python通过赋值过程,将声明变量与赋值和而为之,可谓讲求效率。此外,在Python赋值运算符里,也有一个强大高效的功能,即复合运算符。

在进行常规运算时,算术运算符就够用了;但是,面对复杂的运算和多行代码的较大程序,我们仍然希望写出简洁高效的代码。这时候,我们可能要使用组合运算符。

1. 组合运算符

在Windows命令行,启动Python程序,并进入交互式编程环境。来看几个例子:

>>> n = 10
>>> n = n + 1
>>> n
11
>>> n = n * 2
>>> n
22
>>> m = 10
>>> m += 1
>>> m
11
>>>
>>> m *= 2
>>> m
22

类似于n = n + 1之类的语句很普遍,类似于C/C++,在Python语言里,也可以进行简写形式。
例如,加减乘除取余,可用以下形式简写:

>>> x = 0
>>> x += 1
>>> x += 10
>>> x *= 2
>>>
>>> x -=3
>>> x /= 3
>>> x
6.333333333333333

但是,在算术运算中,存在优先级。例如,幂运算就优先于乘法、除法和余数运算,而优先级为2的运算高于加法和减法。因此,必要的时候,要按照优先级在特定位置添加括号,才能够得到所需的结果:

hypot = (a * a + b * b) ** 0.5

按照实际数字,hypot计算结果如下图所示:

>>> hypot = (3 * 3 + 4 * 4) ** 0.5
>>> hypot
5.0

2. 使用组合运算符

前面介绍过组合赋值运算符。请记住实例,即赋值符号(=)可以与以下任何运算符组合
+、-、*、/、%、、&、|、<<\、>>**

运算符&、|和^分别进行按位“与”、“或“和”异或“, 运算符<<和>>进行按位左移和按位右移。

  • 首先,任何赋值运算符的优先级都较低,通常在最后执行。
  • 其次,赋值运算符是否能就地修改,取决于被操作对象的类型是否可变。就地修改,是指对内存存储的数据进行操作,而不是创建对象。这样的操作更快且更加有效。

但是 ,赋值运算符与这些对象一起使用时不能够直接就地修改,必须产生一个新的对象,并将其重新赋值给变量。看下面的例子:

>>> s1 = s2 = "The string"
>>> s1 += "...has more details"
>>> print("s1:", s1)
s1: The string...has more details
>>> print("s2:", s2)
s2: The string

我们看到,当给s1赋值新的值时,它没有改变原字符串的数据,它为s1分配了一个新的字符串,但是s2是指源字符串数据的名称。这就是为什么s1, s2会指向不同的字符串。

除掉字符串,我们来看列表。由于列表是可变的,因此可以对列表进行就地赋值。

>>> lst1 = lst2 = [10, 15, 20]
>>> lst1 += [25, 30]
>>> print("lst1:", lst1)
lst1: [10, 15, 20, 25, 30]
>>> print("lst2:", lst2)
lst2: [10, 15, 20, 25, 30]

列表进行就地修改,就无需创建新列表并将列表重新分配给变量。Lst1还是指向原来的列表,因此,lst2(引用内存中相同数据的变量)也显示更改后的结果。

实际上,就地赋值更加高效。Python保留了一下额外空间以备列表增长,故Python允许append以及+=等操作高效的增长列表,但列表有时会超出保留空间,这时候就得删除超出部分。这种内存管理难以察觉,同时对程序行为几乎没有影响。

非就地操作效率低下,因为必须创建一个新对象。所以说,这就是为什么要使用 join 方法来创建大字符串,而不是用+=运算符的缘故。这一点对于关注性能方面尤为重要。

接下来,我们使用join() 方法创建列表,并将二十六个字母连接在一起。示例代码如下:

str = []
n = ord('a')
for i in range(n, n + 26):str += chr(i)
alphabet_str = ''.join(str)
print(alphabet_str)

执行结果如下图所示:

在这里插入图片描述
这里的str += chr(i),就是取i对应的字符并且累加到str字符串列表中,因此,+=又充当了一次角色,即组合加法运算。

从上面的例子不难看出,列表数据被追加到现有列表上,无须创建新列表并重新对变量赋值。

3. 小结

对组合运算符,我们可以小结如下:

1) 若对象是可变的(如列表),则组合赋值运算符(例如:+=)会对数据就地修改;否则,会创建一个新对象并赋给左侧的变量;
2) 就地运算速度更快,并可以更有效利用内存空间,正是由于它们不能强制创建新对象。对于列表,Python通常会分配额外的空间,以便在程序运行时更加高效地增长列表。这时候的列表,是个了不得的数据结构!

感谢阅读本文章。
技术好文陆续推出,敬请关注。

喜欢你就点赞哈!您的认可,我的动力!😃

相关阅读:

  1. Python编程技巧 - 异常处理
  2. Python编程技巧 - 迭代器(Iterator)

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

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

相关文章

赴美上市传闻再起,SHEIN走到十字路口

作者 | 辰纹 来源 | 洞见新研社 裹挟着“黑五”大胜的余波&#xff0c;跨境电商巨头SHEIN&#xff08;希音&#xff09;将赴美IPO的传闻又在行业中散播开来。 金融投资报称SHEIN此次IPO的估值或达900亿美元&#xff1b;上海证券报表示&#xff0c;SHEIN已对投资人发出了路演…

字符设备驱动开发基础

一. 简介 本文简单了解一下&#xff0c;在字符设备驱动开发开始前对其一些基本认识。简单了解一下&#xff0c;应用程序与驱动的交互原理&#xff0c;以及字符设备驱动开发流程。 二. 字符设备驱动开发流程 1. 在 Linux 中一切皆为文件&#xff0c;驱动加载成功以后会在“…

Camunda 7.x 系列【60】流程分类

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 2.7.9 本系列Camunda 版本 7.19.0 源码地址:https://gitee.com/pearl-organization/camunda-study-demo 文章目录 1. 前言2. 案例演示2.1 后端2.2 前端2.3 测试1. 前言 钉钉中的OA审批分类: 企业级的业务…

vue2 echarts饼状图,柱状图,折线图,简单封装以及使用

vue2 echarts饼状图&#xff0c;柱状图&#xff0c;折线图&#xff0c;简单封装以及使用 1. 直接上代码&#xff08;复制可直接用&#xff0c;请根据自己的文件修改引用地址&#xff0c;图表只是简单封装&#xff0c;可根据自身功能&#xff0c;进行进一步配置。&#xff09; …

优雅玩转实验室服务器(二)传输文件

使用服务器最重要的肯定是传输文件了&#xff0c;我们不仅需要本地的一些资源上传到服务器&#xff0c;好进行实验&#xff0c;也需要将服务器计算得到的实验结果传输到本地&#xff0c;来进行预览或者报告撰写。 首先&#xff0c;由于涉及到服务器操作&#xff0c;我强烈推荐…

Jemeter,提取响应体中的数据:正则表达式、Json提取器

一、正则表达式 1、线程组--创建线程组&#xff1b; 2、线程组--添加--取样器--HTTP请求&#xff1b; 3、Http请求--添加--后置处理器--正则表达式提取器&#xff1b; 4、线程组--添加--监听器--查看结果树&#xff1b; 5、线程组--添加--取样器--调试取样器。 响应体数据…

UI5 development on VS Studio code

今天来分享一下如何VS studio code 上UI5开发环境的搭建 1.安装Node.js 路径&#xff1a;Node.js 因安装步骤较为简单&#xff0c;故不在此赘述。 验证方法如下&#xff1a;WINR-->CMD--->node --version 出现下图即可 2. 安装UI5 CLI (为了后面我们方便使用UI5 的命令…

本地部署语音转文字(whisper,SpeechRecognition)

本地部署语音转文字 1.whisper1.首先安装Chocolatey2.安装3.使用 2.SpeechRecognition1.环境2.中文包3.格式转化4.运行 3.效果 1.whisper 1.首先安装Chocolatey https://github.com/openai/whisper 以管理员身份运行PowerShell Set-ExecutionPolicy Bypass -Scope Process -…

【JVM从入门到实战】(一) 字节码文件

一、什么是JVM JVM 全称是 Java Virtual Machine&#xff0c;中文译名 Java虚拟机。 JVM 本质上是一个运行在计算机上的程序&#xff0c;他的职责是运行Java字节码文件。 二、JVM的功能 解释和运行 对字节码文件中的指令&#xff0c;实时的解释成机器码&#xff0c;让计算机…

ubuntu20 安装docker

一.官网安装文档 &#xff08;基本按官方文档安装&#xff09; Install Docker Engine on Ubuntu | Docker Docs 二.安装步骤 1.docker 需要64位操作系统、linux内核要在3.1以上 #uname -r 2.卸载可能存在的旧版本 #sudo apt-get remove docker docker-engine docker-ce …

Redis rdb源码解析

前置学习&#xff1a;Redis server启动源码-CSDN博客 1、触发时机 1、执行save命令--->rdbSave函数 2、执行bgsave命令--->rdbSaveBackground函数或者&#xff08;serverCron->prepareForShutdown&#xff09; 3&#xff0c;主从复制-->startBgsaveForReplication…

图文教程:stable-diffusion的基本使用教程 txt2img(多图)

之前我介绍了SD的安装过程&#xff0c;那么这篇将介绍怎么使用SD 使用模型 SD安装好之后&#xff0c;我们只有一个默认的模型。这个模型很难满足我们的绘图需求&#xff0c;那么有2种方法。 1是自己训练一个模型&#xff08;有门槛&#xff09;2是去网站上找一个别人练好的模…

分布式ID服务实践

背景 分布式场景下需要一个全局 ID 来标识唯一性&#xff0c;比如在单数据库时通过表唯一主键即可实现唯一 ID&#xff0c;分库分表时就需要全局唯一 ID。 业务对唯一 ID 的要求如下&#xff1a; 全局唯一性 不能出现重复的 ID 号&#xff0c;既然是唯一标识&#xff0c;这…

一文讲解关于MCU启动原理的几个关键问题

MCU最开始一启动后去哪里读代码&#xff1f; CPU上电启动后被设计为去地址0x00000000位置处读取代码&#xff1b;首先会连续读取两个字&#xff0c;分别是栈指针初始值和复位异常处理函数的地址&#xff1b;然后跳去执行复位异常处理函数。 当然在一些早期的ARM处理器设计中&a…

hive自定义函数及案例

一.自定义函数 1.Hive自带了一些函数&#xff0c;比如&#xff1a;max/min等&#xff0c;但是数量有限&#xff0c;自己可以通过自定义UDF来方便的扩展。 2.当Hive提供的内置函数无法满足你的业务处理需要时&#xff0c;此时就可以考虑使用用户自定义函数。 3.根据用户自定义…

思维链(CoT)提出者 Jason Wei:关于大语言模型的六个直觉

文章目录 一、前言二、主要内容三、总结 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 Jason Wei 的主页&#xff1a;https://www.jasonwei.net/ Jason Wei&#xff0c;一位于 2020 年从达特茅斯学院毕业的杰出青年&#xff0c;随后加盟了…

Wireshark中的http协议包分析

Wireshark可以跟踪网络协议的通讯过程&#xff0c;本节通过http协议&#xff0c;在了解Wireshark使用的基础上&#xff0c;重温http协议的通讯过程。 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可靠的、基于 字节流…

Windows/Linux混合刻录后,Windows显示空白盘解决思路

概述 因为工作环境问题&#xff0c;需要在Windows和Linux之间来回光盘刻录&#xff0c;没有多余光盘的时候经常多次使用&#xff0c;同一光盘在Windows刻录文件到Linux&#xff0c;然后从Linux刻录文件到Windows&#xff0c;Windows用“类似U盘”格式化的光盘&#xff0c;在Wi…

005、Softmax损失

之——softmax与交叉熵 杂谈 我们常用到softmax函数与交叉熵的结合作为损失函数以监督学习&#xff0c;这里做一个小小的总结。 正文 1.softmax的基本改进 所谓softmax就是在对接全连接层输出时候把输出概率归一化&#xff0c;最基础的就是这样&#xff1a; 效果就是这样&…

在 JavaScript 中导入和导出 Excel XLSX 文件:SpreadJS

在 JavaScript 中导入和导出 Excel XLSX 文件 2023 年 12 月 5 日 使用 MESCIUS 的 SpreadJS 将完整的 JavaScript 电子表格添加到您的企业应用程序中。 SpreadJS 是一个完整的企业 JavaScript 电子表格解决方案&#xff0c;用于创建财务报告和仪表板、预算和预测模型、科学、工…