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

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

    关注

    3

    文章

    3911

    浏览量

    61313
  • for
    for
    +关注

    关注

    0

    文章

    44

    浏览量

    15514
  • python
    +关注

    关注

    51

    文章

    4678

    浏览量

    83477

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    [分享]PCB软件不为人知的技巧

     PCB布线软件的书籍和资料大家应该都看得不少了,网上有很多布线技巧的文章,大都是教人如何避免干扰,如何走地线等等,其实这些软件里面还有一个功能,也很好用的,只是绝大部分的书籍都没有介绍。这就是NetClass功能。  PCB文件首次加载网络表的时候,没有对其进行分类。这个功能可以人工将无数的网络连接分门别类,比如分成power、data_bus、Address_bus、Hi_volta等类别。这样分类后可以分别对不同的类别施加不同的布线策略。  好了,现在让我们尝试一下这个功能(以protel为例):  首先打开一个PCB图;选择菜单“Design-->Classes..”。  这里我已经预先定好了几个C,其中“AllNets”是protel默认的类别,这个类别包含了所有的网络。如果定义了布线规则,默认就是针对这个类别的。  现在我要为这个pcb增加一个表示CPU地址总线的类别“Address_bus”,按“Add”按键,选择“A0~A19”,然后选择“>”把这些网络放置到右边的子窗口中。这样就建立好了一个新的pcb网络类别。用同样的办法,再建立“power”、“data_bus”等网络类别。  好了,我们为这些网络类别分别指定布线策略吧,首先我们为电源类指定布线策略。按“Add”按键,增加一个策略。“FilterKind”选择“NetClass”,“NetClass”选择“POWER”,然后可以分别设定它的线宽等参数,你还可以为POWER类增加一个靠近限制的规则(由于我这个电路板是4层板,我这个工程就不设置靠近规则了)。  由于我的这个电路板是一个高速的嵌入式系统,CPU外部总线频率大约200MHz。所以地址总线和数据总线的设计就变得至  关重要。每个地址总线相互之间的长度差不能太长,否则会造成传输延迟。但是手工去测量长度差实在麻烦,这里就可以为地址总线设置一个布线规则。  在图6的布线规则窗口中,选择“LengthConstraint”,弹出窗口,选择“ADDRESS_BUS”类,可以设置总线最大长度和最小长度。  设置了以上规则后,无论是手动布线还是自动布线,都会简单很多。在手工布线和修整电路板的过程中,不用再考虑这些参数了,因为你犯规后,PCB编辑器会给出警告。通过这样的设置,你一次可以为一大把信号线设置规则,不再需要一个一个信号单独设置了。可以节约你不少的时间,也可以避免你很多不该犯的低级错误。龙芯世纪科技长期专注于软硬件设计开发与反向技术研究领域,业务广泛涉及各种大型应用系统开发、嵌入式开发平台、单片机及FPGA/CPLD开发;各种医疗设备、自动化控制设备、移动通信设备等高档设备维修与配件仿制开发;以及PCB抄板、PCB设计、芯片解密、芯片反向工程、SMT贴片加工、PCB样板与批量加工、功能样机的制作与调试、成品加工一条龙服务.网址:www.lrpcb.cn   龙芯世纪反向技术研究室---样机研制中心 电话(Tel):+86-0755-83757070,83003609,83690800,83676377,83346939,83003639,83662100,8367632383000991,83676393,25327575,25327151,25327150,83346919,83676369,8367639683346939,83690619,83757007,83000896,83676296,83346949 商务中心:深圳市福田区福虹路世界贸易广场B座12F 传真(Fax):+86-0755-83000896,83346949 SMT-OEM/ODM工厂:深圳市宝安区沙井镇壆岗村第一工业区 PCB制造工厂:深圳市宝安区西乡鹤州新海工业城 开发基地:深圳市宝安区西乡鹤州新海工业城
    发表于 03-24 15:36

    PCB软件不为人知的技巧

    发表于 02-15 08:21

    光耦 不为人知实用技巧

    本帖最后由 eehome 于 2013-1-5 09:48 编辑 光耦以光信号为媒介来实现电信号的耦合与传递,输入与输出在电气上完全隔离,具有抗干扰性能强的特点。对于既包括弱电控制部分,又包括强电控制部分的工业应用测控系统,采用光耦隔离可以很好地实现弱电和强电的隔离,达到抗干扰目的。但是,使用光耦隔离需要考虑以下几个问题:①光耦直接用于隔离传输模拟量时,要考虑光耦的非线性问题;②光耦隔离传输数字量时,要考虑光耦的响应速度问题;③如果输出有功率要求的话,还得考虑光耦的功率接口设计问题。
    发表于 12-07 12:11

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

    在做一个直流电源的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软件不为人知的技巧

    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 7277次阅读

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

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

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

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

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

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