欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python新手們?nèi)菀追傅膸讉€(gè)錯(cuò)誤總結(jié)

 更新時(shí)間:2017年04月01日 09:25:55   作者:菜鳥學(xué)Python  
python語言里面有一些小的坑,特別容易弄混弄錯(cuò),初學(xué)者若不注意的話,很容易坑進(jìn)去,下面我給大家深入解析一些這幾個(gè)坑,希望對初學(xué)者有所幫助,需要的朋友可以參考學(xué)習(xí),下面來一起看看吧。

前言

這篇文章主要給大家總結(jié)了關(guān)于學(xué)習(xí)Python的新手們?nèi)菀追傅膸讉€(gè)錯(cuò)誤,一共四個(gè)易犯錯(cuò)誤,下面來看看詳細(xì)的介紹吧。

一、i+=1 不等于++i

初學(xué)者對Python語言不是特別了解的話,又正好有c++,java的語言背景,很容易把++i和i+=1弄混

先來看一個(gè)小例子:

i=0
mylist=[1,2,3,4,5,6]
while i <len(mylist):
 print(mylist[i])
 ++i

這段代碼會想當(dāng)然的認(rèn)為,沒有啥問題啊,一個(gè)循環(huán)輸出,i不斷的+1,蠻對的呀.其實(shí)不是的,這個(gè)代碼會一直輸出1,一個(gè)死循環(huán).因?yàn)镻ython的解釋器會將++i操作為+(+i) .其中+表示是正數(shù)符號,對于--i也是類似的.

print(+1)
>>>1
print(++1)
>>>1
print(+++1)
>>>1

這下明白了++i雖然在Python語法是合法的,但是并不是我們理解的自增的操作.

二、分清楚==和is的用法

在判斷字符串是否相等的時(shí)候,初學(xué)者特別會弄混is和==,這樣的結(jié)果是程序在不同的情況下表現(xiàn)不同:

比如先看一個(gè)簡單的例子:

a='Hi'
b='Hi'
print(a is b)
>>>True
print(a==b)
>>>True #看起來is和==好像是一樣的

我們再看第二個(gè)例子:

str1='Wo shi yi ge chi huo'
str2='Wo shi yi ge chi huo'
print(str1 is str2)
>>>False#is的結(jié)果是False
print(str1==str2)
>>>True #==的結(jié)果為True,看二者不一樣了吧

第三個(gè)例子

str3='string'
str4=''.join(['s','t','r','i','n','g'])
print(str3)
>>>string
print(str3 is str4)
>>>False #is的結(jié)果是False
print(str3==str4)
>>>True #==的結(jié)果為True,看二者不一樣了吧

這就是很容易混淆初學(xué)者的地方,感覺很奇怪,為什么有的時(shí)候is和==輸出相同,有的時(shí)候不同呢.好我們來一探究竟:

我們用內(nèi)置的id()這函數(shù),這個(gè)函數(shù)用來返回對象的內(nèi)存地址,查一下就清楚了

is是對象的標(biāo)示符,用來比較兩個(gè)對象的內(nèi)存空間是不是一樣,是不是用的同一塊空間地址,而==是比較兩個(gè)對象的內(nèi)容是否相等.

三、連接字符串特別是大規(guī)模的字符串,最好用join 而不是+

字符串處理的時(shí)候,最常用的是連接,Python中的字符串與其他的語言有一點(diǎn)不同,它是不可變對象,一旦創(chuàng)建不能改變.而這個(gè)特性直接會影響到Python中字符串連接的效率.

用+連接字符串:

str1,str2,str3='test','string','connection'
print(str1+str2+str3)
>>>test string connection

用join連接字符串

str1,str2,str3='test ','string ','connection'
print(''.join([str1,str2,str3]))
>>>test string connection

但是若是連接大規(guī)模的字符串,比如要連接10萬左右的字符串的時(shí)候,join的方法效率就會快很多(甚至相差百倍).比如下面這10萬個(gè)字符串連接.

long_str_list=['This is a long string' for n in range(1,100000)]

原因是因?yàn)槿粢B接字符串:S1+S2+S3+....+SN,由于字符串是不可變的對象,執(zhí)行一次就要申請一塊新的內(nèi)存,這樣的話在N個(gè)字符串連接的過程中,會產(chǎn)生N-1個(gè)中間結(jié)果,每產(chǎn)生一個(gè)中間結(jié)果就要申請一次內(nèi)存,這樣會嚴(yán)重影響執(zhí)行效率.

而join不一樣,它是一次性申請總的內(nèi)存,然后把字符串里面的每一個(gè)元素復(fù)制到內(nèi)存中去,所以join會快很多.

因此,字符串的連接,尤其是大的字符串處理,最好用join

四、不要在for 和while 循環(huán)后面寫else 塊

Python 提供了一種很多編程語言都不支持的功能,那就是可以在循環(huán)內(nèi)部的語句塊后面直接編寫else 塊。比如:

for i in range(3):
 print('Loop %d'%i)
else:
 print('Else block')
>>>Loop 0
>>>Loop 1
>>>Loop 2
>>>Else block
  • 這種else 塊會在整個(gè)循環(huán)執(zhí)行完之后立刻運(yùn)行。既然如此,那它為什么叫做else 呢?為什么不叫and ?在if/else 語句中,else 的意思是:如果不執(zhí)行前面那個(gè)if 塊,那就執(zhí)行else 塊。
  • 同理try/except/else 也是如此,該結(jié)構(gòu)的else 的含義是:如果前面的try 塊沒有失敗,那就執(zhí)行else 塊。
  • try/finally 同樣非常直觀,這里的finally 的意思是:執(zhí)行過前面的try 塊之后,不管如何總是執(zhí)行finally塊。

問題來了對于剛接觸Python 的程序員可能會把for/else 結(jié)構(gòu)中的else 塊理解為:如果循環(huán)沒有正常執(zhí)行完,那就執(zhí)行else 塊。

實(shí)際上剛好相反——在循環(huán)里用break語句提前跳出,會導(dǎo)致程序不執(zhí)行else 塊,這一點(diǎn)會有點(diǎn)繞.對于不熟悉for/else 的人來說,會令閱讀代碼的人感到相當(dāng)費(fèi)解.

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Python中new方法的詳解

    Python中new方法的詳解

    今天小編就為大家分享一篇關(guān)于Python中new方法的詳解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 舉例講解Python程序與系統(tǒng)shell交互的方式

    舉例講解Python程序與系統(tǒng)shell交互的方式

    這篇文章主要介紹了Python程序與系統(tǒng)shell交互的方式,舉了一個(gè)非常簡單的hello world的例子,需要的朋友可以參考下
    2015-04-04
  • Python處理日期和時(shí)間的方法總結(jié)

    Python處理日期和時(shí)間的方法總結(jié)

    這篇文章主要介紹了Python時(shí)間和日期的處理方法總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • python簡單程序讀取串口信息的方法

    python簡單程序讀取串口信息的方法

    這篇文章主要介紹了python簡單程序讀取串口信息的方法,涉及Python操作serial模塊的技巧,需要的朋友可以參考下
    2015-03-03
  • Python讀取txt內(nèi)容寫入xls格式excel中的方法

    Python讀取txt內(nèi)容寫入xls格式excel中的方法

    今天小編就為大家分享一篇Python讀取txt內(nèi)容寫入xls格式excel中的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python解決Flutter項(xiàng)目簡體字問題的方法

    Python解決Flutter項(xiàng)目簡體字問題的方法

    作為面向大陸外市場的應(yīng)用,我們經(jīng)常編寫代碼的時(shí)候往往忘記切換繁體字導(dǎo)致上線后出現(xiàn)簡體字,因?yàn)檠芯肯聵I(yè)內(nèi)相關(guān)插件,看看怎么好解決這個(gè)問題,OpenCC 支持語言比較多,所以基于此嘗試了用 Python 去實(shí)現(xiàn),需要的朋友可以參考下
    2024-07-07
  • python數(shù)據(jù)結(jié)構(gòu)之圖深度優(yōu)先和廣度優(yōu)先實(shí)例詳解

    python數(shù)據(jù)結(jié)構(gòu)之圖深度優(yōu)先和廣度優(yōu)先實(shí)例詳解

    這篇文章主要介紹了python數(shù)據(jù)結(jié)構(gòu)之圖深度優(yōu)先和廣度優(yōu)先,較為詳細(xì)的分析了深度優(yōu)先和廣度優(yōu)先算法的概念與原理,并給出了完整實(shí)現(xiàn)算法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • Python裝飾器的定義和使用詳情

    Python裝飾器的定義和使用詳情

    這篇文章主要介紹了Python裝飾器的定義和使用詳情,裝飾器給已有函數(shù)增加額外的功能的函數(shù),本質(zhì)上是一個(gè)閉包函數(shù),下文更多相關(guān)介紹需要的小伙伴可以參考一下
    2022-04-04
  • numpy數(shù)組之存取文件的實(shí)現(xiàn)示例

    numpy數(shù)組之存取文件的實(shí)現(xiàn)示例

    這篇文章主要介紹了numpy數(shù)組之存取文件的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Python加密與解密模塊hashlib與hmac

    Python加密與解密模塊hashlib與hmac

    這篇文章介紹了Python中的加密與解密模塊hashlib與hmac,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06

最新評論