Python这些冷门特性,当初也没教啊

news2024/7/6 17:59:51

B站|公众号:啥都会一点的研究生

本期整理了Python中几个冷门甚至奇特但又一直存在的特性,一起看看吧

插播,更多文字总结·指南·实用工具·科技前沿动态第一时间更新在公粽号【啥都会一点的研究生

for-else

if-else想必所有人都知道用来处理条件判断,但Python中还有个for-else

names = ["James", "Tim", "Peter"]

for name in names:
    if name == "Steve":
        print("Steve in the list!")
        break
else:
    print("Not found Peter!")

# Not found Peter!

如该例,当break没有发生在for循环中时,将执行else代码块,为了验证,我们稍做改动

names = ["James", "Tim", "Peter", "Steve"]

for name in names:
    if name == "Steve":
        print("Steve in the list!")
        break
else:
    print("Not found Peter!")

# Steve in the list!

在该例中,由于触发了break,else代码块未被执行

256、257

如果在Python中比较数字,有时可能会得到意想不到的结果,如

>>> a=256
>>> b=256
>>> a is b
True
>>> x=257
>>> y=257
>>> x is y
False

这是因为Python 会预加载[-5, 256]范围内的所有整数,以节省时间和内存成本,因此,当声明此范围内的整数时,Python 仅引用缓存的整数,而不会创建任何新对象

即该例中ab是同一个对象,而xy却不是

为验证这点,可以打印每个变量的id

>>> id(a)
1696073345424
>>> id(b)
1696073345424
>>> id(x)
1696122928496
>>> id(y)
1696122928752

这种情况在Python中称为integer caching

String caching

和前述integer caching,Python中也会对small-size strings进行缓存,如该例

>>> a = 'Zhou'
>>> b = 'Zhou'
>>> a is b
True
>>> c = 'Cai Xukong'
>>> d = 'Cai Xukong'
>>> c is d
False

就测试使用的Python3.7来看,使用AST优化器最多可以缓存4096字符,但任何包含空格的字符串都不会缓存

>>> a = 'qyuqhsjkdbzksjgbvhjzsdbkjsfhlweakjfhiufgh'
>>> b = 'qyuqhsjkdbzksjgbvhjzsdbkjsfhlweakjfhiufgh'
>>> a is b
True
>>>

修改元组

在Python中元组是不可变对象,但考虑以下情况

tp = ([1, 2, 3], 4, 5)
tp[0].append(4)
print(tp)
# ([1, 2, 3, 4], 4, 5)

这是因为嵌套Python对象的可变性取决于嵌套对象本身,虽然tp是不可变元组,但tp[0]是可变列表(类似的,还需注意嵌套类型的深浅拷贝问题

0.1+0.2 == 0.3?

正常人都清楚0.1+0.2的结果为0.3,但Python中

print(0.1+0.2 == 0.3)
# False

那么为什么会这样?我们打印出结果

>>> 0.1 + 0.2
0.30000000000000004

准确的说这是由于计算机只能以一定的精度存储和处理浮点数。因此,浮点运算依赖于机器处理器中的硬件实现,并且没有任何编程语言可以说其浮点计算总是正确的

>>> 0.42 + 0.4
0.8200000000000001

+=比=快

在Python中连接字符串,使用+=+运算符虽然都可以达到目的,但代价不同,如

>>> import timeit
>>> print(timeit.timeit("s1 = s1 + s2 + s3", setup="s1 = ' ' * 100000; s2 = ' ' * 100000; s3 = ' ' * 100000", number=100))
0.45820390002336353
>>> print(timeit.timeit("s1 += s2 + s3", setup="s1 = ' ' * 100000; s2 = ' ' * 100000; s3 = ' ' * 100000", number=100))
0.20369120000395924

为啥会这样,这是由于+=不会创建新对象,这样时间不就抠出来了,别小瞧这点时间,在字符串处理密集且繁杂的任务中这是不小的提升

…代替pass

大多数人可能还在使用pass来代表占位符

def my_func():
   pass

但其实三个...也有相同功效(我自己在搭代码框架时也习惯用这种方式)

def my_func():
   ...

以上就是本期的全部内容,如果有从中学到什么就给个点赞在看吧,我是啥都生,下次再见

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

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

相关文章

内置式永磁同步电机复矢量电流调节器设计

导读:本期主要介绍永磁同步电机复矢量电流调节器。针对内置式永磁同步电机d、q轴电流存在动态耦合的问题,在基于有效磁链概念得到IPMSM的复矢量数学模型,设计出相应的复矢量电流调节器,实现了d、q轴电流的动态解耦。通过仿真验证所…

【C语言】每日一题(旋转数组)

旋转数组,链接奉上 目录 方法:创建额外的数组:整体思路:代码实现: 数组反转:整体思路:代码实现:小插曲: 方法: 创建额外的数组: 整体思路: 创建一个额外的…

【Dockerfile镜像实战】构建LNMP环境并运行Wordpress网站平台

这里写目录标题 一、项目背景和要求二、项目环境三、部署过程1)创建自定义网络2)部署NginxStep1 创建工作目录并上传相关软件包Step2 编写Dockerfile文件Step3 编写配置文件nginx.confStep4 创建nginx镜像Step5 运行容器 3)部署MysqlStep1 创…

【Axure高保真原型】可视化图表图标

今天和粉丝们免费分享可视化图表图标原型模板,包括柱状图、条形图、环形图、散点图、水波图等常用的可视化图表图标。 【原型效果】 【原型预览】 https://axhub.im/ax9/d402c647c82f9185/#c1 【原型下载】 这个模板可以在 Axure高保真原型哦 小程序里免费下载哦…

Node学习笔记之HTTP 模块

回顾:什么是客户端、什么是服务器? 在网络节点中,负责消费资源的电脑,叫做客户端;负责对外提供网络资源的电脑,叫做服务器。 http 模块是 Node.js 官方提供的、用来创建 web 服务器的模块。通过 http 模块…

EC11编码器编码使用

文章目录 前要原理脉冲与定位功能硬件设计 编程轮询模式定时器Encoder模式 结束语 前要 关于EC11编码器的了解可以参考两篇文章,比较详细,在此就不多介绍了: 一篇文章带你了解——EC11编码器(关于硬件、原理图、上下拉等都有讲&…

linux性能分析(五)如何学习linux性能优化

一 如何学习linux性能优化 强调: 由于知识记忆曲线以及某些知识点不常用,所以一定要注重复习思考: 如何进行能力转义以及能力嫁接? --> 真正站在巨人的肩膀上性能调优的目的: 不影响系统稳定性的资源最大利用化补充: 性能…

Python:函数篇(每周练习)

编程题: Python第四章作业(初级) (educoder.net) 题一:无参无返回值函数 def print_hi_human(): # 函数名用小写字母print("人类,你好!")if __name__ __main__:print_hi_human() 题二&#…

一起学数据结构(11)——快速排序及其优化

上篇文章中,解释了插入排序、希尔排序、冒泡排序、堆排序及选择排序的原理及具体代码实现本片文章将针对快速排序,快速排序的几种优化方法、快速排序的非递归进行解释。 目录 1. 快速排序原理解析以及代码实现: 2. 如何保证相遇位置的值一…

智慧矿山:让AI算法提高未戴安全带识别率!

未穿戴安全带识别AI算法,作为智慧矿山的重要应用之一,不仅可以有效提高矿山工作人员的安全意识,还可以降低事故发生的概率。然而,识别准确率的提高一直是该算法面临的挑战之一。为了解决这个问题,研究人员不断努力探索…

vue3如何实现页面跳转?

首先、给元素绑点击事件 其次 写跳转路由 总结:一定不要忘了引入Router

UE5--物体卡片与材质入门

参考资料: 《Unreal Engine5 入门到精通》--左央 虚幻引擎5.2文档:https://docs.unrealengine.com/5.2/zh-CN/ 前言: 跟着左央老师的《Unreal Engine5 入门到精通》学习制作AI版胡闹厨房,把学习过程与学习到的东西归纳总结起来。 …

裸机与RTOS(概念、关系、区别)

目录 裸机 什么是裸机? 裸机开发的特点 STM32裸机开发 RTOS 什么是RTOS? RTOS技术的概念及特点 STM32中的RTOS 裸机开发与RTOS开发对比分析 裸机开发 RTOS开发 如何选择? 裸机 什么是裸机? 在嵌入式领域,…

【大数据】Kafka 实战教程(一)

Kafka 实战教程(一) 1.Kafka 介绍1.1. 主要功能1.2. 使用场景1.3 详细介绍1.3.1 消息传输流程1.3.2 Kafka 服务器消息存储策略1.3.3 与生产者的交互1.3.4 与消费者的交互 2.Kafka 生产者3.Kafka 消费者3.1 Kafka 消费模式3.1.1 At-most-once(…

手把手教你使用Express框架在Node服务端实现图片渲染

手把手教你使用Express框架在Node服务端实现图片渲染 1.前言2.node-canvas库3.搭建node服务端环境3.1 初始化项目3.2 使用内置http模块创建服务3.3 使用Express创建服务 4.服务端渲染图片4.1 创建Express路由4.2 绘制三角形4.3 静态资源中间件4.4 写入图片文件4.5 渲染Echarts图…

STM32,我想看单片机上的外设时钟,我怎么看?

一:在工程中加入rcc文件 首先需要加载我们的时钟函数的文件 stm32f10x_rcc.h 和 stm32f10x_rcc.c 文件 二:查看文件 在h头文件 尾部,有我们这个总线的函数 在函数体内,有我们这个宏定义的 外设时钟,我们拿就行了 APB2_…

【C++】C++11新特性之右值引用与移动语义

文章目录 一、左值与左值引用二、右值与右值引用三、 左值引用与右值引用比较四、右值引用使用场景和意义1.左值引用的短板2.移动构造和移动赋值3.STL中右值引用的使用 五、万能引用与完美转发1.万能引用2.完美转发 一、左值与左值引用 在C11之前,我们把数据分为常…

win10专业版驱动开发

我使用的系统版本如何下: 使用的visual studio为VS2019,使用的SDK,WDK如下: 在visual studio单个组件里选择SDK10.0.018362.0 在WDK里面选择版本为: 下载链接如下: 以前的 WDK 版本和其他下载 - Windows drivers | Microsoft Le…

计算机算法分析与设计(16)---Dijkstra算法(含C++代码)

文章目录 一、知识概述1.1 算法描述1.2 例题分析 二、代码编写 一、知识概述 1.1 算法描述 1.2 例题分析 二、代码编写 输入:  第一行:图的顶点数n  第二行:图的边数k  第三行:算法起点begin,算法终点end  接下来…

设计模式-责任链设计模式

核心思想 客户端发出一个请求,链上的对象都有机会来处理这一请求,而客户端不需要知道谁是具体的处理对象让多个对象都有机会处理请求,避免请求的发送者和接收者之间的耦合关系,将这个对象连成一条调用链,并沿着这条链…