Python代碼怎麼寫
聽聽頂尖Python大神 kennethreitz的建議
瞭解K神( kennethreitz)是從它牛逼的requests庫開始,號稱最頂尖的Python程序員之一。大神有很多作品,而且還有一個非常勵志的傳奇故事,從一個胖胖的不修邊幅的碼農,勵志減肥而變成一個愛攝影玩音樂的,有藝術家氣息程序員。今天我們一起來拜讀一下大神關於寫Python代碼的建議!
Python代碼怎麼寫
聽聽頂尖Python大神 kennethreitz的建議
瞭解K神( kennethreitz)是從它牛逼的requests庫開始,號稱最頂尖的Python程序員之一。大神有很多作品,而且還有一個非常勵志的傳奇故事,從一個胖胖的不修邊幅的碼農,勵志減肥而變成一個愛攝影玩音樂的,有藝術家氣息程序員。今天我們一起來拜讀一下大神關於寫Python代碼的建議!
1.Mutable and immutable types
Python有兩種內置或用戶定義的類型。
- 可變類型是允許就地修改內容的類型。典型的可變列表是列表和詞典:所有列表都有變異方法,如 list.append()或list.pop(),並且可以在適當的位置進行修改。詞典也是如此。不可變類型不提供改變其內容的方法。例如,設置為整數6的變量x沒有“增量”方法。如果要計算x + 1,則必須創建另一個整數併為其指定名稱。
Python代碼怎麼寫
聽聽頂尖Python大神 kennethreitz的建議
瞭解K神( kennethreitz)是從它牛逼的requests庫開始,號稱最頂尖的Python程序員之一。大神有很多作品,而且還有一個非常勵志的傳奇故事,從一個胖胖的不修邊幅的碼農,勵志減肥而變成一個愛攝影玩音樂的,有藝術家氣息程序員。今天我們一起來拜讀一下大神關於寫Python代碼的建議!
1.Mutable and immutable types
Python有兩種內置或用戶定義的類型。
- 可變類型是允許就地修改內容的類型。典型的可變列表是列表和詞典:所有列表都有變異方法,如 list.append()或list.pop(),並且可以在適當的位置進行修改。詞典也是如此。不可變類型不提供改變其內容的方法。例如,設置為整數6的變量x沒有“增量”方法。如果要計算x + 1,則必須創建另一個整數併為其指定名稱。
體會一下這Best這招,選擇是使用map函數,它可以將內置函數類型str映射到迭代器range。這會生成一個map對象,然後就可以像其他示例一樣join。在某些情況下,map函數甚至可能比列表理解更快,更簡潔!
2.One statement per line
每一行一個語句,尤其在複雜的邏輯表達式的時候,這樣會清晰很容易閱讀。
Python代碼怎麼寫
聽聽頂尖Python大神 kennethreitz的建議
瞭解K神( kennethreitz)是從它牛逼的requests庫開始,號稱最頂尖的Python程序員之一。大神有很多作品,而且還有一個非常勵志的傳奇故事,從一個胖胖的不修邊幅的碼農,勵志減肥而變成一個愛攝影玩音樂的,有藝術家氣息程序員。今天我們一起來拜讀一下大神關於寫Python代碼的建議!
1.Mutable and immutable types
Python有兩種內置或用戶定義的類型。
- 可變類型是允許就地修改內容的類型。典型的可變列表是列表和詞典:所有列表都有變異方法,如 list.append()或list.pop(),並且可以在適當的位置進行修改。詞典也是如此。不可變類型不提供改變其內容的方法。例如,設置為整數6的變量x沒有“增量”方法。如果要計算x + 1,則必須創建另一個整數併為其指定名稱。
體會一下這Best這招,選擇是使用map函數,它可以將內置函數類型str映射到迭代器range。這會生成一個map對象,然後就可以像其他示例一樣join。在某些情況下,map函數甚至可能比列表理解更快,更簡潔!
2.One statement per line
每一行一個語句,尤其在複雜的邏輯表達式的時候,這樣會清晰很容易閱讀。
雖然列表推導等一些複合語句因其簡潔性和表達性而被允許和讚賞,但在同一行代碼上有兩個脫節語句是不好的做法
3.Explicit code
Python因為技巧性非常高,有的時候濫用一些黑魔法,過度的使用技巧而反而失去了代碼本身的直觀性。
Python代碼怎麼寫
聽聽頂尖Python大神 kennethreitz的建議
瞭解K神( kennethreitz)是從它牛逼的requests庫開始,號稱最頂尖的Python程序員之一。大神有很多作品,而且還有一個非常勵志的傳奇故事,從一個胖胖的不修邊幅的碼農,勵志減肥而變成一個愛攝影玩音樂的,有藝術家氣息程序員。今天我們一起來拜讀一下大神關於寫Python代碼的建議!
1.Mutable and immutable types
Python有兩種內置或用戶定義的類型。
- 可變類型是允許就地修改內容的類型。典型的可變列表是列表和詞典:所有列表都有變異方法,如 list.append()或list.pop(),並且可以在適當的位置進行修改。詞典也是如此。不可變類型不提供改變其內容的方法。例如,設置為整數6的變量x沒有“增量”方法。如果要計算x + 1,則必須創建另一個整數併為其指定名稱。
體會一下這Best這招,選擇是使用map函數,它可以將內置函數類型str映射到迭代器range。這會生成一個map對象,然後就可以像其他示例一樣join。在某些情況下,map函數甚至可能比列表理解更快,更簡潔!
2.One statement per line
每一行一個語句,尤其在複雜的邏輯表達式的時候,這樣會清晰很容易閱讀。
雖然列表推導等一些複合語句因其簡潔性和表達性而被允許和讚賞,但在同一行代碼上有兩個脫節語句是不好的做法
3.Explicit code
Python因為技巧性非常高,有的時候濫用一些黑魔法,過度的使用技巧而反而失去了代碼本身的直觀性。
字典的更新有幾種方法,dict(**locals)本意是想生成一個新的字典返回。在上面的好代碼中,顯式地從調用者接收x和y,並返回顯式字典。使用此函數的開發人員通過讀取第一行和最後一行就能確切地知道要做什麼,而不是像壞例子的那種情況,比較晦澀難懂,不直接。
4.Returning values
關於返回值的處理
當函數的複雜性增加時,在函數體內使用多個return語句並不罕見。但是,為了保持清晰的意圖和可持續的可讀性水平,最好避免從體內的許多輸出點返回有意義的值。
在函數中返回值有兩種主要情況:函數在正常處理時返回的結果,以及指示錯誤輸入參數的錯誤情況或函數無法完成其計算的任何其他原因或任務
def complex_function(a, b, c):
if not a:
return None # Raising an exception might be better
if not b:
return None # Raising an exception might be better
# Some complex code trying to compute x from a, b and c
# Resist temptation to return x if succeeded
if not x:
# Some Plan-B computation of x
return x # One single exit point for the returned value x will help
# when maintaining the code.
(代碼可以左右滑動)
當一個函數在其正常過程中有多個主要出口時,調試返回的結果變得很困難,因此最好保留一個退出點。這也將有助於分解一些代碼路徑,如果函數有多個出口點,說明你的代碼要進一步的重構。
5.Unpacking
如果知道列表或元組的長度,則可以通過解壓縮為其元素指定名稱。比如enumerate()將為列表中的每個項提供兩個元素的元組,一個下標一個值:
for index, item in enumerate(some_list):
# do something with index and item
也可以使用它來交換變量:
a, b = b, a
嵌套解包也適用Py3.x:
a, (b, c) = 1, (2, 3)
a, *rest = [1, 2, 3]
# a = 1, rest = [2, 3]
a, *middle, c = [1, 2, 3, 4]
# a = 1, middle = [2, 3], c = 4
6.Searching for an item in a collection
有時我們需要搜索一系列的東西。讓我們看看兩個選項:列表和集合。
以下面的代碼為例:
s = set([ s , p , a , m ])
l = [ s , p , a , m ]
def lookup_set(s):
return s in s
def lookup_list(l):
return s in l
- 即使兩個函數看起來都相同,因為lookup_set利用了Python中的集合是哈希表的事實,兩者之間的查找性能是非常不同的。要確定項目是否在列表中,Python必須遍歷每個項目,直到找到匹配的項目。這很費時,特別是對於長列表。另一方面,在集合中項目的哈希將告訴Python在集合中的哪個位置尋找匹配項目。因此,即使集合很大,也可以快速完成搜索
7.Check if variable equals a constan
檢查變量是否等於常數
您不需要顯式地將值與True或None或空進行比較 - 您只需將其添加到if語句即可。
Python代碼怎麼寫
聽聽頂尖Python大神 kennethreitz的建議
瞭解K神( kennethreitz)是從它牛逼的requests庫開始,號稱最頂尖的Python程序員之一。大神有很多作品,而且還有一個非常勵志的傳奇故事,從一個胖胖的不修邊幅的碼農,勵志減肥而變成一個愛攝影玩音樂的,有藝術家氣息程序員。今天我們一起來拜讀一下大神關於寫Python代碼的建議!
1.Mutable and immutable types
Python有兩種內置或用戶定義的類型。
- 可變類型是允許就地修改內容的類型。典型的可變列表是列表和詞典:所有列表都有變異方法,如 list.append()或list.pop(),並且可以在適當的位置進行修改。詞典也是如此。不可變類型不提供改變其內容的方法。例如,設置為整數6的變量x沒有“增量”方法。如果要計算x + 1,則必須創建另一個整數併為其指定名稱。
體會一下這Best這招,選擇是使用map函數,它可以將內置函數類型str映射到迭代器range。這會生成一個map對象,然後就可以像其他示例一樣join。在某些情況下,map函數甚至可能比列表理解更快,更簡潔!
2.One statement per line
每一行一個語句,尤其在複雜的邏輯表達式的時候,這樣會清晰很容易閱讀。
雖然列表推導等一些複合語句因其簡潔性和表達性而被允許和讚賞,但在同一行代碼上有兩個脫節語句是不好的做法
3.Explicit code
Python因為技巧性非常高,有的時候濫用一些黑魔法,過度的使用技巧而反而失去了代碼本身的直觀性。
字典的更新有幾種方法,dict(**locals)本意是想生成一個新的字典返回。在上面的好代碼中,顯式地從調用者接收x和y,並返回顯式字典。使用此函數的開發人員通過讀取第一行和最後一行就能確切地知道要做什麼,而不是像壞例子的那種情況,比較晦澀難懂,不直接。
4.Returning values
關於返回值的處理
當函數的複雜性增加時,在函數體內使用多個return語句並不罕見。但是,為了保持清晰的意圖和可持續的可讀性水平,最好避免從體內的許多輸出點返回有意義的值。
在函數中返回值有兩種主要情況:函數在正常處理時返回的結果,以及指示錯誤輸入參數的錯誤情況或函數無法完成其計算的任何其他原因或任務
def complex_function(a, b, c):
if not a:
return None # Raising an exception might be better
if not b:
return None # Raising an exception might be better
# Some complex code trying to compute x from a, b and c
# Resist temptation to return x if succeeded
if not x:
# Some Plan-B computation of x
return x # One single exit point for the returned value x will help
# when maintaining the code.
(代碼可以左右滑動)
當一個函數在其正常過程中有多個主要出口時,調試返回的結果變得很困難,因此最好保留一個退出點。這也將有助於分解一些代碼路徑,如果函數有多個出口點,說明你的代碼要進一步的重構。
5.Unpacking
如果知道列表或元組的長度,則可以通過解壓縮為其元素指定名稱。比如enumerate()將為列表中的每個項提供兩個元素的元組,一個下標一個值:
for index, item in enumerate(some_list):
# do something with index and item
也可以使用它來交換變量:
a, b = b, a
嵌套解包也適用Py3.x:
a, (b, c) = 1, (2, 3)
a, *rest = [1, 2, 3]
# a = 1, rest = [2, 3]
a, *middle, c = [1, 2, 3, 4]
# a = 1, middle = [2, 3], c = 4
6.Searching for an item in a collection
有時我們需要搜索一系列的東西。讓我們看看兩個選項:列表和集合。
以下面的代碼為例:
s = set([ s , p , a , m ])
l = [ s , p , a , m ]
def lookup_set(s):
return s in s
def lookup_list(l):
return s in l
- 即使兩個函數看起來都相同,因為lookup_set利用了Python中的集合是哈希表的事實,兩者之間的查找性能是非常不同的。要確定項目是否在列表中,Python必須遍歷每個項目,直到找到匹配的項目。這很費時,特別是對於長列表。另一方面,在集合中項目的哈希將告訴Python在集合中的哪個位置尋找匹配項目。因此,即使集合很大,也可以快速完成搜索
7.Check if variable equals a constan
檢查變量是否等於常數
您不需要顯式地將值與True或None或空進行比較 - 您只需將其添加到if語句即可。
8.Access a Dictionary Element
訪問字典元素
不要使用該dict.has_key()方法。相反使用語法或傳遞默認參數 比如x in dict ,dict.get(k,default_value)
Python代碼怎麼寫
聽聽頂尖Python大神 kennethreitz的建議
瞭解K神( kennethreitz)是從它牛逼的requests庫開始,號稱最頂尖的Python程序員之一。大神有很多作品,而且還有一個非常勵志的傳奇故事,從一個胖胖的不修邊幅的碼農,勵志減肥而變成一個愛攝影玩音樂的,有藝術家氣息程序員。今天我們一起來拜讀一下大神關於寫Python代碼的建議!
1.Mutable and immutable types
Python有兩種內置或用戶定義的類型。
- 可變類型是允許就地修改內容的類型。典型的可變列表是列表和詞典:所有列表都有變異方法,如 list.append()或list.pop(),並且可以在適當的位置進行修改。詞典也是如此。不可變類型不提供改變其內容的方法。例如,設置為整數6的變量x沒有“增量”方法。如果要計算x + 1,則必須創建另一個整數併為其指定名稱。
體會一下這Best這招,選擇是使用map函數,它可以將內置函數類型str映射到迭代器range。這會生成一個map對象,然後就可以像其他示例一樣join。在某些情況下,map函數甚至可能比列表理解更快,更簡潔!
2.One statement per line
每一行一個語句,尤其在複雜的邏輯表達式的時候,這樣會清晰很容易閱讀。
雖然列表推導等一些複合語句因其簡潔性和表達性而被允許和讚賞,但在同一行代碼上有兩個脫節語句是不好的做法
3.Explicit code
Python因為技巧性非常高,有的時候濫用一些黑魔法,過度的使用技巧而反而失去了代碼本身的直觀性。
字典的更新有幾種方法,dict(**locals)本意是想生成一個新的字典返回。在上面的好代碼中,顯式地從調用者接收x和y,並返回顯式字典。使用此函數的開發人員通過讀取第一行和最後一行就能確切地知道要做什麼,而不是像壞例子的那種情況,比較晦澀難懂,不直接。
4.Returning values
關於返回值的處理
當函數的複雜性增加時,在函數體內使用多個return語句並不罕見。但是,為了保持清晰的意圖和可持續的可讀性水平,最好避免從體內的許多輸出點返回有意義的值。
在函數中返回值有兩種主要情況:函數在正常處理時返回的結果,以及指示錯誤輸入參數的錯誤情況或函數無法完成其計算的任何其他原因或任務
def complex_function(a, b, c):
if not a:
return None # Raising an exception might be better
if not b:
return None # Raising an exception might be better
# Some complex code trying to compute x from a, b and c
# Resist temptation to return x if succeeded
if not x:
# Some Plan-B computation of x
return x # One single exit point for the returned value x will help
# when maintaining the code.
(代碼可以左右滑動)
當一個函數在其正常過程中有多個主要出口時,調試返回的結果變得很困難,因此最好保留一個退出點。這也將有助於分解一些代碼路徑,如果函數有多個出口點,說明你的代碼要進一步的重構。
5.Unpacking
如果知道列表或元組的長度,則可以通過解壓縮為其元素指定名稱。比如enumerate()將為列表中的每個項提供兩個元素的元組,一個下標一個值:
for index, item in enumerate(some_list):
# do something with index and item
也可以使用它來交換變量:
a, b = b, a
嵌套解包也適用Py3.x:
a, (b, c) = 1, (2, 3)
a, *rest = [1, 2, 3]
# a = 1, rest = [2, 3]
a, *middle, c = [1, 2, 3, 4]
# a = 1, middle = [2, 3], c = 4
6.Searching for an item in a collection
有時我們需要搜索一系列的東西。讓我們看看兩個選項:列表和集合。
以下面的代碼為例:
s = set([ s , p , a , m ])
l = [ s , p , a , m ]
def lookup_set(s):
return s in s
def lookup_list(l):
return s in l
- 即使兩個函數看起來都相同,因為lookup_set利用了Python中的集合是哈希表的事實,兩者之間的查找性能是非常不同的。要確定項目是否在列表中,Python必須遍歷每個項目,直到找到匹配的項目。這很費時,特別是對於長列表。另一方面,在集合中項目的哈希將告訴Python在集合中的哪個位置尋找匹配項目。因此,即使集合很大,也可以快速完成搜索
7.Check if variable equals a constan
檢查變量是否等於常數
您不需要顯式地將值與True或None或空進行比較 - 您只需將其添加到if語句即可。
8.Access a Dictionary Element
訪問字典元素
不要使用該dict.has_key()方法。相反使用語法或傳遞默認參數 比如x in dict ,dict.get(k,default_value)
9.Filtering a list
過濾列表壞的做法,或者初學者經常會犯的錯誤。
Python代碼怎麼寫
聽聽頂尖Python大神 kennethreitz的建議
瞭解K神( kennethreitz)是從它牛逼的requests庫開始,號稱最頂尖的Python程序員之一。大神有很多作品,而且還有一個非常勵志的傳奇故事,從一個胖胖的不修邊幅的碼農,勵志減肥而變成一個愛攝影玩音樂的,有藝術家氣息程序員。今天我們一起來拜讀一下大神關於寫Python代碼的建議!
1.Mutable and immutable types
Python有兩種內置或用戶定義的類型。
- 可變類型是允許就地修改內容的類型。典型的可變列表是列表和詞典:所有列表都有變異方法,如 list.append()或list.pop(),並且可以在適當的位置進行修改。詞典也是如此。不可變類型不提供改變其內容的方法。例如,設置為整數6的變量x沒有“增量”方法。如果要計算x + 1,則必須創建另一個整數併為其指定名稱。
體會一下這Best這招,選擇是使用map函數,它可以將內置函數類型str映射到迭代器range。這會生成一個map對象,然後就可以像其他示例一樣join。在某些情況下,map函數甚至可能比列表理解更快,更簡潔!
2.One statement per line
每一行一個語句,尤其在複雜的邏輯表達式的時候,這樣會清晰很容易閱讀。
雖然列表推導等一些複合語句因其簡潔性和表達性而被允許和讚賞,但在同一行代碼上有兩個脫節語句是不好的做法
3.Explicit code
Python因為技巧性非常高,有的時候濫用一些黑魔法,過度的使用技巧而反而失去了代碼本身的直觀性。
字典的更新有幾種方法,dict(**locals)本意是想生成一個新的字典返回。在上面的好代碼中,顯式地從調用者接收x和y,並返回顯式字典。使用此函數的開發人員通過讀取第一行和最後一行就能確切地知道要做什麼,而不是像壞例子的那種情況,比較晦澀難懂,不直接。
4.Returning values
關於返回值的處理
當函數的複雜性增加時,在函數體內使用多個return語句並不罕見。但是,為了保持清晰的意圖和可持續的可讀性水平,最好避免從體內的許多輸出點返回有意義的值。
在函數中返回值有兩種主要情況:函數在正常處理時返回的結果,以及指示錯誤輸入參數的錯誤情況或函數無法完成其計算的任何其他原因或任務
def complex_function(a, b, c):
if not a:
return None # Raising an exception might be better
if not b:
return None # Raising an exception might be better
# Some complex code trying to compute x from a, b and c
# Resist temptation to return x if succeeded
if not x:
# Some Plan-B computation of x
return x # One single exit point for the returned value x will help
# when maintaining the code.
(代碼可以左右滑動)
當一個函數在其正常過程中有多個主要出口時,調試返回的結果變得很困難,因此最好保留一個退出點。這也將有助於分解一些代碼路徑,如果函數有多個出口點,說明你的代碼要進一步的重構。
5.Unpacking
如果知道列表或元組的長度,則可以通過解壓縮為其元素指定名稱。比如enumerate()將為列表中的每個項提供兩個元素的元組,一個下標一個值:
for index, item in enumerate(some_list):
# do something with index and item
也可以使用它來交換變量:
a, b = b, a
嵌套解包也適用Py3.x:
a, (b, c) = 1, (2, 3)
a, *rest = [1, 2, 3]
# a = 1, rest = [2, 3]
a, *middle, c = [1, 2, 3, 4]
# a = 1, middle = [2, 3], c = 4
6.Searching for an item in a collection
有時我們需要搜索一系列的東西。讓我們看看兩個選項:列表和集合。
以下面的代碼為例:
s = set([ s , p , a , m ])
l = [ s , p , a , m ]
def lookup_set(s):
return s in s
def lookup_list(l):
return s in l
- 即使兩個函數看起來都相同,因為lookup_set利用了Python中的集合是哈希表的事實,兩者之間的查找性能是非常不同的。要確定項目是否在列表中,Python必須遍歷每個項目,直到找到匹配的項目。這很費時,特別是對於長列表。另一方面,在集合中項目的哈希將告訴Python在集合中的哪個位置尋找匹配項目。因此,即使集合很大,也可以快速完成搜索
7.Check if variable equals a constan
檢查變量是否等於常數
您不需要顯式地將值與True或None或空進行比較 - 您只需將其添加到if語句即可。
8.Access a Dictionary Element
訪問字典元素
不要使用該dict.has_key()方法。相反使用語法或傳遞默認參數 比如x in dict ,dict.get(k,default_value)
9.Filtering a list
過濾列表壞的做法,或者初學者經常會犯的錯誤。
好的做法是使用filter函數,從Python 3.0開始,該filter()函數返回迭代器而不是列表。如果你真的需要一個列表,前面加一個list()即可!
10.Read From a File
使用語法從文件中讀取,這將自動為您關閉文件,一定要用with open
Python代碼怎麼寫
聽聽頂尖Python大神 kennethreitz的建議
瞭解K神( kennethreitz)是從它牛逼的requests庫開始,號稱最頂尖的Python程序員之一。大神有很多作品,而且還有一個非常勵志的傳奇故事,從一個胖胖的不修邊幅的碼農,勵志減肥而變成一個愛攝影玩音樂的,有藝術家氣息程序員。今天我們一起來拜讀一下大神關於寫Python代碼的建議!
1.Mutable and immutable types
Python有兩種內置或用戶定義的類型。
- 可變類型是允許就地修改內容的類型。典型的可變列表是列表和詞典:所有列表都有變異方法,如 list.append()或list.pop(),並且可以在適當的位置進行修改。詞典也是如此。不可變類型不提供改變其內容的方法。例如,設置為整數6的變量x沒有“增量”方法。如果要計算x + 1,則必須創建另一個整數併為其指定名稱。
體會一下這Best這招,選擇是使用map函數,它可以將內置函數類型str映射到迭代器range。這會生成一個map對象,然後就可以像其他示例一樣join。在某些情況下,map函數甚至可能比列表理解更快,更簡潔!
2.One statement per line
每一行一個語句,尤其在複雜的邏輯表達式的時候,這樣會清晰很容易閱讀。
雖然列表推導等一些複合語句因其簡潔性和表達性而被允許和讚賞,但在同一行代碼上有兩個脫節語句是不好的做法
3.Explicit code
Python因為技巧性非常高,有的時候濫用一些黑魔法,過度的使用技巧而反而失去了代碼本身的直觀性。
字典的更新有幾種方法,dict(**locals)本意是想生成一個新的字典返回。在上面的好代碼中,顯式地從調用者接收x和y,並返回顯式字典。使用此函數的開發人員通過讀取第一行和最後一行就能確切地知道要做什麼,而不是像壞例子的那種情況,比較晦澀難懂,不直接。
4.Returning values
關於返回值的處理
當函數的複雜性增加時,在函數體內使用多個return語句並不罕見。但是,為了保持清晰的意圖和可持續的可讀性水平,最好避免從體內的許多輸出點返回有意義的值。
在函數中返回值有兩種主要情況:函數在正常處理時返回的結果,以及指示錯誤輸入參數的錯誤情況或函數無法完成其計算的任何其他原因或任務
def complex_function(a, b, c):
if not a:
return None # Raising an exception might be better
if not b:
return None # Raising an exception might be better
# Some complex code trying to compute x from a, b and c
# Resist temptation to return x if succeeded
if not x:
# Some Plan-B computation of x
return x # One single exit point for the returned value x will help
# when maintaining the code.
(代碼可以左右滑動)
當一個函數在其正常過程中有多個主要出口時,調試返回的結果變得很困難,因此最好保留一個退出點。這也將有助於分解一些代碼路徑,如果函數有多個出口點,說明你的代碼要進一步的重構。
5.Unpacking
如果知道列表或元組的長度,則可以通過解壓縮為其元素指定名稱。比如enumerate()將為列表中的每個項提供兩個元素的元組,一個下標一個值:
for index, item in enumerate(some_list):
# do something with index and item
也可以使用它來交換變量:
a, b = b, a
嵌套解包也適用Py3.x:
a, (b, c) = 1, (2, 3)
a, *rest = [1, 2, 3]
# a = 1, rest = [2, 3]
a, *middle, c = [1, 2, 3, 4]
# a = 1, middle = [2, 3], c = 4
6.Searching for an item in a collection
有時我們需要搜索一系列的東西。讓我們看看兩個選項:列表和集合。
以下面的代碼為例:
s = set([ s , p , a , m ])
l = [ s , p , a , m ]
def lookup_set(s):
return s in s
def lookup_list(l):
return s in l
- 即使兩個函數看起來都相同,因為lookup_set利用了Python中的集合是哈希表的事實,兩者之間的查找性能是非常不同的。要確定項目是否在列表中,Python必須遍歷每個項目,直到找到匹配的項目。這很費時,特別是對於長列表。另一方面,在集合中項目的哈希將告訴Python在集合中的哪個位置尋找匹配項目。因此,即使集合很大,也可以快速完成搜索
7.Check if variable equals a constan
檢查變量是否等於常數
您不需要顯式地將值與True或None或空進行比較 - 您只需將其添加到if語句即可。
8.Access a Dictionary Element
訪問字典元素
不要使用該dict.has_key()方法。相反使用語法或傳遞默認參數 比如x in dict ,dict.get(k,default_value)
9.Filtering a list
過濾列表壞的做法,或者初學者經常會犯的錯誤。
好的做法是使用filter函數,從Python 3.0開始,該filter()函數返回迭代器而不是列表。如果你真的需要一個列表,前面加一個list()即可!
10.Read From a File
使用語法從文件中讀取,這將自動為您關閉文件,一定要用with open
同學們,支持就請關注小編
!
11.Line Continuations
代碼長度的持續
- 當我們的邏輯代碼行長於可接受的限制時(PEP8規定是79個字符),需要將其拆分為多個物理行。如果行的最後一個字符是反斜槓,Python解釋器將連接連續的行。這在某些情況下很有用,但通常應該避免因為它的脆弱性。在反斜槓之後添加到行尾的空格會破壞代碼並可能產生意外結果。
Bad:
my_very_big_string = """For a long time I used to go to bed early. Sometimes,
when I had put out my candle, my eyes would close so quickly that I had not even
time to say “I’m going to sleep.”"""
from some.deep.module.inside.a.module import a_nice_function, another_nice_function,
yet_another_nice_function
Good:
my_very_big_string = (
"For a long time I used to go to bed early. Sometimes, "
"when I had put out my candle, my eyes would close so quickly "
"that I had not even time to say “I’m going to sleep.”"
)
from some.deep.module.inside.a.module import (
a_nice_function, another_nice_function, yet_another_nice_function)
更好的做法是在元素周圍使用括號。在行尾留下一個未閉合的括號,Python解釋器將加入下一行,直到括號被關閉。對於大括號和方括號,同樣的行為也適用。
Python代碼怎麼寫
聽聽頂尖Python大神 kennethreitz的建議
瞭解K神( kennethreitz)是從它牛逼的requests庫開始,號稱最頂尖的Python程序員之一。大神有很多作品,而且還有一個非常勵志的傳奇故事,從一個胖胖的不修邊幅的碼農,勵志減肥而變成一個愛攝影玩音樂的,有藝術家氣息程序員。今天我們一起來拜讀一下大神關於寫Python代碼的建議!
1.Mutable and immutable types
Python有兩種內置或用戶定義的類型。
- 可變類型是允許就地修改內容的類型。典型的可變列表是列表和詞典:所有列表都有變異方法,如 list.append()或list.pop(),並且可以在適當的位置進行修改。詞典也是如此。不可變類型不提供改變其內容的方法。例如,設置為整數6的變量x沒有“增量”方法。如果要計算x + 1,則必須創建另一個整數併為其指定名稱。
體會一下這Best這招,選擇是使用map函數,它可以將內置函數類型str映射到迭代器range。這會生成一個map對象,然後就可以像其他示例一樣join。在某些情況下,map函數甚至可能比列表理解更快,更簡潔!
2.One statement per line
每一行一個語句,尤其在複雜的邏輯表達式的時候,這樣會清晰很容易閱讀。
雖然列表推導等一些複合語句因其簡潔性和表達性而被允許和讚賞,但在同一行代碼上有兩個脫節語句是不好的做法
3.Explicit code
Python因為技巧性非常高,有的時候濫用一些黑魔法,過度的使用技巧而反而失去了代碼本身的直觀性。
字典的更新有幾種方法,dict(**locals)本意是想生成一個新的字典返回。在上面的好代碼中,顯式地從調用者接收x和y,並返回顯式字典。使用此函數的開發人員通過讀取第一行和最後一行就能確切地知道要做什麼,而不是像壞例子的那種情況,比較晦澀難懂,不直接。
4.Returning values
關於返回值的處理
當函數的複雜性增加時,在函數體內使用多個return語句並不罕見。但是,為了保持清晰的意圖和可持續的可讀性水平,最好避免從體內的許多輸出點返回有意義的值。
在函數中返回值有兩種主要情況:函數在正常處理時返回的結果,以及指示錯誤輸入參數的錯誤情況或函數無法完成其計算的任何其他原因或任務
def complex_function(a, b, c):
if not a:
return None # Raising an exception might be better
if not b:
return None # Raising an exception might be better
# Some complex code trying to compute x from a, b and c
# Resist temptation to return x if succeeded
if not x:
# Some Plan-B computation of x
return x # One single exit point for the returned value x will help
# when maintaining the code.
(代碼可以左右滑動)
當一個函數在其正常過程中有多個主要出口時,調試返回的結果變得很困難,因此最好保留一個退出點。這也將有助於分解一些代碼路徑,如果函數有多個出口點,說明你的代碼要進一步的重構。
5.Unpacking
如果知道列表或元組的長度,則可以通過解壓縮為其元素指定名稱。比如enumerate()將為列表中的每個項提供兩個元素的元組,一個下標一個值:
for index, item in enumerate(some_list):
# do something with index and item
也可以使用它來交換變量:
a, b = b, a
嵌套解包也適用Py3.x:
a, (b, c) = 1, (2, 3)
a, *rest = [1, 2, 3]
# a = 1, rest = [2, 3]
a, *middle, c = [1, 2, 3, 4]
# a = 1, middle = [2, 3], c = 4
6.Searching for an item in a collection
有時我們需要搜索一系列的東西。讓我們看看兩個選項:列表和集合。
以下面的代碼為例:
s = set([ s , p , a , m ])
l = [ s , p , a , m ]
def lookup_set(s):
return s in s
def lookup_list(l):
return s in l
- 即使兩個函數看起來都相同,因為lookup_set利用了Python中的集合是哈希表的事實,兩者之間的查找性能是非常不同的。要確定項目是否在列表中,Python必須遍歷每個項目,直到找到匹配的項目。這很費時,特別是對於長列表。另一方面,在集合中項目的哈希將告訴Python在集合中的哪個位置尋找匹配項目。因此,即使集合很大,也可以快速完成搜索
7.Check if variable equals a constan
檢查變量是否等於常數
您不需要顯式地將值與True或None或空進行比較 - 您只需將其添加到if語句即可。
8.Access a Dictionary Element
訪問字典元素
不要使用該dict.has_key()方法。相反使用語法或傳遞默認參數 比如x in dict ,dict.get(k,default_value)
9.Filtering a list
過濾列表壞的做法,或者初學者經常會犯的錯誤。
好的做法是使用filter函數,從Python 3.0開始,該filter()函數返回迭代器而不是列表。如果你真的需要一個列表,前面加一個list()即可!
10.Read From a File
使用語法從文件中讀取,這將自動為您關閉文件,一定要用with open
同學們,支持就請關注小編
!
11.Line Continuations
代碼長度的持續
- 當我們的邏輯代碼行長於可接受的限制時(PEP8規定是79個字符),需要將其拆分為多個物理行。如果行的最後一個字符是反斜槓,Python解釋器將連接連續的行。這在某些情況下很有用,但通常應該避免因為它的脆弱性。在反斜槓之後添加到行尾的空格會破壞代碼並可能產生意外結果。
Bad:
my_very_big_string = """For a long time I used to go to bed early. Sometimes,
when I had put out my candle, my eyes would close so quickly that I had not even
time to say “I’m going to sleep.”"""
from some.deep.module.inside.a.module import a_nice_function, another_nice_function,
yet_another_nice_function
Good:
my_very_big_string = (
"For a long time I used to go to bed early. Sometimes, "
"when I had put out my candle, my eyes would close so quickly "
"that I had not even time to say “I’m going to sleep.”"
)
from some.deep.module.inside.a.module import (
a_nice_function, another_nice_function, yet_another_nice_function)
更好的做法是在元素周圍使用括號。在行尾留下一個未閉合的括號,Python解釋器將加入下一行,直到括號被關閉。對於大括號和方括號,同樣的行為也適用。
Python資料獲取方式:轉發+私信【Python】
大神的指導非常有用,通過這些建議的招式,我們需要慢慢的思考為啥要這樣寫,這樣背後的原理是啥!透過這些建議來理解大神對Python代碼的思考,從來慢慢的領悟Python之美,昇華自己的Python功力!