1 谈谈Python那些不为人知的冷知识-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

谈谈Python那些不为人知的冷知识

电子工程师 来源:lp 2019-04-22 13:40 次阅读

for 死循环

for 循环可以说是 基础得不能再基础的知识点了。但是如果让你用 for 写一个死循环,你会写吗?

这是个开放性的问题,在往下看之前,建议你先尝试自己思考,你会如何解答。

好了,如果你还没有思路,那就来看一下 一个海外 MIT 群友的回答:

foriiniter(int,1):pass

是不是懵逼了。iter 还有这种用法?这为啥是个死循环?

这真的是个冷知识,关于这个知识点,你如果看中文网站,可能找不到相关资料

还好你可以通过 IDE 看 py 源码里的注释内容,介绍了很详细的使用方法。

原来iter有两种使用方法,通常我们的认知是第一种,将一个列表转化为一个迭代器。

而第二种方法,他接收一个 callable 对象,和一个sentinel 参数。第一个对象会一直运行,直到它返回 sentinel 值才结束。

那int呢,这又是一个知识点,int 是一个内建方法。通过看注释,可以看出它是有默认值0的。你可以在终端上输入int() 看看是不是返回0。

由于int() 永远返回0,永远返回不了1,所以这个 for 循环会没有终点。一直运行下去。

奇怪的字符串

示例一

#Python2.7>>>a="Hello_Python">>>id(a)32045616>>>id("Hello"+"_"+"Python")32045616#Python3.7>>>a="Hello_Python">>>id(a)38764272>>>id("Hello"+"_"+"Python")32045616

示例二

>>>a="MING">>>b="MING">>>aisbTrue#Python2.7>>>a,b="MING!","MING!">>>aisbTrue#Python3.7>>>a,b="MING!","MING!">>>aisbFalse

示例三

#Python2.7>>>'a'*20is'aaaaaaaaaaaaaaaaaaaa'True>>>'a'*21is'aaaaaaaaaaaaaaaaaaaaa'False#Python3.7>>>'a'*20is'aaaaaaaaaaaaaaaaaaaa'True>>>'a'*21is'aaaaaaaaaaaaaaaaaaaaa'True

两次return

我们都知道,try…finally… 语句的用法,不管 try 里面是正常执行还是报异常,最终都能保证finally能够执行。

同时,我们又知道,一个函数里只要遇到 return 函数就会立马结束。

基于以上这两点,我们来看看这个例子,到底运行过程是怎么样的?

>>>deffunc():...try:...return'try'...finally:...return'finally'...>>>func()'finally'

惊奇的发现,在try里的return居然不起作用。

原因是,在try…finally…语句中,try中的return会被直接忽视,因为要保证finally能够执行。

小整数池

先看例子。

>>>a=-6>>>b=-6>>>aisbFalse>>>a=256>>>b=256>>>aisbTrue>>>a=257>>>b=257>>>aisbFalse>>>a=257;b=257>>>aisbTrue

为避免整数频繁申请和销毁内存空间,Python 定义了一个小整数池 [-5, 256] 这些整数对象是提前建立好的,不会被垃圾回收。

以上代码请在 终端Python环境下测试,如果你是在IDE中测试,并不是这样的效果。

那最后一个示例,为啥又是True?

因为当你在同一行里,同时给两个变量赋同一值时,解释器知道这个对象已经生成,那么它就会引用到同一个对象。如果分成两成的话,解释器并不知道这个对象已经存在了,就会重新申请内存存放这个对象。

intern机制

字符串类型作为 Python 中最常用的数据类型之一,Python解释器为了提高字符串使用的效率和使用性能,做了很多优化。

例如:Python 解释器中使用了 intern(字符串驻留)的技术来提高字符串效率。

什么是 intern 机制?就是同样的字符串对象仅仅会保存一份,放在一个字符串储蓄池中,是共用的,当然,肯定不能改变,这也决定了字符串必须是不可变对象。

>>>s1="hello">>>s2="hello">>>s1iss2True#如果有空格,默认不启用intern机制>>>s1="hello">>>s2="hello">>>s1iss2False#如果一个字符串长度超过20个字符,不启动intern机制>>>s1="a"*20>>>s2="a"*20>>>s1iss2True>>>s1="a"*21>>>s2="a"*21>>>s1iss2False>>>s1="ab"*10>>>s2="ab"*10>>>s1iss2True>>>s1="ab"*11>>>s2="ab"*11>>>s1iss2False

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4327

    浏览量

    62569
  • for
    for
    +关注

    关注

    0

    文章

    44

    浏览量

    15811
  • python
    +关注

    关注

    56

    文章

    4792

    浏览量

    84624

原文标题:for死循环、怪异字符串、两次return……Python冷知识(三)

文章出处:【微信号:rgznai100,微信公众号:rgznai100】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    5G背后那些不为人知的事

    各种媒体把 5G描绘的天花乱坠,仿佛到了5G时代,我们可以享受到前所未有的互联网体验。但是情况果真如此么?5G的背后又有哪些不为人知的秘密呢?##5G时代人人都能享受高速率吗?
    发表于 12-12 10:06 1809次阅读

    关于串口通信那些不为人知的秘密

    在做一个直流电源的RS232通信,采用软握手方式等,但是串口无法实现通讯,尝试了各种办法,求解
    发表于 12-19 14:47

    AltiumDesigner不为人知的27个技巧

    AltiumDesigner使用过程中相当方便的技巧希望对你们有帮助
    发表于 03-06 18:28

    Android系统六个不为人知的故事

    Android是世界上最大的移动操作系统,但是它还是有许多不为人知的故事不被大家所了解。现在,就让我们一起来看看那些普通人不知道、或者关于Android被隐藏起来的消息。或许每天伴随在你左右的Android
    发表于 06-12 11:31

    手机上的那些不为人知的传感器

      现在的手机越来越多功能,尤其是移动互联网的发展,使手机的进步更是迅速。人们对手机的要求已经不局限于以往的电话和短信了,我们对手机在功能上的要求也越来越多。现在的手机为了实现不同的功能,要装置很多传感器,而这些传感器各自又是怎么工作的呢?本文就对手机上各种的传感器进行介绍以及进行相关功能的演示。  以下是三星Galaxy Note II的工程模式中的传感器测试,我们按照这里的顺序介绍一下手机里面的各种传感器。  加速传感器(重力感应)  加速度传感器是一种能够测量加速度的电子设备。在手机中,加速传感器可以监测手机受到的加速度的大小和方向。加速传感器原理:运用压电效应实现,一片“重力块”和压电晶体做成一个重力感应模块,手机方向改变时,重力块作用于不同方向的压电晶体上的力也随之改变,输出电压信号不同,从而判断手机的方向。重力感应常用于自动旋转屏幕以及一些游戏,但是它本身局限性比较大,因为他是根据重力判断方向,通过感应重力正交两个方向的分力大小,来判断水平方向。  距离感应器  距离感应是通过发出红外光,当物体靠近时,返回的红外光会被元件监测到,这时就可以判断物体靠近的距离。距离感应一般用在接通电话以后的自动关闭屏幕,现在大部分触屏手机都会具有这个功能,网上盛传的“大脸不要用触屏手机”显然是不靠谱的。另外,部分手机膜会遮挡距离感应器,影响工作,因此要特别注意。气压传感器  气压传感器笔者在此前已经有过相关的实测了。气压传感器的工作是通过一个对压强很敏感的薄膜元件工作,薄膜连接了一个柔性电阻,当大气压变化时候,就会导致电阻阻值产生变化。气压传感器的作用主要用于检测大气压、当前高度以及辅助GPS定位。  光线感应器  光线感应器由投光器和受光器组成,投光器将光线聚焦,在传输至受光器,最后通过感应器接收变成电器信号。光线感应的用途是可以根据周围环境光线调节手机屏幕本身的亮度。  三轴陀螺仪  关于三轴陀螺仪,笔者此前也有相应的介绍。它是一种用于测量角度以及维持方向的设备,原理是基于角动量守恒原理。我们来看看陀螺仪的动态原理图,中间金色的那个转子则是我们的“陀螺”,它因为惯性作用是不会受到影响的,而周边三个“钢圈”则会因为设备改变姿态而跟着改变,通过这样来检测设备当前的状态。而这三个“钢圈”所在的轴,也就是我们三轴陀螺仪里面的“三轴”即X轴、Y轴、Z轴。三个轴围成的立体空间联合检测手机的各种动作,陀螺仪最主要的作用在于它可以测量角速度。  磁力计(电子罗盘)  电子罗盘利用磁阻传感器测量平面地磁场,以检测出磁场强度以及方向。它和我们常见的指南针比较类似,主要作用是电子指南针、帮助GPS定位等。
    发表于 11-07 15:53

    经典详述PCB软件那些不为人知的技巧

    发表于 07-29 08:15 0次下载

    PCB软件不为人知的技巧

    PCB软件不为人知的技巧,该技巧鲜为人知
    发表于 08-29 14:22 17次下载

    示波器可能不为人知的十二般武艺

    电路教程相关知识的资料,关于示波器可能不为人知的十二般武艺
    发表于 10-10 14:34 0次下载

    iPhone不为人知的小技巧,iOS10这样用才最好用!

    虽然现在很多的苹果手机都已经更新到了iOS10,但是从反馈来看,不同的机型体验都是不一样的,有的好,有的坏。下面我就来告诉大家一些iPhone 不为人知的小技巧和iOS 10的正确使用方法。
    发表于 12-19 14:16 1.7w次阅读

    揭秘北京现代第三工厂那些不为人知的“秘密”

    随着全新悦动的售价公布时间越来越近,它的关注度也节节攀升,然而销量之外的一个重要点就在于年产量的把控,北京现代在产能储备上一定是有备而来,下面就来随编辑一起探访北京现代第三工厂那些不为人知的“秘密”吧。
    的头像 发表于 06-21 15:56 7530次阅读

    探索诺基亚那些不为人知的秘密!

    很多人都以为,诺基亚已不复存在,但是,事实并非如此。诺基亚不仅没有倒闭,还悄无声息地成为了世界第二大通信设备商。
    的头像 发表于 08-15 16:59 4961次阅读

    华为Mate20X那些不为人知的秘密

    的每一款产品都注定不凡。之前或许被Pro系列夺取了不少目光,而这一次我们将注意力放在Mate20 X上,与华为Mate20 X的产品经理和研发工程师们(以下相关工作人员以代称)一起聊聊这部里面那些不为人知的秘密。
    的头像 发表于 01-11 10:21 6.8w次阅读

    不为人知的AI简史:人机共生梦想家,却意外促成互联网的出现

    不为人知的AI简史:人机共生梦想家,却意外促成互联网的出现,Licklider并不认同机器智能的概念。对他来说,问题在于:现有的范式认为人类和机器在智力上是等同的。而Licklider认为,事实上
    发表于 07-03 11:04 594次阅读

    Python不为人知的机器学习软件包

    ,Seaborne,Scikit-Learn,Tensorflow和Pytorch等等。它们都很好,还有数百万个用于Python机器学习的软件包,其中有些未受到重视,甚至有些完全不为人知的!
    的头像 发表于 07-05 10:22 2043次阅读

    高智能多参数土壤肥料养分检测仪不为人知的优点?

    高智能多参数土壤肥料养分检测仪不为人知的优点? Advantages of high intelligent multi parameter soil fertilizer nutrient
    的头像 发表于 03-09 18:04 496次阅读
    高智能多参数土壤肥料养分检测仪<b class='flag-5'>不为人知</b>的优点?