日韩 亚洲一区二_久久vs国产综合色大全_国产精品福利在线_欧美在线一级A片免费观看欧美在线_女同性毛片60分钟

您現(xiàn)在所在的位置:首頁(yè) >關(guān)於奇酷 > 行業(yè)動(dòng)態(tài) > 奇酷Python培訓(xùn)新手容易犯的4個(gè)錯誤

奇酷Python培訓(xùn)新手容易犯的4個(gè)錯誤

來(lái)源:奇酷教育 發(fā)表於:

奇酷教育-Python培訓(xùn)_Python教程_Python基礎(chǔ)教程

奇酷Python培訓(xùn)新手容易犯的4個(gè)錯誤
  python語言裡面有一些小的坑,特別容易弄混弄錯,初學(xué)者若不注意的話(huà),很容易坑進(jìn)去,下面奇酷Python培訓(xùn)給大家深入解析一些這幾個(gè)坑,希望對(duì)初學(xué)者有所幫助.
  1.i+=1不等於++i
  初學(xué)者對(duì)Python語言不是特別了解的話(huà),又正好有c++,java的語言背景,很容易把++i和i+=1弄混
  先來(lái)看一個(gè)小例子:
  i=0
  mylist=[1,2,3,4,5,6]
  while i <len(mylist):< p>
  print(mylist[i])
  ++i
  這段代碼會(huì)想當(dāng)然的認(rèn)為,沒有啥問(wèn)題啊,一個(gè)循環(huán)輸(shū)出,i不斷的+1,蠻對(duì)的呀.其實(shí)不是的,這個(gè)代碼會(huì)一直輸(shū)出1,一個(gè)死循環(huán).因為Python的解釋器會(huì)將++i操作為+(+i).其中+表示是正數(shù)符號(hào),對(duì)於--i也是類(lèi)似的.
  print(+1)
  >>>1
  print(++1)
  >>>1
  print(+++1)
  >>>1
  這下明白了++i雖然在Python語法是合法的,但是並不是我們理解的自增的操作.
  2.分清楚==和is的用法
  在判斷字符串是否相等的時(shí)候,初學(xué)者特別會(huì)弄混is和==,這樣的結(jié)果是程序在不同的情況下表現(xiàn)不同:
  比如先看一個(gè)簡(jiǎn)單的例子:
  a='Hi'
  b='Hi'
  print(a is b)
  >>>True
  print(a==b)
  >>>True #看起來(lái)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ū)出相同,有的時(shí)候不同呢.好我們來(lái)一探究竟:
  我們用內(nèi)置的id()這函數(shù),這個(gè)函數(shù)用來(lái)返回對(duì)象的內(nèi)存地址,查一下就清楚了
  is是對(duì)象的標(biāo)示符,用來(lái)比較兩(liǎng)個(gè)對(duì)象的內(nèi)存空間是不是一樣,是不是用的同一塊空間地址,而==是比較兩(liǎng)個(gè)對(duì)象的內(nèi)容是否相等.
  3.連接字符串特別是大規(guī)模的字符串,最好用join而不是+
  字符串處理的時(shí)候,最常用的是連接,Python中的字符串與其他的語言有一點(diǎn)不同,它是不可變對(duì)象,一旦創(chuàng)建不能改變.而這個(gè)特性直接會(huì)影響到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萬(wàn)左右的字符串的時(shí)候,join的方法效率就會(huì)快很多(甚至相差百倍).比如下面這10萬(wàn)個(gè)字符串連接.
  long_str_list=['This is a long string' for in range(1,100000)]
  原因是因為若要連接字符串:S1+S2+S3+....+SN,由於字符串是不可變的對(duì)象,執(zhí)行一次就要申請一塊新的內(nèi)存,這樣的話(huà)在N個(gè)字符串連接的過(guò)程中,會(huì)產(chǎn)生N-1個(gè)中間結(jié)果,每產(chǎn)生一個(gè)中間結(jié)果就要申請一次內(nèi)存,這樣會(huì)嚴(yán)重影響執(zhí)行效率.
  而join不一樣,它是一次性申請總的內(nèi)存,然後把字符串裡面的每一個(gè)元素複製到內(nèi)存中去,所以join會(huì)快很多.
  因此,字符串的連接,尤其是大的字符串處理,最好用join
  4.不要在for和while循環(huán)後面寫(xiě)else塊
  Python提供了一種很多程式語言都不支持的功能,那就是可以在循環(huán)內(nèi)部的語句塊後面直接編寫(xiě)else塊。比如:
  for i in range(3):
  print('Loop %d'%i)
  else:
  print('Else block')
  >>>Loop 0
  >>>Loop 1
  >>>Loop 2
  >>>Else block
  這種else塊會(huì)在整個(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同樣非常直觀(guān),這裡的finally的意思是:執(zhí)行過(guò)前面的try塊之後,不管如何總是執(zhí)行finally塊。
  問(wèn)題來(lái)了對(duì)於剛接觸Python的程式設(shè)計(jì)師可能會(huì)把for/else結(jié)構(gòu )中的else塊理解為:如果循環(huán)沒有正常執(zhí)行完,那就執(zhí)行else塊。
  實(shí)際上剛好相反——在循環(huán)裡用break語句提前跳出,會(huì)導(dǎo )致程序不執(zhí)行else塊,這一點(diǎn)會(huì)有點(diǎn)繞.對(duì)於不熟悉for/else的人來(lái)說(shuō),會(huì)令閱讀代碼的人感到相當(dāng)費(fèi)解.
       以上就是qiku為大家分享的“奇酷Python培訓(xùn)新手容易犯的4個(gè)錯誤”謝謝大家觀(guān)看,如果對(duì)Python感興趣的話(huà),想學(xué)Python培訓(xùn)的,也可以在線(xiàn )諮詢,我們將竭誠(chéng)為你解答。