成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

致命錯誤!Python開發者的7個崩潰瞬間

開發 后端
下文匯總了程序員(尤其是新手)可能犯的常見錯誤,以及該如何糾正這些錯誤,編寫更好的、無錯誤的Python代碼。讓我們開始吧!

本文轉載自公眾號“讀芯術”(ID:AI_Discovery)。

毫無疑問,Python是當今使用最為廣泛的編程語言。它的語法簡單且易讀,也很容易上手。

但無論你經驗多豐富,或是已使用過多少種語言,切換到Python時都不能保證非常順利。具有面向對象編程背景的開發人員容易忽略Python的慣用特性,很可能會濫用編程結構,從而產生不可預見且很難捕捉的錯誤。更糟糕的是,大多數錯誤很難發現,可能在后續工作中造成麻煩。

下文匯總了程序員(尤其是新手)可能犯的常見錯誤,以及該如何糾正這些錯誤,編寫更好的、無錯誤的Python代碼。讓我們開始吧!

[[353387]]

編寫過于風格化的代碼

這是Python初學者的一個典型特征。為了編寫類似高級偽英語的代碼,他們最終在其代碼庫中添加了以下類型的代碼段:

  1. if x == 1 or x == 2 

看起來似乎不錯。這行代碼的意思是變量x必須為1或2才能滿足條件。但是,此類代碼片段太過風格化,影響了可讀性。下面的替代代碼段很容易理解,該行代碼檢查值是否屬于列表中的元素:

  1. if x in [1,2] 

不必要的比較運算符:None和零

具有Java背景的程序員知道需要進行多少次空值(null)檢查(尤其是在Java 8之前的版本中)。因此,在Python中看到這樣的比較運算符就不足為奇了:

  1. a == None b != None 

上述情況可以利用python的方式編寫代碼來增強可讀性:

  1. a is None 
  2. b is not None 

同樣值得注意的是,對于0,實際上并不需要在條件邏輯中使用比較運算符。0解釋為false,而非零數字則視為true。

使用長鏈式條件位邏輯

在大多數語言(包括Swift,Java,Kotlin)中,可用以下方式編寫某些比較邏輯:

  1. if a < b < c 

大多數語言不能在非關聯優先級中使用相鄰運算符,而Python則不同,Python可以鏈式賦值,如以下代碼所示:

  1. if a < b < c 

因此,這樣做可以避免按位運算符。

使用type()代替isinstance(),反之亦然

type和isinstance是Python中用于類型檢查的兩個廣泛使用的內置函數。通常,新手開發人員會認為這兩個函數很相似并互換使用。這可能引發無法預料的錯誤,因為type()和isinstance()具有一些細微的差異。

isinstance()函數用于檢查對象是否是指定類的實例,同時還要注意繼承。另一方面,type()僅檢查引用類型是否相等,并丟棄子類型。因此,以下代碼使用type()和isinstance()給出了不同的結果:

  1. class Vehicle: 
  2.     pass 
  3.  
  4. class Car(Vehicle): 
  5.     passisinstance(Car(), Vehicle) #returns True 
  6. type(Car()) == Vehicle # returns False 

同樣,以下代碼將布爾值視為int的實例(因為True和False基本上被視為1和0),但是使用type函數給出了不同的結果。

  1. type(True) == int # falseisinstance(True, int) # trueisinstance(False,int) # true 

因此,重要的是要了解Python的兩個類型檢查器函數之間的差異,并且不要彼此混淆。

混淆作用域中的局部變量和全局變量

Python中的作用域規則看起來相當簡單,但很容易造成誤解。例如,以下代碼在函數內部使用全局變量:

  1. a = 10 
  2. def printMe(): 
  3.     print(a)printMe() # prints 10 

如果通過修改函數中的變量來稍微調整上述代碼,就會拋出錯誤:

  1. a = 20 
  2. def printA(): 
  3.     print(a) 
  4.     a = 10print(a) # gives 20 
  5. printA() # gives error as a is referenced before assigned 

一旦在函數內部修改了全局變量,Python就會將其視為局部變量,從而覆蓋全局變量。甚至賦值前的打印語句也沒有執行。

為確保此類名稱沖突不會導致錯誤,可以在局部函數內為全局變量附加global關鍵字。甚至最好將全局變量(如果確實需要使用)放在單獨的類中,以便始終將全局變量與類名一起使用。

可變默認參數

在Python中,使用默認參數很常見,它可以避免在調用函數時出現一長串參數。列表、字典和集合是Python中的可變類型。設置默認值會導致意外結果,如下所示:

  1. def addToList(x, a=[]): 
  2.     a.append(x) 
  3.     return alistOne = addToList(5) 
  4. #prints [5]anotherList = addToList(10) 
  5. # [5, 10] 

如你所見,第二個列表包含先前添加的元素,因為函數中的可變默認參數將它們存儲在各個狀態之間。

Python中可變默認對象的問題表現在定義函數時會對其進行評估,這會導致可變值也保存先前的內容。為避免此類嚴重的錯誤,請將None設置為默認值,然后在函數內分配可變變量,如下所示:

  1. def addElement(x, a=None): 
  2.     if not a: 
  3.         a = [] 
  4.     a.append(x) 
  5.     return a 

忽略多重繼承和方法解析順序

[[353388]]

圖源:unsplash

與大多數語言不同,Python支持多重繼承。即在具有繼承的類中,方法和類變量將根據繼承類時指定的順序執行。初學者通常會忽略此概念,尤其是在僅使用單一繼承的情況下。在下面的代碼中,當調用C類的方法時,將使用超類B的相應方法:

  1. >>> class A(object): 
  2. ...     def me(self): 
  3.           print("class A") 
  4.  
  5. >>> class B(A): 
  6. ...     def me(self): 
  7.           print("class B") 
  8. class C(B, A): 
  9.    passc = C() 
  10. c.me() # prints class B 

Python中繼承類的順序很重要,它可用來解決這些問題。

Python雖簡單,但小心不要與其他語言混淆了,這可能會導致奇怪的錯誤和程序崩潰。希望上述的總結可以幫你理清概念,編寫更穩定的Python代碼。

 

責任編輯:趙寧寧 來源: 今日頭條
相關推薦

2012-06-01 14:57:00

移動應用開發7個致命錯誤

2013-09-10 13:30:51

移動應用移動開發應用缺點

2013-12-27 09:03:47

開發項目

2012-11-13 10:34:03

PythonWeb

2022-12-14 07:31:35

JavaScript錯誤關鍵字

2014-10-09 09:29:25

AngularJS

2015-04-21 12:54:21

2011-03-17 15:25:31

2017-09-18 10:36:35

Python類庫開發者

2020-10-09 09:44:25

JavaScript 開發 應用

2011-04-18 12:55:04

JavaScript開發者

2017-11-02 15:42:32

開發錯誤代碼

2017-10-23 09:27:47

2018-04-04 09:55:18

語言PHP易犯錯誤

2015-03-04 14:16:39

Web開發小錯誤致命錯誤

2025-03-19 00:21:54

高并發系統性能

2023-11-30 15:30:19

Python編程語言

2012-06-13 01:23:30

開發者程序員

2013-08-29 09:53:48

開發者iOS 7

2025-01-13 06:20:00

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品免费国产一区二区三区四区介绍 | 国产黄色在线观看 | 91视频免费观看 | 992tv人人草 久久精品超碰 | 69电影网| 国产黄色麻豆视频 | 亚洲精品久久久久久一区二区 | 精品国产第一区二区三区 | 精品国产免费一区二区三区演员表 | 国外成人在线视频 | 久久久久一区二区三区 | 久久天天躁狠狠躁夜夜躁2014 | 亚洲欧美成人影院 | 国产九九av| 欧美午夜精品 | 一区二区三区久久 | 我想看一级黄色毛片 | 成人久久久久久久久 | 国产精品成人一区二区三区夜夜夜 | 精品国产乱码一区二区三区 | 国产精品久久久久久久久久久久午夜片 | 天天干夜夜操 | 精品久久久久久久久久 | 中文字幕久久精品 | 91在线观看免费视频 | 天天综合网91 | 欧美中文字幕一区二区三区亚洲 | 在线超碰| 国产视频久久 | 青久草视频| 免费国产一区二区 | 国产一区二区美女 | 国产www成人| 米奇成人网 | 久视频在线 | 欧美精品被 | 亚洲一区有码 | 欧美日韩国产一区二区 | 久久久久亚洲精品 | 一级片免费观看 | 亚洲国产精品久久久久久 |