十大Python編程技巧,助你快速成為Python“大神”


十大Python編程技巧,助你快速成為Python“大神”


Python是初學者最受歡迎的編程語言之一,使其成為全世界的學校中使用最廣泛的語言。

但是,學習Python並非易事。首先,你首先需要找到最佳的學習途徑,這本身就很難。有成千上萬種不同的Python課程和教程,都聲稱是最好的。

僅僅練習不是完美的,但是完美的練習才是完美的。這意味著你要保證始終遵循最佳編碼習慣(對您的代碼進行註釋,使用正確的語法等),否則你最終可能會養成不良習慣,這可能會影響你將來的寫代碼的工作。

通用公約提供了所有的可維護性、清晰度、一致性,也為良好的編程習慣奠定了基礎。它沒有做的是堅持要你違背自己的意願,這就是Python!--2001–06–16,Tim Peters在comp.lang.python上是這樣介紹Python的。

在本文中,將介紹十大Python編程技巧,以幫助你快速有效地使用Python進行編程!

1.可讀性很重要

編寫的程序必須能夠讓人能夠讀懂,並且能讓計算機執行。--哈爾·阿伯森

首先,請遵循一些編程規範,讓程序易於閱讀。編程規範是經驗豐富的程序員在編寫其代碼時遵循的規律。沒有比忽略規範更快捷的方法來表明你是“新手”。其中的一些規範是特定於Python,其他規範則是由計算機程序員用在其他計算機語言中。

十大Python編程技巧,助你快速成為Python“大神”


從本質上講,可讀性是一種特性,它指定另一個人可以更加容易地理解你代碼的某些部分(而不是你個人!)。

舉例來說,我並不習慣用垂直對齊方式來寫,也不用打開定界符來對齊函數的參數。

<code># No, to avoid: 
func = long_function_name(var_one, var_two,
var_three, var_four)
#Yes,
func = long_function_name(var_one, var_two,
var_three, var_four)/<code>

我們經常做的另一件重要事情是類似於我們以前看過或寫過的程序,這就是為什麼我們接觸可讀程序對學習編程很重要的原因。

2.避免無用的條件

通常,一段非常長的判斷條件的語句:if & elif & …. & else 是需要重構代碼的標誌,這些判斷條件讓你的代碼冗長而又難以解釋。有時它們很容易被替換,例如,我曾經做過以下事情:

<code>def f():
if condition:
\treturn True
else:

\treturn False/<code>

該函數返回一個布爾值,那麼為什麼還要使用 if 塊 呢?正確的做法是:

<code>def f():
\treturn condition/<code>

在Hackerrank挑戰中,給出一個年份,你需要編寫一個函數來判斷該年份是否是閏年。在公曆中,必須考慮三個條件來確定是否是閏年:

  • 該年可以整除以4,即是閏年,除非:
  • 年份可以平均除以100,不是閏年,除非:
  • 年份也可以平均除以400,即是閏年。

因此,在這個挑戰中,你需要忘了 if else,只是做到以下幾點:

<code>def is_leap(year):
return year % 4 == 0 and (year % 400 == 0 or year % 100 != 0)/<code>

3.充分利用空白

  • 切勿混用製表符和空格
  • 函數之間的換行符
  • 班級之間有兩個換行符
  • 在字典,列表,元組,參數列表中的參數之後在字典中的“,”之後以及在字典中“:”之後但在其之前不能添加空格。
  • 在賦值和比較周圍放置空格(列表中的參數除外)
  • 在左括號或參數列表之前沒有空格。

4.文檔字符串和註釋

  • Docstrings =如何使用代碼
  • 註釋=為什麼以及代碼如何工作

文檔字符串說明了如何使用代碼:

  • 解釋功能的目的,即使它對你來說似乎很明顯,因為以後不一定對其他人也很明顯。
  • 描述期望的參數,返回的值和引發的異常。
  • 如果該方法與單個調用者緊密耦合,請提及所調用的函數。

這些註釋說明了代碼維護人員的需求。示例包括給自己的註釋,例如:

#!!! BUG:…

#!!! FIX:這是一個黑客

#??? 為什麼在這裡?

編寫好的文檔字符串和註釋是你的責任,因此請始保持在最新狀態!進行更改時,請確保註釋和文檔字符串與代碼一致。

5.變量和賦值

用其他編程語言:

<code>c = a 
a = b
b = c/<code>

在Python中,最好在一行代碼中使用分配:

<code>b,a = a,b/<code>

你可能已經看過它,但是你知道它是如何工作的嗎?

  • 逗號是構建元組的語法。
  • 在右側創建一個元組(元組包裝)。
  • 元組是左側的目標(元組解包)。

其他例子:

<code>在結構化數據循環中很有用(上面的變量user已保留):/<code>

在結構化數據循環中很有用(上面的變量user已保留):

<code>>>> people = [user, ['German', 'GBT', 'unlisted']]
>>> for (name, title, phone) in people:
... print (name, phone)
...
Jan +1-888-222-1546
German unlisted/<code>

也可以採取相反的方式,只需確保左右具有相同的結構即可:

<code>>>> jan, (gname, gtitle, gphone) = people
>>> gname
'German'
>>> gtitle
'GBT'
>>> gphone
'unlisted'
>>> jan
['Jan', 'Gomez', '+1-888-222-1546']/<code>

6.列表串聯與聯接

讓我們從字符串列表開始:

<code>colors = ['red', 'blue', 'green', 'yellow']/<code>

我們希望將這些鏈條連接在一起以創建一條長鏈。特別是當子字符串的數量很大時,請避免這樣做:

<code>result = ''
for s in colors:
result += s/<code>

因為佔用大量內存和性能,這些代碼運行將會變得非常慢。總和將累加、存儲,然後繼續進行中間步驟。

相反,請執行以下操作:

<code>

join()方法使得在一次通過的整個副本。當你僅處理幾個字符串時,它沒有什麼區別。但是要養成最佳地構建鏈的習慣,因為使用成百上千的字符串,確實會有所作為。

這裡是一些使用 join()方法的技術。如果要使用空格作為分隔符:

<code>result = ' '.join(colors)/<code>

或逗號和空格:

<code>result = ', '.join(colors)/<code>

為了使語法正確,我們希望除最後一個值之外的每個值之間都使用逗號。拆分列表的語法將完成其餘工作。在 [:-1] 的返回所有值,除了最後一個值,我們可以用我們的逗號串聯。

<code>colors = ['red', 'blue', 'green', 'yellow']
print ('Choose', ', '.join(colors[:-1]), \\
'or', colors[-1])
>> Choose red, blue, green or yellow/<code>

7.測試真實條件

就布爾值而言,利用Python既優雅又快捷:

<code># Do this :     # And not this :
if x: if x == True:
pass pass
# Do this : # And not this :
if items: if len(items) != 0:
pass pass
# and especially not that :
if items != []:
pass/<code>

8.儘可能使用枚舉

枚舉函數接受一個列表並返回對(索引項):

<code>items = ['zero', 'one', 'two', 'three']
>>> print list(enumerate(items))
[(0, 'zero'), (1, 'one'), (2, 'two'), (3, 'three')]/<code>

必須使用列表來顯示結果,因為枚舉是一種惰性函數,僅在需要時才一次生成一個項目,for 循環需要這種機制。一次 print 不會取得任何結果,但必須擁有要顯示的整個消息。因此,在使用 print 之前,我們會自動將生成器轉換為列表。

因此,使用下面的循環會更好:

<code>for (index, item) in enumerate(items):
print (index, item)
# compared to : # And :
index = 0 for i in range(len(items)):
for item in items: print (i, items[i])
print (index, item)
index += 1/<code>

上面的枚舉函數返回迭代器的示例中(生成器是一種迭代器),帶枚舉的版本比其他兩個版本更短,更簡單。

9.列表理解(List Comprehension)

for if 的傳統使用方式:

<code>new_list = []
for item in a_list:
if condition(item):
new_list.append(fn(item))/<code>

使用列表理解:

<code>new_list = [fn(item) for item in a_list if condition(item)]/<code>

顯而易見,列表理解比傳統的方式更加清晰直接。你可以有多個 for 循環,並且 else 可以在同一listcomp中,但不能超過兩個或三個,或者條件複雜,建議你使用傳統的

for 循環

例如,從0到9的正方形列表:

<code>>>> [n ** 2 for n in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]/<code>

上一個列表中的奇數列表:

<code>>>> [n ** 2 for n in range(10) if n % 2]
[1, 9, 25, 49, 81]/<code>

另一個例子:

<code>>>>   [(x, y) for x in (1, 2, 3, 4) if x % 2 == 0 
for y in ['a', 'b'] if y == 'b']
[(2, 'b'), (4, 'b')]/<code>

10.生成器表達式

讓我們對小於100的數字平方求和:

<code># With a loop :
total = 0
for num in range(1, 101):
total += num * num/<code>

我們還可以使用sum函數,通過建立正確的序列來為我們更快地完成工作。

<code># With a list comprehension :
total = sum([num * num for num in range(1, 101)])
# With a generator expression :
total = sum(num * num for num in xrange(1, 101))/<code>

生成器表達式類似於列表推導,除了它們的計算是懶惰的。列表理解一次計算整個結果,然後將其存儲在列表中。必要時,生成器表達式一次計算一個值。當序列很長並且生成的列表只是中間步驟而不是最終結果時,這特別有用。

例如,如果我們必須對數十億個整數的平方求和,我們將通過列表理解達到內存的飽和,但是生成器表達式不會有任何問題。但是需要一定的運算時間!

<code>total = sum(num * num for num in range(1, 1000000000))/<code>

語法上的差異是列表理解中帶有方括號,而生成器表達式則沒有。生成器表達式有時需要括號,因此你需要一直使用它們。

簡而言之 :

  • 當預期結果是列表時,請使用列表理解
  • 當列表只是中間結果時,請使用生成器表達式
十大Python編程技巧,助你快速成為Python“大神”


結論

在本文中,介紹了一些學習Python編程的最佳技巧。如果你真的想成為一名程序員或在你的技能中增加編程技能,那麼學習Python是一個不錯的起點。尋找高質量的在線Python培訓課程,並開始瞭解如何使用Python編程。我建議你在繼續學習更困難的概念之前,通過交互式課程學習基礎知識。

你也不要過多地加快學習過程,否則可能會錯過重要信息。做筆記,並確保定期檢查它們,並嘗試練習練習儘可能多地編寫代碼。

與正在像你一樣學習的同事保持聯繫,並且在遇到問題時不要害怕問問題。在遇到問題時幫助他人可能是一個很好的回顧,而與他人的代碼一起工作是學習新事物的好方法。

如果你完成所有這些操作,沒有什麼可以阻止你!你還在等什麼?立即開始使用Python進行編程吧!


原文鏈接:https://towardsdatascience.com/i-thought-i-was-mastering-python-until-i-discovered-these-tricks-e40d9c71f4e2

《 Python代碼樣式指南》:https://www.python.org/dev/peps/pep-0008/


本文由未艾信息(www.weainfo.net)編譯,

查看更多最新資訊,歡迎大家點擊閱讀原文登錄我們的AI社區。

以及關注我們的公眾號:為AI吶喊(weainahan)


分享到:


相關文章: