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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

小傅哥星球项目拆解,如何设计复杂的抽奖流程

作者&#xff1a;小傅哥 博客&#xff1a;https://bugstack.cn 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; 大家好&#xff0c;我是技术UP主小傅哥。 我想做一个抽奖&#xff0c;但想让用户合理的别中奖。现在各个互联网产品场景中&…

算法 - 二分搜索法 / 二分法(704)

原理&#xff1a; 利用数组的有序性&#xff0c;每次取查找范围的中间点&#xff0c;缩窄一半的查找空间。比较中间值和目标值的大小&#xff0c;直到找到目标值或者查找区间为空时返回。 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目&…

图解transformer中的自注意力机制(备忘)

注意力机制 在整个注意力过程中&#xff0c;模型会学习了三个权重:查询、键和值。查询、键和值的思想来源于信息检索系统。所以我们先理解数据库查询的思想。 假设有一个数据库&#xff0c;里面有所有一些作家和他们的书籍信息。现在我想读一些Rabindranath写的书&#xff1a…

2. 如何通过公网IP端口映射访问到设备的vmware虚拟机的ubuntu服务器

文章目录 1. 主机设备是Windows 11系统2. 安装vmware虚拟机3. 创建ubuntu虚拟机&#xff08;据说CentOS 7 明年就不维护了&#xff0c;就不用这个版本的linux了&#xff09;4. 安装nginx服务:默认端口805. 安装ssh服务:默认端口226. 设置主机 -> ubuntu的端口映射7. 设置路由…

ReentrantLock详解

介绍 它是可重入锁的互斥锁&#xff0c;又被称为“独占锁”。它在同一时间点只能被一个线程锁持有&#xff1b;可重入表示&#xff0c;ReentrantLock锁可被同一个线程多次获取。它是通过一个FIFO的等待队列来管理获取该锁所有线程的。在“公平锁”的机制下&#xff0c;线程依次…

MySQL笔记-第08章_聚合函数

视频链接&#xff1a;【MySQL数据库入门到大牛&#xff0c;mysql安装到优化&#xff0c;百科全书级&#xff0c;全网天花板】 文章目录 第08章_聚合函数1. 聚合函数介绍1.1 AVG和SUM函数1.2 MIN和MAX函数1.3 COUNT函数 2. GROUP BY2.1 基本使用2.2 使用多个列分组2.3 GROUP BY中…

理解排序算法:冒泡排序、选择排序与归并排序

简介&#xff1a; 在计算机科学中&#xff0c;排序算法是基础且重要的概念。本文将介绍三种常见的排序方法&#xff1a;冒泡排序、选择排序和归并排序。我们将探讨它们的工作原理、特点和适用场景&#xff0c;以帮助读者更好地理解和选择合适的排序方法。 冒泡排序 冒泡排序是…

cs环境部署

配置搭建cs工具 两种方式 cs工具 》狐狸工具箱,微信上搜索 或者cs - OneDrive (sharepoint.com)提取密码www.ddosi.org 需要云服务器&#xff08;个人猜测如果是靶场的话&#xff0c;可以采用一台所有主机都能访问的主机作为服务端配置&#xff09; 非docker方式搭建 将c…

ue5材质预览界面ue 变黑

发现在5.2和5.1上都有这个bug 原因是开了ray tracing引起的&#xff0c;这个bug真是长时间存在&#xff0c;类似的bug还包括草地上奇怪的影子和地形上的影子等等 解决方法也很简单&#xff0c;就是关闭光追&#xff08;不是…… 就是关闭预览&#xff0c;在材质界面preview sc…

10基于matlab的悬臂梁四节点/八节点四边形单元有限元编程(平面单元)

悬臂梁&#xff0c;有限元编程。基于matlab的悬臂梁四节点/八节点四边形单元有限元编程&#xff08;平面单元&#xff09;&#xff0c;程序有详细注解&#xff0c;可根据需要更改参数&#xff0c;包括长度、截面宽度和高度、密度、泊松比、均布力、集中力、单元数量等。需要就拍…

【算法】递归、搜索与回溯算法

文章目录 一. 名词解释1. 递归1.1 什么是递归&#xff1f;1.2 为什么会用到递归&#xff1f;1.3 如何理解递归&#xff1f;1.4 如何写好一个递归&#xff1f; 2. 遍历和搜索3. 回溯和剪枝 二. 递归系列专题1. 汉诺塔问题2. 合并两个有序链表3. 反转链表4. 两两交换链表中的节点…

关于Anaconda的安装和环境部署(此章专为新手制定)

目录 Anaconda简介 一、软件下载&#xff08;地址&#x1f447;&#xff09; 2&#xff1a;点击下载 3&#xff1a;版本选择&#xff1a; 4&#xff1a;Anaconda的安装包就下载完成了 2&#xff1a;恭喜你&#xff0c;看到这里已经完成安装了 三、部署环境 1&#xff1…

什么是 AWS IAM?如何使用 IAM 数据库身份验证连接到 Amazon RDS(上)

驾驭云服务的安全环境可能很复杂&#xff0c;但 AWS IAM 为安全访问管理提供了强大的框架。在本文中&#xff0c;我们将探讨什么是 AWS Identity and Access Management (IAM) 以及它如何增强安全性。我们还将提供有关使用 IAM 连接到 Amazon Relational Database Service (RDS…

C++类模板分文件编写

问题&#xff1a; 类模板中成员函数创建时机是在调用阶段&#xff0c;导致分文件编写时链接不到 解决&#xff1a; 解决方式最常用的&#xff1a;将声明和实现写到同一个文件&#xff0c;并更改后缀名为.hpp&#xff0c;hpp是约定的名称&#xff0c;并不是强制的

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

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

洛谷 P8802 [蓝桥杯 2022 国 B] 出差

文章目录 [蓝桥杯 2022 国 B] 出差题目链接题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示 思路解析CODE [蓝桥杯 2022 国 B] 出差 题目链接 https://www.luogu.com.cn/problem/P8802 题目描述 A \mathrm{A} A 国有 N N N 个城市&#xff0c;编号为 1 … N …

三天精通Selenium Web 自动化 - Selenium(Java)环境搭建

1 下载JDK JDK下载地址&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2 安装和配置JDK 安装目录尽量不要有空格 D:\Java\jdk1.8.0_91; D:\Java\jre8设置环境变量&#xff1a; “我的电脑”->右键->“属性”->…

LeetCode刷题日志-73矩阵置零

思路一&#xff1a; 用一个同样大小的矩阵记录0的位置&#xff0c;然后遍历矩阵置0&#xff0c; 空间复杂度为O&#xff08;mn&#xff09; class Solution {public void setZeroes(int[][] matrix) {int [][] matrix_new new int[matrix.length][matrix[0].length];for(int …

postgresql自带指令命令系列三

目录 简介 bin目录 28.pg_verifybackup 29.pg_waldump 30.postgres 31.postmaster -> postgres 32.psql 33.reindexdb 34.vacuumdb 35.vacuumlo 总结&#xff1a; 简介 在安装postgresql数据库的时候会需要设置一个关于postgresql数据库的PATH变量 export PATH/…

1845_emacs中一个中文乱码问题分析解决

Grey 全部学习内容汇总&#xff1a;GitHub - GreyZhang/editors_skills: Summary for some common editor skills I used. 1845_emacs中一个中文乱码问题分析解决 曾经有一次放弃过我自己的emacs配置&#xff0c;一个原因就是中文的支持。感觉我的配置跟其他人的配置显得有些…