当前位置:首页 > 科技  > 软件

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

来源: 责编: 时间:2023-11-07 09:14:39 224观看
导读本期整理了Python中几个冷门甚至奇特但又一直存在的特性,一起看看吧!for-elseif-else想必所有人都知道用来处理条件判断,但Python中还有个for-else:names = ["James", "Tim", "Peter"]for name in names: if name == "

本期整理了Python中几个冷门甚至奇特但又一直存在的特性,一起看看吧!QK528资讯网——每日最新资讯28at.com

QK528资讯网——每日最新资讯28at.com

for-else

if-else想必所有人都知道用来处理条件判断,但Python中还有个for-else:QK528资讯网——每日最新资讯28at.com

names = ["James", "Tim", "Peter"]for name in names:    if name == "Steve":        print("Steve in the list!")        breakelse:    print("Not found Peter!")# Not found Peter!

如该例,当break没有发生在for循环中时,将执行else代码块,为了验证,我们稍做改动:QK528资讯网——每日最新资讯28at.com

names = ["James", "Tim", "Peter", "Steve"]for name in names:    if name == "Steve":        print("Steve in the list!")        breakelse:    print("Not found Peter!")# Steve in the list!

在该例中,由于触发了break,else代码块未被执行。QK528资讯网——每日最新资讯28at.com

256、257

如果在Python中比较数字,有时可能会得到意想不到的结果,如:QK528资讯网——每日最新资讯28at.com

>>> a=256>>> b=256>>> a is bTrue>>> x=257>>> y=257>>> x is yFalse

这是因为Python 会预加载[-5, 256]范围内的所有整数,以节省时间和内存成本,因此,当声明此范围内的整数时,Python 仅引用缓存的整数,而不会创建任何新对象,即该例中a和b是同一个对象,而x和y却不是。QK528资讯网——每日最新资讯28at.com

为验证这点,可以打印每个变量的id:QK528资讯网——每日最新资讯28at.com

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

这种情况在Python中称为integer caching。QK528资讯网——每日最新资讯28at.com

String caching

和前述integer caching,Python中也会对small-size strings进行缓存,如该例:QK528资讯网——每日最新资讯28at.com

>>> a = 'Zhou'>>> b = 'Zhou'>>> a is bTrue>>> c = 'Cai Xukong'>>> d = 'Cai Xukong'>>> c is dFalse

就Python3.7来看,使用AST优化器最多可以缓存4096字符,但任何包含空格的字符串都不会缓存:QK528资讯网——每日最新资讯28at.com

>>> a = 'qyuqhsjkdbzksjgbvhjzsdbkjsfhlweakjfhiufgh'>>> b = 'qyuqhsjkdbzksjgbvhjzsdbkjsfhlweakjfhiufgh'>>> a is bTrue>>>

修改元组

在Python中元组是不可变对象,但考虑以下情况:QK528资讯网——每日最新资讯28at.com

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

这是因为嵌套Python对象的可变性取决于嵌套对象本身,虽然tp是不可变元组,但tp[0]是可变列表(类似的,还需注意嵌套类型的深浅拷贝问题)。QK528资讯网——每日最新资讯28at.com

0.1+0.2 == 0.3?

正常人都清楚0.1+0.2的结果为0.3,但Python中:QK528资讯网——每日最新资讯28at.com

print(0.1+0.2 == 0.3)# False

那么为什么会这样?我们打印出结果:QK528资讯网——每日最新资讯28at.com

>>> 0.1 + 0.20.30000000000000004

准确的说这是由于计算机只能以一定的精度存储和处理浮点数。因此,浮点运算依赖于机器处理器中的硬件实现,并且没有任何编程语言可以说其浮点计算总是正确的:QK528资讯网——每日最新资讯28at.com

>>> 0.42 + 0.40.8200000000000001

+=比=快

在Python中连接字符串,使用+=和+运算符虽然都可以达到目的,但代价不同,如:QK528资讯网——每日最新资讯28at.com

>>> 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

为啥会这样,这是由于+=不会创建新对象,这样时间不就抠出来了,别小瞧这点时间,在字符串处理密集且繁杂的任务中这是不小的提升。QK528资讯网——每日最新资讯28at.com

…代替pass

大多数人可能还在使用pass来代表占位符:QK528资讯网——每日最新资讯28at.com

def my_func():   pass

但其实三个...也有相同功效(我自己在搭代码框架时也习惯用这种方式)::QK528资讯网——每日最新资讯28at.com

def my_func():   ...

以上就是本期的全部内容,期待点赞在看,我是啥都生,下次再见。QK528资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-17407-0.htmlPython这些冷门特性,当初也没教啊

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 深入理解gorm是如何和数据库建立连接的

下一篇: 使用 Python 在视频上渲染文本

标签:
  • 热门焦点
  • 影音体验是真的强 简单聊聊iQOO Pad

    影音体验是真的强 简单聊聊iQOO Pad

    大公司的好处就是产品线丰富,非常细分化的东西也能给你做出来,例如早先我们看到了新的vivo Pad2,之后我们又在iQOO Neo8 Pro的发布会上看到了iQOO的首款平板产品iQOO Pad。虽
  • 摸鱼心法第一章——和配置文件说拜拜

    摸鱼心法第一章——和配置文件说拜拜

    为了能摸鱼我们团队做了容器化,但是带来的问题是服务配置文件很麻烦,然后大家在群里进行了“亲切友好”的沟通图片图片图片图片对比就对比,简单对比下独立配置中心和k8s作为配
  • 如何正确使用:Has和:Nth-Last-Child

    如何正确使用:Has和:Nth-Last-Child

    我们可以用CSS检查,以了解一组元素的数量是否小于或等于一个数字。例如,一个拥有三个或更多子项的grid。你可能会想,为什么需要这样做呢?在某些情况下,一个组件或一个布局可能会
  • JavaScript学习 -AES加密算法

    JavaScript学习 -AES加密算法

    引言在当今数字化时代,前端应用程序扮演着重要角色,用户的敏感数据经常在前端进行加密和解密操作。然而,这样的操作在网络传输和存储中可能会受到恶意攻击的威胁。为了确保数据
  • 使用Webdriver-manager解决浏览器与驱动不匹配所带来自动化无法执行的问题

    使用Webdriver-manager解决浏览器与驱动不匹配所带来自动化无法执行的问题

    1、前言在我们使用 Selenium 进行 UI 自动化测试时,常常会因为浏览器驱动与浏览器版本不匹配,而导致自动化测试无法执行,需要手动去下载对应的驱动版本,并替换原有的驱动,可能还
  • 得物宠物生意「狂飙」,发力“它经济”

    得物宠物生意「狂飙」,发力“它经济”

    作者|花花小萌主近日,得物宣布正式上线宠物鉴别,通过得物App内的“在线鉴别”,可找到鉴别宠物的选项。通过上传自家宠物的部位细节,就能收获拥有专业资质认证的得物鉴
  • 小米汽车电池信息疑似曝光:容量101kWh,支持800V高压快充

    小米汽车电池信息疑似曝光:容量101kWh,支持800V高压快充

    7月14日消息,今日一名博主在社交媒体发布了一张疑似小米汽车电池信息的照片,显示该电池包正是宁德时代麒麟电池,容量为101kWh,电压为726.7V,可以预测小
  • iQOO 11S评测:行业唯一的200W标准版旗舰

    iQOO 11S评测:行业唯一的200W标准版旗舰

    【Techweb评测】去年底,iQOO推出了“电竞旗舰”iQOO 11系列,作为一款性能强机,该机不仅全球首发2K 144Hz E6全感屏,搭载了第二代骁龙8平台及144Hz电竞
  • 电博会上海尔智家模拟500平大平层,还原生活空间沉浸式体验

    电博会上海尔智家模拟500平大平层,还原生活空间沉浸式体验

    电博会为了更好地让参展观众真正感受到智能家居的绝妙之处,海尔智家的程传岭先生同样介绍了展会上海尔智家的模拟500平大平层,还原生活空间沉浸式体验。程传
Top