首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 25-03-02 14:02
  • 2441
  • 11332
blog.csdn.net

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

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

>>> x = 0
>>> x += 1
>>> x += 10
>>> x *= 2
>>>
>>> x -=3
>>> x /= 3
>>> x
6.333333333333333
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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

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

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

>>> hypot = (3 * 3 + 4 * 4) ** 0.5
>>> hypot
5.0
  • 1
  • 2
  • 3

2. 使用组合运算符

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

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

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

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

>>> s1 = s2 = "The string"
>>> s1 += "...has more details"
>>> print("s1:", s1)
s1: The string...has more details
>>> print("s2:", s2)
s2: The string
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

我们看到,当给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]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

列表进行就地修改,就无需创建新列表并将列表重新分配给变量。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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

执行结果如下图所示:

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

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

3. 小结

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

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

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

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

相关阅读:

  1. Python编程技巧 - 异常处理
  2. Python编程技巧 - 迭代器(Iterator)
文章知识点与官方知识档案匹配,可进一步学习相关知识
Python入门技能树首页概览388936 人正在系统学习中
注:本文转载自blog.csdn.net的Jackson@ML的文章"https://jackson.blog.csdn.net/article/details/134959874"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top