999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Python 初學者常犯的5個錯誤

2019-09-10 07:22:44
電腦報 2019年37期

Python是一種高級的動態編程語言,它以易于使用著名。目前Python社區已經非常完善了,近幾年它的發展尤為迅猛。但是易于使用同樣能帶來一些壞處,即易于誤用。在本文中,我們列舉了 初學者常犯的5 個錯誤,希望它們能幫助初學者寫更加正確與優美的代碼。

1. 可變的缺省參數

Python 中的缺省參數會在執行函數定義時計算一次,這表示在函數完成定義后該表達式只執行一次,因此缺省值可以用于后續的每一次調用。如果我們令缺省參數為可變的,例如列表或字典等,那么對于將來所有的調用,該參數都是一直保留且可變的。

如下為不正確的表達方式,如果我們第一次調用 add_item 增加「a」時,items=[『a』]。當我們第二次調用 add_item 增加「b」時,由于定義中的 items=[] 只在初始化的時候運行一次,因此這時的 items=[『a』, 『b』]。

尤其是當我們在調用 add_item 函數時沒傳入任何參數,那么 items 還是能保留以前記住的內容,相當于將以前的內容泄露給了后續的調用。

def add_item(new_item, items=[]):

items.append(new_item)

正確的表達方式應該是如下,在我們沒傳入 items 時應該要將它初始化為空白列表:

def add_item(new_item, items=None):

if items is None:

items = []

items.append(new_item)

2. 將 assert 聲明語句作為保證條件

因為 assert 語句很容易檢查一些條件是否滿足或執行是否正確,開發者經常用它來檢查某部分代碼的有效性。但是當 Python 解釋器調用時帶了-O (optimize) flag,那么 assert 語句會從字節碼中移除。所以,如果 assert 語句在面向用戶驗證的產品代碼中,根本就不會執行,因為它可能會造成一些安全漏洞。

因此開發者應該只在測試中使用 assert 語句,不正確的示例如下:

assert re.match(VALID_ADDRESS_REGEXP, email) is not None

正確的代碼要改成:

if not re.match(VALID_ADDRESS_REGEXP, email):

raise AssertionError

3. 使用 isinstance 代替 type

type 和 isinstance 都能檢查某個對象的類別是什么。但是它們間有非常重要的區別,isinstance 在解析目標類型時,它會關注繼承關系,而 type 并不會。正因為這個區別,isinstance 在某些時候并不是我們所想的那樣。例如以下案例:

def which_number_type(num):

if isinstance(num, int):

print(‘Integer’)

else:

raise TypeError(‘Not an integer’)

which_number(False) # prints ‘Integer’, which is incorrect

因為布爾類型的變量在 Python 中是 int 的子類,isinstance(num, int) 同樣會得出 True,這并不是我們想要的。在特定的類別中,使用 type 可能更加正確。

4. 不必要的 lambda 表達式

函數在 Python 中是最常用的結構,我們能將函數賦值給某個變量,并將該變量作為參數傳遞給另外一個函數,這也是函數常見的用法。但這對于初學者或了解其他編程語言的開發者而言,這種傳遞方式是非常反直覺的。

一個比較常見的模式可以表示為:

def request(self, method, **kwargs):

# ...

if method not in (“get”, “post”):

req.get_method = lambda: method.upper()

# ...

上面采用匿名函數 lambda 的方式,最好可以改成以下:

def request(self, method, **kwargs):

# ...

if method not in (“get”, “post”):

req.get_method = method.upper

# ...

5. Raising NotImplemented

這種命名可能會使開發者感到困惑,NotImplementedError 是一種 exception 類,當派生類需要重寫某個方法時,Python 應該觸發這類錯誤。而 NotImplemented 是一個常量,它用于實現二進制操作。當我們觸發 NotImplemented 時,Python 會給出「TypeError」的報錯。

錯誤的例子:

class SitesManager(object):

def get_image_tracking_code(self):

raise NotImplemented

正確表達方法應該是:

class SitesManager(object):

def get_image_tracking_code(self):

raise NotImplementedError

主站蜘蛛池模板: 网友自拍视频精品区| 国产亚洲精品91| 国产男女XX00免费观看| 国产精品一区在线麻豆| 19国产精品麻豆免费观看| 91黄视频在线观看| 国内精品久久九九国产精品| 国产JIZzJIzz视频全部免费| 91亚洲视频下载| 99re66精品视频在线观看| 欧美一级99在线观看国产| 波多野结衣中文字幕久久| 超级碰免费视频91| 亚洲精品老司机| 免费国产一级 片内射老| 亚洲视频一区| 在线免费看片a| 小说区 亚洲 自拍 另类| 免费看美女自慰的网站| 91网站国产| 国产免费好大好硬视频| 性视频久久| 亚洲精品成人片在线观看| 亚洲欧美成aⅴ人在线观看| 国产精品福利导航| 久久久久亚洲Av片无码观看| 亚洲人成日本在线观看| 日韩第一页在线| 日韩欧美国产另类| 亚洲视频影院| 少妇精品网站| 欧美日韩一区二区三区在线视频| 国产偷国产偷在线高清| 国产另类视频| 国产成人精品一区二区| 538国产在线| 亚洲浓毛av| 丝袜无码一区二区三区| 91精品专区国产盗摄| 三上悠亚精品二区在线观看| 黄色网址免费在线| 91 九色视频丝袜| 天天综合网色中文字幕| 日韩久久精品无码aV| 精品少妇人妻一区二区| 无码内射在线| 黄色在线不卡| 巨熟乳波霸若妻中文观看免费| 欧美亚洲国产精品久久蜜芽| 欧美一级高清片欧美国产欧美| 国产区人妖精品人妖精品视频| 丁香综合在线| 丰满人妻久久中文字幕| 青青国产视频| 国产欧美日韩另类| 国产三区二区| 麻豆精品在线视频| 欧美全免费aaaaaa特黄在线| 在线观看国产精品第一区免费 | 国产另类视频| 美女被操91视频| 欧美黑人欧美精品刺激| 91精品日韩人妻无码久久| 伊人久久久久久久| 深爱婷婷激情网| 国产一级在线播放| 国产香蕉国产精品偷在线观看 | 国产在线自乱拍播放| 日韩高清成人| 中文字幕永久在线看| 亚洲精品无码人妻无码| 欧洲亚洲欧美国产日本高清| 大陆精大陆国产国语精品1024| 久久99国产视频| 亚洲精品自在线拍| 在线观看欧美国产| 色噜噜狠狠狠综合曰曰曰| 日本免费一级视频| 成年人国产网站| 国产福利拍拍拍| 99re在线观看视频| 国产91视频观看|