0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

談?wù)凱ython那些不為人知的冷知識

電子工程師 ? 來源:lp ? 2019-04-22 13:40 ? 次閱讀

for 死循環(huán)

for 循環(huán)可以說是 基礎(chǔ)得不能再基礎(chǔ)的知識點(diǎn)了。但是如果讓你用 for 寫一個(gè)死循環(huán),你會寫嗎?

這是個(gè)開放性的問題,在往下看之前,建議你先嘗試自己思考,你會如何解答。

好了,如果你還沒有思路,那就來看一下 一個(gè)海外 MIT 群友的回答:

foriiniter(int,1):pass

是不是懵逼了。iter 還有這種用法?這為啥是個(gè)死循環(huán)?

這真的是個(gè)冷知識,關(guān)于這個(gè)知識點(diǎn),你如果看中文網(wǎng)站,可能找不到相關(guān)資料。

還好你可以通過 IDE 看 py 源碼里的注釋內(nèi)容,介紹了很詳細(xì)的使用方法。

原來iter有兩種使用方法,通常我們的認(rèn)知是第一種,將一個(gè)列表轉(zhuǎn)化為一個(gè)迭代器。

而第二種方法,他接收一個(gè) callable 對象,和一個(gè)sentinel 參數(shù)。第一個(gè)對象會一直運(yùn)行,直到它返回 sentinel 值才結(jié)束。

那int呢,這又是一個(gè)知識點(diǎn),int 是一個(gè)內(nèi)建方法。通過看注釋,可以看出它是有默認(rèn)值0的。你可以在終端上輸入int() 看看是不是返回0。

由于int() 永遠(yuǎn)返回0,永遠(yuǎn)返回不了1,所以這個(gè) for 循環(huán)會沒有終點(diǎn)。一直運(yùn)行下去。

奇怪的字符串

示例一

#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 里面是正常執(zhí)行還是報(bào)異常,最終都能保證finally能夠執(zhí)行。

同時(shí),我們又知道,一個(gè)函數(shù)里只要遇到 return 函數(shù)就會立馬結(jié)束。

基于以上這兩點(diǎn),我們來看看這個(gè)例子,到底運(yùn)行過程是怎么樣的?

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

驚奇的發(fā)現(xiàn),在try里的return居然不起作用。

原因是,在try…finally…語句中,try中的return會被直接忽視,因?yàn)橐WCfinally能夠執(zhí)行。

小整數(shù)池

先看例子。

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

為避免整數(shù)頻繁申請和銷毀內(nèi)存空間,Python 定義了一個(gè)小整數(shù)池 [-5, 256] 這些整數(shù)對象是提前建立好的,不會被垃圾回收。

以上代碼請?jiān)?終端Python環(huán)境下測試,如果你是在IDE中測試,并不是這樣的效果。

那最后一個(gè)示例,為啥又是True?

因?yàn)楫?dāng)你在同一行里,同時(shí)給兩個(gè)變量賦同一值時(shí),解釋器知道這個(gè)對象已經(jīng)生成,那么它就會引用到同一個(gè)對象。如果分成兩成的話,解釋器并不知道這個(gè)對象已經(jīng)存在了,就會重新申請內(nèi)存存放這個(gè)對象。

intern機(jī)制

字符串類型作為 Python 中最常用的數(shù)據(jù)類型之一,Python解釋器為了提高字符串使用的效率和使用性能,做了很多優(yōu)化。

例如:Python 解釋器中使用了 intern(字符串駐留)的技術(shù)來提高字符串效率。

什么是 intern 機(jī)制?就是同樣的字符串對象僅僅會保存一份,放在一個(gè)字符串儲蓄池中,是共用的,當(dāng)然,肯定不能改變,這也決定了字符串必須是不可變對象。

>>>s1="hello">>>s2="hello">>>s1iss2True#如果有空格,默認(rèn)不啟用intern機(jī)制>>>s1="hello">>>s2="hello">>>s1iss2False#如果一個(gè)字符串長度超過20個(gè)字符,不啟動intern機(jī)制>>>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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4332

    瀏覽量

    62666
  • for
    for
    +關(guān)注

    關(guān)注

    0

    文章

    44

    瀏覽量

    15825
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4797

    瀏覽量

    84727

原文標(biāo)題:for死循環(huán)、怪異字符串、兩次return……Python冷知識(三)

文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

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

    各種媒體把 5G描繪的天花亂墜,仿佛到了5G時(shí)代,我們可以享受到前所未有的互聯(lián)網(wǎng)體驗(yàn)。但是情況果真如此么?5G的背后又有哪些不為人知的秘密呢?##5G時(shí)代人人都能享受高速率嗎?
    發(fā)表于 12-12 10:06 ?1816次閱讀

    關(guān)于串口通信那些不為人知的秘密

    在做一個(gè)直流電源的RS232通信,采用軟握手方式等,但是串口無法實(shí)現(xiàn)通訊,嘗試了各種辦法,求解
    發(fā)表于 12-19 14:47

    AltiumDesigner不為人知的27個(gè)技巧

    AltiumDesigner使用過程中相當(dāng)方便的技巧希望對你們有幫助
    發(fā)表于 03-06 18:28

    Android系統(tǒng)六個(gè)不為人知的故事

    Android是世界上最大的移動操作系統(tǒng),但是它還是有許多不為人知的故事不被大家所了解?,F(xiàn)在,就讓我們一起來看看那些普通人不知道、或者關(guān)于Android被隱藏起來的消息?;蛟S每天伴隨在你左右的Android
    發(fā)表于 06-12 11:31

    手機(jī)上的那些不為人知的傳感器

      現(xiàn)在的手機(jī)越來越多功能,尤其是移動互聯(lián)網(wǎng)的發(fā)展,使手機(jī)的進(jìn)步更是迅速。人們對手機(jī)的要求已經(jīng)不局限于以往的電話和短信了,我們對手機(jī)在功能上的要求也越來越多?,F(xiàn)在的手機(jī)為了實(shí)現(xiàn)不同的功能,要裝置很多傳感器,而這些傳感器各自又是怎么工作的呢?本文就對手機(jī)上各種的傳感器進(jìn)行介紹以及進(jìn)行相關(guān)功能的演示。  以下是三星Galaxy Note II的工程模式中的傳感器測試,我們按照這里的順序介紹一下手機(jī)里面的各種傳感器?! 〖铀賯鞲衅鳎ㄖ亓Ω袘?yīng))  加速度傳感器是一種能夠測量加速度的電子設(shè)備。在手機(jī)中,加速傳感器可以監(jiān)測手機(jī)受到的加速度的大小和方向。加速傳感器原理:運(yùn)用壓電效應(yīng)實(shí)現(xiàn),一片“重力塊”和壓電晶體做成一個(gè)重力感應(yīng)模塊,手機(jī)方向改變時(shí),重力塊作用于不同方向的壓電晶體上的力也隨之改變,輸出電壓信號不同,從而判斷手機(jī)的方向。重力感應(yīng)常用于自動旋轉(zhuǎn)屏幕以及一些游戲,但是它本身局限性比較大,因?yàn)樗歉鶕?jù)重力判斷方向,通過感應(yīng)重力正交兩個(gè)方向的分力大小,來判斷水平方向?! 【嚯x感應(yīng)器  距離感應(yīng)是通過發(fā)出紅外光,當(dāng)物體靠近時(shí),返回的紅外光會被元件監(jiān)測到,這時(shí)就可以判斷物體靠近的距離。距離感應(yīng)一般用在接通電話以后的自動關(guān)閉屏幕,現(xiàn)在大部分觸屏手機(jī)都會具有這個(gè)功能,網(wǎng)上盛傳的“大臉不要用觸屏手機(jī)”顯然是不靠譜的。另外,部分手機(jī)膜會遮擋距離感應(yīng)器,影響工作,因此要特別注意。氣壓傳感器  氣壓傳感器筆者在此前已經(jīng)有過相關(guān)的實(shí)測了。氣壓傳感器的工作是通過一個(gè)對壓強(qiáng)很敏感的薄膜元件工作,薄膜連接了一個(gè)柔性電阻,當(dāng)大氣壓變化時(shí)候,就會導(dǎo)致電阻阻值產(chǎn)生變化。氣壓傳感器的作用主要用于檢測大氣壓、當(dāng)前高度以及輔助GPS定位?! 」饩€感應(yīng)器  光線感應(yīng)器由投光器和受光器組成,投光器將光線聚焦,在傳輸至受光器,最后通過感應(yīng)器接收變成電器信號。光線感應(yīng)的用途是可以根據(jù)周圍環(huán)境光線調(diào)節(jié)手機(jī)屏幕本身的亮度?! ∪S陀螺儀  關(guān)于三軸陀螺儀,筆者此前也有相應(yīng)的介紹。它是一種用于測量角度以及維持方向的設(shè)備,原理是基于角動量守恒原理。我們來看看陀螺儀的動態(tài)原理圖,中間金色的那個(gè)轉(zhuǎn)子則是我們的“陀螺”,它因?yàn)閼T性作用是不會受到影響的,而周邊三個(gè)“鋼圈”則會因?yàn)樵O(shè)備改變姿態(tài)而跟著改變,通過這樣來檢測設(shè)備當(dāng)前的狀態(tài)。而這三個(gè)“鋼圈”所在的軸,也就是我們?nèi)S陀螺儀里面的“三軸”即X軸、Y軸、Z軸。三個(gè)軸圍成的立體空間聯(lián)合檢測手機(jī)的各種動作,陀螺儀最主要的作用在于它可以測量角速度?! 〈帕τ?jì)(電子羅盤)  電子羅盤利用磁阻傳感器測量平面地磁場,以檢測出磁場強(qiáng)度以及方向。它和我們常見的指南針比較類似,主要作用是電子指南針、幫助GPS定位等。
    發(fā)表于 11-07 15:53

    經(jīng)典詳述PCB軟件那些不為人知的技巧

    發(fā)表于 07-29 08:15 ?0次下載

    PCB軟件不為人知的技巧

    PCB軟件不為人知的技巧,該技巧鮮為人知。
    發(fā)表于 08-29 14:22 ?17次下載

    示波器可能不為人知的十二般武藝

    電路教程相關(guān)知識的資料,關(guān)于示波器可能不為人知的十二般武藝
    發(fā)表于 10-10 14:34 ?0次下載

    iPhone不為人知的小技巧,iOS10這樣用才最好用!

    雖然現(xiàn)在很多的蘋果手機(jī)都已經(jīng)更新到了iOS10,但是從反饋來看,不同的機(jī)型體驗(yàn)都是不一樣的,有的好,有的壞。下面我就來告訴大家一些iPhone 不為人知的小技巧和iOS 10的正確使用方法。
    發(fā)表于 12-19 14:16 ?1.7w次閱讀

    揭秘北京現(xiàn)代第三工廠那些不為人知的“秘密”

    隨著全新悅動的售價(jià)公布時(shí)間越來越近,它的關(guān)注度也節(jié)節(jié)攀升,然而銷量之外的一個(gè)重要點(diǎn)就在于年產(chǎn)量的把控,北京現(xiàn)代在產(chǎn)能儲備上一定是有備而來,下面就來隨編輯一起探訪北京現(xiàn)代第三工廠那些不為人知的“秘密”吧。
    的頭像 發(fā)表于 06-21 15:56 ?7544次閱讀

    探索諾基亞那些不為人知的秘密!

    很多人都以為,諾基亞已不復(fù)存在,但是,事實(shí)并非如此。諾基亞不僅沒有倒閉,還悄無聲息地成為了世界第二大通信設(shè)備商。
    的頭像 發(fā)表于 08-15 16:59 ?4973次閱讀

    華為Mate20X那些不為人知的秘密

    的每一款產(chǎn)品都注定不凡。之前或許被Pro系列奪取了不少目光,而這一次我們將注意力放在Mate20 X上,與華為Mate20 X的產(chǎn)品經(jīng)理和研發(fā)工程師們(以下相關(guān)工作人員以代稱)一起聊聊這部里面那些不為人知的秘密。
    的頭像 發(fā)表于 01-11 10:21 ?6.8w次閱讀

    不為人知的AI簡史:人機(jī)共生夢想家,卻意外促成互聯(lián)網(wǎng)的出現(xiàn)

    不為人知的AI簡史:人機(jī)共生夢想家,卻意外促成互聯(lián)網(wǎng)的出現(xiàn),Licklider并不認(rèn)同機(jī)器智能的概念。對他來說,問題在于:現(xiàn)有的范式認(rèn)為人類和機(jī)器在智力上是等同的。而Licklider認(rèn)為,事實(shí)上
    發(fā)表于 07-03 11:04 ?601次閱讀

    Python不為人知的機(jī)器學(xué)習(xí)軟件包

    ,Seaborne,Scikit-Learn,Tensorflow和Pytorch等等。它們都很好,還有數(shù)百萬個(gè)用于Python機(jī)器學(xué)習(xí)的軟件包,其中有些未受到重視,甚至有些完全不為人知的!
    的頭像 發(fā)表于 07-05 10:22 ?2060次閱讀

    高智能多參數(shù)土壤肥料養(yǎng)分檢測儀不為人知的優(yōu)點(diǎn)?

    高智能多參數(shù)土壤肥料養(yǎng)分檢測儀不為人知的優(yōu)點(diǎn)? Advantages of high intelligent multi parameter soil fertilizer nutrient
    的頭像 發(fā)表于 03-09 18:04 ?506次閱讀
    高智能多參數(shù)土壤肥料養(yǎng)分檢測儀<b class='flag-5'>不為人知</b>的優(yōu)點(diǎn)?