日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

11个技巧让你编写出更好的Python代码,值得收藏!!

發布時間:2025/3/15 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 11个技巧让你编写出更好的Python代码,值得收藏!! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在本教程中,我們將展示11個技巧來編寫更好的Python代碼!我們展示了許多最佳實踐,它們通過使代碼更加簡潔和更具python風格來改進代碼。以下是所有技巧的概述:

1)使用enumerate()而不是range(len())進行迭代

2)使用列表comprehension代替原始的for循環

3)使用內置的Sort()方法對復雜的迭代進行排序

4)用集合存儲唯一的值

5)使用generators節省內存

6)用.get()和.setdefault()在字典中定義默認值

7)用collections.Counter計數hashable對象

8)用f- string格式化字符串(Python 3.6+)

9)用.join()連接字符串

10)用雙星號語法合并字典** (Python 3.5+)

11)用if x in list簡化if語句,而不是單獨檢查每一項

?

1)使用enumerate()而不是range(len())進行迭代

如果我們需要遍歷一個列表,并且需要跟蹤索引和當前項,大多數人會使用range(len())語法。在本例中,我們希望遍歷一個列表,檢查當前項是否為負,并在本例中將列表中的值設置為0。雖然range(len())語法可以工作,但使用內置的枚舉函數更好。這將以元組的形式返回當前索引和當前項。因此,我們可以直接檢查這里的值,也可以訪問帶有索引的項。

squares = [] for i in range(10):squares.append(i*i)

2)使用list comprehension代替原始的for循環

假設我們想要創建一個具有特定值的列表,在本例中是一個包含0到9之間所有平方數的列表。冗長乏味的方法是創建一個空列表,然后使用for循環,進行計算,并將其附加到列表中:

data = (3, 5, 1, 10, 9) sorted_data = sorted(data, reverse=True) # [10, 9, 5, 3, 1]

一種更簡單的方法是list comprehension。這里我們只需要一行來實現同樣的事情:

data = [{"name": "Max", "age": 6}, {"name": "Lisa", "age": 20}, {"name": "Ben", "age": 9}] sorted_data = sorted(data, key=lambda x: x["age"])

list comprehension能力非常強大,甚至包括if語句。注意,list comprehension的用法有一點爭議。它不應該被過度使用,尤其是當它損害了代碼的可讀性時。但我個人認為這種語法是清晰和簡潔的。

3)使用內置的Sort()方法對復雜的迭代進行排序

如果我們需要對一些可迭代的對象,例如列表、元組或字典進行排序,我們不需要自己實現排序算法。我們可以簡單地使用內置的排序函數。這將自動按升序對數字進行排序,并返回一個新的列表。如果我們想讓結果按降序排列,我們可以使用參數reverse=True。正如我所說的,這適用于任何可迭代的對象,所以這里我們還可以使用元組。但是請注意,結果是一個列表!

# list comprehension my_list = [i for i in range(10000)] print(sum(my_list)) # 49995000# generator comprehension my_gen = (i for i in range(10000)) print(sum(my_gen)) # 49995000

現在假設我們有一個復雜的迭代器。這里是一個列表,列表里面有字典,我們想要根據字典中的年齡對列表進行排序。為此,我們還可以使用排序函數,然后傳入應該用于排序的關鍵參數。鍵必須是一個函數,所以這里我們可以使用lambda和返回年齡的單行函數。

data = [{"name": "Max", "age": 6}, {"name": "Lisa", "age": 20}, {"name": "Ben", "age": 9}] sorted_data = sorted(data, key=lambda x: x["age"])

?

4)用集合存儲唯一的值

如果我們有一個有多個值的列表,并且只需要唯一的值,一個很好的技巧是將我們的列表轉換為集合。集合是一種無序的集合數據類型,沒有重復的元素,所以在這種情況下,它刪除了所有重復的元素。

name = "Alex" my_string = f"Hello {name}" print(my_string) # Hello Alexi = 10 print(f"{i} squared is {i*i}") # 10 squared is 100

如果我們已經知道我們需要唯一的元素,比如這里的質數,我們可以馬上用花括號創建一個集合。這允許Python進行一些內部優化,并且它還有一些方便的方法來計算兩個集合之間的交集和差異。

5)generator節省內存

在技巧2中,我向你展示了list comprehension。但是列表并不總是最好的選擇。假設我們有一個非常大的列表有10000項我們想計算所有項的和。當然,我們可以使用列表來實現這一點,但是我們可能會遇到內存問題。這是一個我們可以使用生成器的完美例子。與list comprehension類似,我們可以使用生成器理解,它具有相同的語法,但使用圓括號而不是方括號。生成器懶洋洋地計算我們的元素,即。,它一次只生成一個條目,并且只在被請求時生成。如果我們計算這個生成器的和,我們看到我們得到了相同的正確結果。

from collections import Countermy_list = [10, 10, 10, 5, 5, 2, 9, 9, 9, 9, 9, 9] counter = Counter(my_list)print(counter) # Counter({9: 6, 10: 3, 5: 2, 2: 1}) print(counter[10]) # 3

6)用.get()和.setdefault()在字典中定義默認值

假設我們有一個字典,它有不同的鍵,比如物品和物品的價格。在代碼的某個時候,我們想要獲得條目的計數,并且假設這個鍵也包含在字典中。當我們簡單地嘗試訪問密鑰時,它將崩潰我們的代碼并引發一個KeyError。所以更好的方法是在字典上使用.get()方法。這也會返回鍵的值,但是如果鍵不可用,它不會引發鍵錯誤。相反,它返回我們指定的默認值,如果我們沒有指定它,則返回None。

my_dict = {'item': 'football', 'price': 10.00} price = my_dict['count'] # KeyError!# better: price = my_dict.get('count', 0) # optional default value

7)用collections.Counter計數hashable對象

如果我們需要計算列表中元素的數量,那么在collections模塊中有一個非常方便的工具可以完成此工作。我們只需要從集合中導入計數器,然后用列表作為參數創建計數器對象。如果我們打印這個,那么對于列表中的每一項,我們都可以看到這個項出現的次數,而且它已經排好序了,最常用的項在前面。單獨計算會好得多。如果我們想要獲得某一項的計數,只需訪問該項,它就會返回相應的計數。如果不包含該項,則返回0。

from collections import Countermy_list = [10, 10, 10, 5, 5, 2, 9, 9, 9, 9, 9, 9] counter = Counter(my_list)print(counter) # Counter({9: 6, 10: 3, 5: 2, 2: 1}) print(counter[10]) # 3

?

8)用f-strings格式化字符串(Python 3.6+)

這是自Python 3.6以來的新特性,在我看來是格式化字符串的最佳方式。我們只需要在字符串前面寫一個f,然后在字符串里面我們可以使用大括號來訪問變量。與舊的格式化規則相比,這更簡單、更簡潔,也更快。此外,我們可以在大括號中編寫在運行時計算的表達式。舉個例子,我們想要輸出變量i的平方,我們可以簡單地把這個操作寫在f字符串中。

d1 = {'name': 'Alex', 'age': 25} d2 = {'name': 'Alex', 'city': 'New York'} merged_dict = {**d1, **d2} print(merged_dict) # {'name': 'Alex', 'age': 25, 'city': 'New York'}

9)用.join()連接字符串

假設我們有一個包含不同字符串的列表,我們想將所有元素組合成一個字符串,每個單詞之間用空格分隔。壞的方法是這樣做:

list_of_strings = ["Hello", "my", "friend"]# BAD: my_string = "" for i in list_of_strings:my_string += i + " "

我們定義了一個空字符串,然后遍歷該列表,然后將單詞和空格追加到該字符串。你應該知道,字符串是不可變的元素,所以這里我們每次都要創建新的字符串。對于大型列表,此代碼可能非常慢,所以您應該立即忘記這種方法!更好、更快、也更簡潔的是.join()方法:

.join() method: # GOOD: list_of_strings = ["Hello", "my", "friend"] my_string = " ".join(list_of_strings)

10)用雙星號語法合并字典** (Python 3.5+)

這種語法是自Python 3.5以來的新語法。如果我們有兩個字典并且想要合并它們,我們可以為兩個字典使用花括號和雙星號。這里字典1有名字和年齡,字典2也有名字和城市。在與這個簡潔的語法合并之后,我們最終的字典中有所有3個鍵。

d1 = {'name': 'Alex', 'age': 25} d2 = {'name': 'Alex', 'city': 'New York'} merged_dict = {**d1, **d2} print(merged_dict) # {'name': 'Alex', 'age': 25, 'city': 'New York'}

11)用if x in list簡化if語句,而不是單獨檢查每一項

假設我們有一個主色為紅色、綠色和藍色的列表。在代碼的某個地方,我們有一個包含一些顏色的新變量,這里是c =紅色。然后我們要檢查這個顏色是否來自我們的主色。我們當然可以像這樣檢查列表中的每一項:

colors = ["red", "green", "blue"]c = "red"# cumbersome and error-prone if c == "red" or c == "green" or c == "blue":print("is main color")

但這可能會變得很麻煩,我們很容易出錯,例如,如果我們這里有一個錯誤的紅色。如果大家對Python感興趣的話,可以加一下我的微信哦:abb436574,免費領取一套學習資料和視頻課程喲~更簡單也更好的方法是使用語法if x in list:

colors = ["red", "green", "blue"]c = "red"# better: if c in colors:print("is main color")

總結

以上是生活随笔為你收集整理的11个技巧让你编写出更好的Python代码,值得收藏!!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。