51个Python鲜为人知的秘密特性,老司机看完都惊叹不已

python 两个一样的字符串用==结果为false问题的解决 有时候我们需要判断两个字符串内容是否相等,判断内容相等,我们用‘==’,但是有时候发现print(str1)和print(str2)眼看着一模一样,但是用==时却是false 可能会被这种问题莫名郁闷很久,其实问题有可能很简单,如果你的两个字符串末尾有其他符号,比如回车‘\n’,print()的时候是看不到回车符的,所以,用以下来判断: str1 = str1.strip() #去掉字符串中其他符号包括换行符等等 str2 = str2.strip() if str2 == str1: ... #自己的代码 ... 补充知识:python2和python3中关于不等于运算符的区别 P 立即下载

640?wx_fmt=png


Python真的很奇妙,目前是最火的语言。语法简单,功能强大,我学Python已经好多年了,从2.6的时代一直到现在的3.8,算算也是老鸟了。今天看了一个网站,上面讲了很多Python鲜为人知的特性,看完我也是大开眼界,不得不说,Python真实博大精深!


640?wx_fmt=png


1.Midnight time doesn't exist?/不存在的午夜


640?wx_fmt=png

>>


 
('Time at noon is', datetime.time(12, 0))



midnight_time 并没有被输出.在Python 3.5之前, 如果 datetime.time 对象存储的UTC的午夜时间(译: 就是 00:00), 那么它的布尔值会被认为是 False. 当使用 if obj: 语句来检查 obj 是否为 null 或者某些“空”值的时候, 很容易出错.



2.Time for some hash brownies!/是时候来点蛋糕了


640?wx_fmt=png

>>


 
>>> some_dict[5.5]"Ruby">>> some_dict[5.0]"Python">>> some_dict[5]"Python"
"Ruby"
>>> some_dict[5.0]
"Python"
>>> some_dict[5]
"Python"


运行完发现"Javascript" 消失了,原因是因为Python 字典通过检查键值是否相等和比较哈希值来确定两个键是否相同. 而Python中 5==5.0 ,所以字符串Javascript被Python取代了。



3.For what?/为什么?

640?wx_fmt=png


通过enumerate这个内置函数来迭代处理,大家猜猜some_dict输出是啥?

没错输出的是:{0: 'w', 1: 't', 2: 'f'}。 咋看一下确实很奇怪啊,我们来慢动作看一下:

640?wx_fmt=png

相当于是:

some_dict[0] = 'w'

some_dict[1] = 't'

some_dict[2] = 'f'


4.Strings can be tricky sometimes/微妙的字符串

640?wx_fmt=png

为啥这两个字符串的id值是一样的


640?wx_fmt=png

说明:
  • 这些行为是由于 Cpython 在编译优化时, 某些情况下会尝试使用已经存在的不可变对象而不是每次都创建一个新对象. (这种行为被称作字符串的驻留[string interning])

  • 发生驻留之后, 许多变量可能指向内存中的相同字符串对象. (从而节省内存)

  • 在上面的代码中, 字符串是隐式驻留的. 何时发生隐式驻留则取决于具体的实现. 这里有一些方法可以用来猜测字符串是否会被驻留:

    • 所有长度为 0 和长度为 1 的字符串都被驻留.

    • 字符串在编译时被实现 ('wtf' 将被驻留, 但是 ''.join(['w', 't', 'f'] 将不会被驻留)

    • 字符串中只包含字母,数字或下划线时将会驻留. 所以 'wtf!' 由于包含 ! 而未被驻留. 可以在这里找到 CPython 对此规则的实现.

5.From filled to None in one instruction.../从有到无...

640?wx_fmt=png


 
>>> print(some_list)None>>> print(some_dict)None
None
>>> print(some_dict)
None


为啥会这样,是不是很奇怪,some_list明明已经append了然后赋值给自己了为啥还是None呢。


大多数修改序列/映射对象的方法, 比如 list.append, dict.update, list.sort 等等. 都是原地修改对象并返回 None. 这样做的理由是, 如果操作可以原地完成, 就可以避免创建对象的副本来提高性能


6.A tic-tac-toe where X wins in the first attempt!/一蹴即至!

640?wx_fmt=png


第一个print我们输出的是:

[['', '', ''], ['', '', ''], ['', '', '']]

第二个print我们输出的是:

[['X', '', ''], ['X', '', ''], ['X', '', '']]

奇怪了,我们我们有没有赋值过3个 "X" 呢?

说明:

当我们初始化 row 变量时, 下面这张图展示了内存中的情况。

640?wx_fmt=png

而当通过对 row 做乘法来初始化 board 时, 内存中的情况则如下图所示 (每个元素 board[0], board[1] 和 board[2] 都和 row 一样引用了同一列表.)



我们可以看到其实这3个的内存空间是同一地址


 
print (id(board[0][0]))4514093072print (id(board[1][0]))4514093072print (id(board[2][0]))4514093072
4514093072
print (id(board[1][0]))
4514093072
print (id(board[2][0]))
4514093072


7.When True is actually False/假亦真时真亦假

640?wx_fmt=png


说明:

  • 最初, Python 并没有 bool 型 (人们用0表示假值, 用非零值比如1作为真值). 后来他们添加了 True, False, 和 bool型, 但是, 为了向后兼容, 他们没法把 True 和 False 设置为常量, 只是设置成了内置变量.

  • Python 3 由于不再需要向后兼容, 终于可以修复这个问题了, 所以这个例子无法在 Python 3.x 中执行!


8.让人困惑的else

640?wx_fmt=png

>>


 
>>> some_list = [1, 2, 3, 4, 5]>>> does_exists_num(some_list, 4)Exists!>>> does_exists_num(some_list, -1)Does not exist
>>> does_exists_num(some_list, 4)
Exists!
>>> does_exists_num(some_list, -1)
Does not exist

这个else还好理解,我们搜索some_list如果找到,则break 退出,如果找不到最后运行else里面的语句!


如果这样理解,那么下面的else就更难理解了!

640?wx_fmt=png

>>

Try block executed successfully...


说明:

  • 循环后的 else 子句只会在循环没有触发 break 语句, 正常结束的情况下才会执行.

  • try 之后的 else 子句也被称为 "完成子句", 因为在 try 语句中到达 else 子句意味着try块实际上已成功完成.





限于篇幅,Python有这么多隐含的技巧和特性,真的让多年的老司机都叹为观止。不过随着Python3.x版本的越来越问题,这些以前的梗慢慢的在优化,有兴趣的同学赶紧戳 阅读原文链接来看一下这51个特性。


往期热门:

99%的Python程序员都不知道的秘密

用30行代码|搭建一个提醒《权游》剧集系统



【创作赢红包】Gurobi学术版证书更新与Python环境配置全攻略 本文详细解析了Gurobi学术版证书过期后的完整更新流程与Python环境配置方法。从彻底清理旧版残留、手把手注册获取新许可证,到软件安装、证书激活,最后重点讲解如何将gurobipy接口正确配置到Python的site-packages目录,并提供了常见问题排查方案,帮助用户高效解决证书与配置难题。 阅读详情

相关推荐

C# 原生数字孪生的尝试

本文介绍了使用C#实现数字孪生的基本思路。首先从爱普生官网下载机器人3D模型,然后通过Blender创建并导出带动画的FBX模型。在WPF项目中,使用HelixToolkit.SharpDX等插件加载模型,通过Viewport3DX进行3D渲染。关键点是通过动画控制器接收真实设备信号来驱动模型动画,实现物理实体与虚拟模型的同步。文中提供了完整的代码实现,包括模型导入、动画播放控制等核心功能。该方法为构建数字孪生系统提供了一种可行的技术方案。

qq_33529095的博客 1333

Python:鲜为人知的功能特性(上)

GitHub 上有一个名为《What the f*ck Python!》的项目,这个有趣的项目意在收集 Python 中那些难以理解和反人类直觉的例子以及鲜为人知的功能特性,并尝试讨论这些现象背后真正的原理! 原版地址:https://github.com/satwikkansal/wtfpython 最近,一位名为“暮晨”的贡献者将其翻译成了中文。 中文版地址:https://github...

weixin_30721077的博客 323

为什么AI时代的优秀组织,都在学习Meta的Pod结构?看完秒懂

当AI技术重塑产业格局,企业协作正面临前所未有的挑战——层级繁琐、跨部门内耗、迭代滞后,传统组织模式早已难以跟上技术革新的步伐。作为全球AI原生企业的标杆,Meta独创的Pod组织模式,用“小而美”的自治单元打破困局,成为AI时代高效协作的典范。本文将从定义、运作、价值到未来演进,全面拆解Pod模式,为企业组织变革提供可参考的思路与路径。德鲁克曾说:“组织的功能就是让平凡的人做平凡的事。”而Meta Pod打破这一局限,通过去中心化、指标导向、跨界融合,让优秀人才产生“化学反应”。

Kiss_AIHR的博客 1175

用`visibilitychange`事件实现吸睛的十八禁

18禁我知道你们都是看这图进来的,但是这个图跟下面的内容没有必然联系。 前不久在网上找资料的时候突然发现某个页面的 title 是啥※18♥禁★电影【在线观看】☆...,突然就心头一紧,是哪个页面咋还自动弹广告页,还是新标签页面打开的。当时我的表情就是这样。 怀着就像你们看我题图就点进来的心情点开了那个页面,耶,正常的内容啊!刚刚那个18禁呢?! 冷静了一下,就想这是个trick啊,然后我就自己...

weixin_34378969的博客 2万+

算法之动态规划(DP)求解完全背包问题

算法之动态规划(DP)求解01背包问题 上面这篇文章主要讲解了01背包问题和动态规划算法,如果你不了解动态规划算法,建议先浏览一下这篇文章熟悉一下,因为,本文的算法思想是基于这篇文章的。 1、什么是完全背包问题? **01背包问题:**有一个背包的容积为V,有N个物品,每个物品的体积为v[i],权重为w[i],每个物品只能取1次放入背包中,背包所有物品权重和最大是多少? 完全背包: 有一个背包的容积为V,有N个物品,每个物品的体积为v[i],权重为w[i],每个物品可以取无限次放入背包中,背包所有物品权重和

PRML_MAN的博客 2万+

数字后端设计实现 | 数字后端PR工具Innovus中如何创建不同高度的row?

数字IC后端设计实现之innovus中如何创建不同高度的row?

weixin_37584728的博客 3163

四个福利性在线网站分享,每一个都让你欲罢不能……

随着社会的不断发展,我们网络上的一些资源就像雨后春笋一般的拔地而起,许多东西我们的来不及上车就被新的事物给掩盖了,但是对于一些好用的网站来说是真的很不错,小编今天就和你们分享一些最具福利性的在线网站! 你们准备好了吗?老司机准备发车了: 一.TinEye.com—图片搜索引擎 如果你的电脑或者你的手机里有一张不知道哪里来的图片,你想要将图片的源地址给找出来该怎么做?一般的时候我们都是束手无策,但是有了这个网站就不一样,可以图片上传带上去进行查找...

weixin_43363835的博客 430万+

《FPGA DDR3权威实战:从基础到高速故障录波系统》专栏导览:从不知所措到心中有数

本文是一份DDR3实战指南,作者从自身学习经历出发,分享了一套循序渐进的DDR3应用路线图。专栏包含12篇文章,从基础配置(MIG IP核、AXI总线)、仿真测试到实际项目应用(功能测试、性能测试),最后深入原生MIG接口实战,通过一个高速故障录播系统案例完整展示DDR3开发流程。文章特别强调实践性,旨在帮助读者系统掌握DDR3开发技能,避免作者当年踩过的坑。每篇都配有优快云链接,适合FPGA开发者按顺序学习参考。

FPGA_小田老师的博客 331

福利应用更新,这几款都是老司机喜欢的

iOS应用更新微X纯净更新到7.0.17漫漫lu。ltu短视频。点击下方获取下载地址获取地址后,我们去safari浏览器粘贴访问就行了! ...

qq_34718767的博客 3万+

华为OD机试 C++【TLV解析】

这里的valueOffset指的是value在整串消息里的起始位置(从0开始数)。这表示tag是15(十六进制的0F),length是4,接着的8个字符是value的内容。你收到了一串由两端设备传递的TLV格式的消息,现在你需要根据这串消息生成一个对应的(tag, length, valueOffset)列表。tag是15,对应的数据长度为4,value从第3个字节开始,所以偏移量为2。第二行:一个数字n,表示我们给出的tag的数量(0 < n < 1000)。第一行:一串消息,长度不超过10000。

wtswts1232的博客 482

手把手教你学Simulink——机器人力控场景实例:基于Simulink的永磁同步电机重力补偿力矩控制仿真

本文介绍了基于Simulink的机器人重力补偿力矩控制仿真方法。针对机器人悬停时电机发热、抖动等问题,提出通过前馈补偿重力转矩的解决方案。文章详细阐述了从机器人动力学建模、重力补偿计算、PMSM转矩控制到系统集成的完整实现流程,并以2-DOF机械臂为例验证了补偿效果。结果表明,重力补偿能显著降低电机电流和拖拽力,提高系统柔顺性。文中还提供了高级功能扩展方向,如参数辨识、摩擦补偿等,为实际工程应用提供了参考框架。

MHD0815的博客 154

危机之下,凸显优秀团队本色

懵懵懂懂带着团队有了一段时间了,一直惶恐是否做的足够好,不负团队小伙伴的信任,《危机领导力》就像一道闪电,直击此时此刻我的灵魂,脑海里翻滚着这些日子和大家一起的经历,有不少共鸣,特别想边...

weixin_40768973的博客 789

《QGIS空间数据处理与高级制图》【目录】

《QGIS空间数据处理与高级制图》是一本面向GIS技术人员和学生的进阶手册,重点提升数据处理效率和专业制图标准化水平。全书涵盖空间数据预处理、矢量编辑、栅格处理、坐标系统应用和符号化设计等核心内容。书中详细介绍了批量数据转换、拓扑检查、遥感影像处理、自定义坐标系创建等实用技能,并提供了模型构建器和PyQGIS脚本实现自动化操作。通过大量实战案例和问题排查指南,帮助读者从基础使用进阶到专业应用,适合测绘、规划、环保等行业的GIS从业者参考使用。

LuckyHanMo的博客 374

python明明两个一样的一句话为什么会不相等_51个Python鲜为人知的秘密特性,老司机看完都惊叹不已...

Python真的很奇妙,目前是最火的语言。语法简单,功能强大,我学Python已经好多年了,从2.6的时代一直到现在的3.8,算算也是老鸟了。今天看了一个网站,上面讲了很多Python鲜为人知的特性,看完我也是大开眼界,不得不说,Python真实博大精深!1.Midnight time doesn't exist?/不存在的午夜>>('Time at noon is', da...

weixin_39954889的博客 401

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Python 的 51 个秘密曝光,Github 获 2 万星

来源 | 数据分析1480Python, 是一个设计优美的解释型高级语言, 它提供了很多能让程序员感到舒适的功能特性. 但有的时候, Python 的一些输出结果对于初学...

R语言中文社区 1701

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Python 的 51 个秘密曝光,Github 获 20000 star

python, 是一个设计优美的解释型高级语言, 它提供了很多能让程序员感到舒适的功能特性. 但有的时候, Python 的一些输出结果对于初学者来说似乎并不是那么一目了然. 一个解析51项堪称是"秘密"的Python特性项目,在GitHub上彻底火了。 英文原版已经拿到了近15000星,中文翻译版也获得了7600+星。 这个有趣的项目意在收集 Python 中那些难以理解和反人类直觉的例子以及鲜为人知的功能特性, 并尝试讨论这些现象背后真正的原理! 虽然下面的有些...

python588的博客 223

Python的51个“秘密”被曝光,GitHub获2万星

Python,是一个设计优美的解释型高级语言,它提供了很多能让程序员感到舒适的功能特性。 但有的时候,Python一些特性导致的输出结果,对于初学者就很难理解了。 一个解析51项堪称是“秘密”的Python特性项目,在GitHub上彻底火了。 英文原版已经拿到了近15000星,中文翻译版也获得了7500+星。 项目中的部分内容,也许你听说过,但依然可能会透露一些你所不知道的Py...

333

Python的“秘密”被曝光,GitHub斩获20000星

Python,是一个设计优美的解释型高级语言,它提供了很多能让程序员感到舒适的功能特性。 但有的时候,Python一些特性导致的输出结果,对于初学者就很难理解了。 一个解析51...

233

牛逼了,用Python破解wifi密码

Python真的是无所不能,原因就是因为Python有数目庞大的库,无数的现成的轮子,让你做很多很多应用都非常方便。wifi跟我们的生活息息相关,无处不在。今天从WiFi...

cainiao_python的博客 2万+

零基础python必背代码-编程零基础应当如何开始学习 Python?

学Python,最高效的方法其实就是自学+自问+实战(海伦泰勒学习法的精简版)。本文分为3大板块,不仅要帮你0基础入门,还专门写了进阶内容。进阶内容中这51个Python的秘密,你可不一定知道。并且免费课程处会带大家一起做实战项目,还有前BAT高级技术专家+名校硕博级讲师和助教团队进行答疑。一、基础入门:用140+页把Python各种知识点图文化文字化,用大家都听得懂的话,彻底给讲明白。1.Pyt...

weixin_37988176的博客 579
上一篇: 小密圈的趣味实战-微信主题
下一篇: 推荐一位大佬,在腾讯工作十年
菜鸟学Python
博客等级 码龄9年 8063粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值