中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中的反模式怎么實現

發布時間:2022-01-26 09:26:23 來源:億速云 閱讀:159 作者:iii 欄目:開發技術

這篇文章主要介紹“Python中的反模式怎么實現”,在日常操作中,相信很多人在Python中的反模式怎么實現問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Python中的反模式怎么實現”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

1. 不with用于打開文件

當您打開一個沒有該with語句的文件時,您需要記住close()在完成處理后通過顯式調用關閉文件。即使明確關閉資源,在實際釋放資源之前也有可能發生異常。這可能會導致不一致,或導致文件損壞。打開文件通過with實現上下文管理器協議,當執行在with塊之外時釋放資源。

不好的做法:

Python:

new_file = open('some-file.txt', 'r')# do something excitingnew_file.close()

良好做法:

Python:

with open('some-file.txt', 'r') as fd: data = fd.read() # do something exciting

2.使用list/ dict/set理解不必要

內置類似功能all,any,enumerate,iter,itertools.cycle和itertools.accumulate可以直接與發電機表達工作。他們不需要理解。

除了他們,all()并any()在Python也支持短路,但如果使用理解這種行為將丟失。這會影響性能。

不好的做法:

Python:

...
comma_seperated_names = ','.join([name for name in my_fav_superheroes])

良好做法:

Python:

...
comma_seperated_numbers = ','.join(name for name in my_fav_superheroes)

3. 不必要地使用發電機

沒有必要在對 的調用中使用生成器表達式list,dict或者set因為對于這些類型中的每一種都有理解。代替使用list/ dict/set周圍生成器表達式,它們可以被寫為它們各自的理解。

不好的做法:

Python:

squares = dict((i,i**2) for i in range(1,10))

良好做法:

Python:

squares = {i: i**2 for i in range(1,10)}

4. 在函數調用中返回多個對象類型

在函數中具有不一致的返回類型會使代碼混亂且難以理解,并可能導致難以解決的錯誤。如果函數應該返回給定類型(例如整數常量、列表、元組),但也可以返回其他類型,則該函數的調用者將始終需要檢查返回值的類型。建議從函數中只返回一種類型的對象。

如果在某些失敗的情況下需要返回空的東西,建議引發一個可以干凈地捕獲的異常。

不好的做法:

Python:

def get_person_age(name):
    person = db.get_person(name)
    if person:
        return person.age  # returns an int

    # returns None if person not found

良好做法:

Python:

def get_person_age(name):
    person = db.get_person(name)
    if not person:
        raise Exception(f'No person found with name {name}')
    return person.age  # guaranteed to return int every time

5. 不使用get()從字典中返回默認值

這種反模式會影響代碼的可讀性。我們經常看到代碼創建一個變量,為其分配一個默認值,然后在字典中查找某個鍵。如果鍵存在,則鍵的值被分配給變量的值。這樣做雖然沒有什么問題,但由于它查詢了兩次字典,因此冗長且效率低下,而使用get()字典的方法可以輕松完成。

不好的做法:

Python:

currency_map = {'usd': 'US Dollar'}

if 'inr' in currency_map:
  indian_currency_name = currency_map['inr']
else:
  indian_currency_name = 'undefined'

良好做法:

Python:

currency_map = {'usd': 'US Dollar'}
indian_currency_name = currency_map.get('inr', 'undefined')

6. 不使用items()迭代字典

items字典上的方法返回一個帶有鍵值元組的可迭代對象,可以在for循環中解包。這種方法是慣用的,因此值得推薦。

不好的做法:

Python:

for code in country_map:
    name = country_map[code]
    # do something with name

良好做法:

Python:

for code, name in country_map.items():
    # do something with name
    pass

7.不使用文字語法來初始化空list/ dict/tuple

通過調用初始化空字典dict()比使用空字面值要慢,因為名稱dict必須在全局范圍內查找,以防它被重新綁定。其他兩種類型也是如此 -list()和tuple().

不好的做法:

Python:

my_evans = list()
# Add something to this empty list

良好做法:

Python:

my_evans = []
# Add something to this empty list

8. 在生產代碼中推送調試器

我們大多數人至少做過一次——在調試代碼時,可能會發生在你發現錯誤后推送代碼但忘記刪除調試器的情況。這很關鍵,可能會影響代碼的行為。強烈建議在簽入之前審核代碼以刪除調試器的調用。

使用 Python 分析器,您可以在代碼庫中的所有這些反模式投入生產之前檢測它們。

到此,關于“Python中的反模式怎么實現”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

济南市| 镇雄县| 东莞市| 慈溪市| 峡江县| 鲁山县| 九龙城区| 台东市| 周宁县| 且末县| 金堂县| 巴林左旗| 南木林县| 佛山市| 绥芬河市| 砚山县| 河东区| 宁德市| 郯城县| 杭州市| 龙川县| 麻栗坡县| 南漳县| 平凉市| 洛扎县| 临高县| 都兰县| 古丈县| 建瓯市| 墨玉县| 江油市| 鹤岗市| 独山县| 松滋市| 延边| 平远县| 天镇县| 重庆市| 抚松县| 甘洛县| 缙云县|