日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Python的優(yōu)秀實(shí)踐和技巧,助您快速有效地編碼

Python作為最受初學(xué)者歡迎的編程語(yǔ)言之一,是世界各地學(xué)校中被最廣泛教授的語(yǔ)言。

創(chuàng)新互聯(lián)公司專(zhuān)注為客戶(hù)提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、武威網(wǎng)絡(luò)推廣、微信小程序定制開(kāi)發(fā)、武威網(wǎng)絡(luò)營(yíng)銷(xiāo)、武威企業(yè)策劃、武威品牌公關(guān)、搜索引擎seo、人物專(zhuān)訪(fǎng)、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供武威建站搭建服務(wù),24小時(shí)服務(wù)熱線(xiàn):13518219792,官方網(wǎng)址:www.cdcxhl.com

然而,學(xué)習(xí)Python并非易事。首先,需要找到最佳的在線(xiàn)學(xué)習(xí)途徑,而這本身就很困難。市面上有成千上萬(wàn)種不同的Python課程和輔導(dǎo),都聲稱(chēng)自己是最好的。

的確,僅憑練習(xí)是不夠完美的,但完美的練習(xí)卻是完美的。這意味著,需確保自己始終遵循著最佳編碼實(shí)踐(對(duì)代碼進(jìn)行注釋、使用正確句法等),反之,則可能會(huì)養(yǎng)成一些不良習(xí)慣,影響您在編碼行業(yè)的未來(lái)發(fā)展。

“通用規(guī)范提供了所有的可維護(hù)性,清晰性,一致性,也為良好的編程習(xí)慣奠定基礎(chǔ)。它不能做的就是違背您的意愿,堅(jiān)持讓您學(xué)習(xí)它。這就是Python!”

— Tim Peters 發(fā)表于 comp.lang.python, 2001–06–16

在本篇文章中,我將分享十個(gè)幫助您快速有效地用Python進(jìn)行編碼的技巧。

1. 可讀性的重要性

程序必須為了人們能夠讀懂而編寫(xiě),其次使機(jī)器能夠執(zhí)行。

Hal Abelson(https://www.azquotes.com/author/38260-Hal_Abelson)

首先,遵循編程規(guī)范,使程序易于閱讀。編程規(guī)范是經(jīng)驗(yàn)豐富的程序員在編寫(xiě)其代碼時(shí)所遵循的。除忽略這些規(guī)范外,沒(méi)有任何其他方式可以更快地證明您是位“新手”。其中一些規(guī)范特定于Python;其他則可由計(jì)算機(jī)程序員用于所有語(yǔ)言中。

從本質(zhì)上講,可讀性一種特征,決定著他人理解您代碼某些部分的難易程度(而并非您本人!)。

舉例來(lái)說(shuō),我曾經(jīng)不習(xí)慣用垂直對(duì)齊方式來(lái)編寫(xiě)代碼,也不習(xí)慣用起始分隔符對(duì)齊函數(shù)參數(shù)。

 
 
 
 
  1. # No, to avoid:  
  2. func = long_function_name(var_one, var_two,  
  3.        var_three, var_four)#Yes, 
  4. func = long_function_name(var_one, var_two,  
  5.                           var_three, var_four) 

查看Python代碼樣式指南(https://www.python.org/dev/peps/pep-0008/)中的其他示例,并確定哪個(gè)示例看起來(lái)最佳。

我們經(jīng)常做的另一件重要事情是效仿曾看過(guò)或?qū)戇^(guò)的程序,這也是為何接觸可讀性強(qiáng)的程序?qū)τ诰幊虒W(xué)習(xí)十分重要的原因。

2. 避免無(wú)用條件

通常,一串if & elif & …. & else長(zhǎng)條件是代碼需要重構(gòu)的標(biāo)志。這些條件使您的代碼冗長(zhǎng),且十分難于解釋。有時(shí)這些代碼可以被很容易地替換,例如,我曾經(jīng)常這樣做過(guò):

 
 
 
 
  1. def f(): 
  2.     if condition: 
  3.         return True 
  4.     else: 
  5.         return False 

這真是愚蠢!該函數(shù)返回一個(gè)布爾值,那么為什么還要首先使用if塊呢?正確的做法是:

 
 
 
 
  1. def f(): 
  2.        return condition 

在一項(xiàng)Hackerrank挑戰(zhàn)中,參賽者需要編寫(xiě)一個(gè)函數(shù)來(lái)確定給定的年份是否為閏年。在公歷中,須考慮三個(gè)標(biāo)準(zhǔn)來(lái)確定閏年:

  • 該年份可被4整除,為閏年,除非:
  • 該年份同樣可被100整除,不是閏年,除非:
  • 該年份也可被400整除。為閏年

在這項(xiàng)挑戰(zhàn)中,不要考慮ifs和elses條件,僅做如下即可:

 
 
 
 
  1. def is_leap(year): 
  2.     return year % 4 == 0 and (year % 400 == 0 or year % 100 != 0) 

3. 適當(dāng)使用空白

  • 切勿混淆鍵盤(pán)制表定位鍵與空格鍵
  • 函數(shù)間進(jìn)行一次換行
  • 等級(jí)間進(jìn)行兩次換行
  • 在程序庫(kù)、列表、元組、自變量列表中的自變量的“,”后輸入空格,以及在程序庫(kù)的“:”后輸入空格。
  • 在分配和比較前后放置空格(列表中的自變量除外)
  • 括號(hào)前后或參數(shù)列表前無(wú)空格
 
 
 
 
  1. def function(key, value=0):  
  2.     """Return a dictionary and a list..."""  
  3.     d = {key: value}  
  4.     l = [key, value]  
  5.     return d, l 

4. 文檔字符串和注釋

  • 文檔字符串= 如何使用代
  • 注釋=為何代碼能(合理)執(zhí)行和如何執(zhí)行

文檔字符串解釋了如何使用代碼:

  • 解釋函數(shù)用途,即使對(duì)您而言,這個(gè)用途十分明顯。但以后,其用途對(duì)他人來(lái)說(shuō),不一定同樣明顯。
  • 描述期望參數(shù)、返回值及例外情況。
  • 如果該類(lèi)函數(shù)與單個(gè)Caller緊密耦合,請(qǐng)?zhí)峒罢{(diào)用函數(shù)。

這些注釋向代碼維護(hù)人員說(shuō)明維護(hù)需求。下面的示例也包括給自己的注釋?zhuān)纾?/p>

  • # !!! BUG: …
  • # !!! FIX: This is a hack
  • # ??? Why is this here?

編寫(xiě)良好的文檔字符串和注釋是您的責(zé)任,因此請(qǐng)始終使它們保持最新!在進(jìn)行更改時(shí),請(qǐng)確保注釋和文檔字符串與代碼一致。

您將在“文檔字符串慣例”

(https://www.python.org/dev/peps/pep-0257/)中找到專(zhuān)門(mén)用于文檔字符串的詳細(xì)PEP

5. 變量和分配

在其他編程語(yǔ)言中:

 
 
 
 
  1. c = a 
  2. a = b 
  3. b = c 

在Python中,最好將分配項(xiàng)放入一個(gè)代碼行中:

 
 
 
 
  1. b, aa = a, b 

您可能已經(jīng)看到代碼,但您知道它如何執(zhí)行嗎?

  • 逗號(hào)是構(gòu)造元組的句法。
  • 在右側(cè)創(chuàng)建一個(gè)元組(元組包)。
  • 元組是左側(cè)的目標(biāo)(元組拆包)。

其他示例:

 
 
 
 
  1. result = ''  
  2. for s in colors:  
  3.     result += s 

在結(jié)構(gòu)化數(shù)據(jù)循環(huán)中很有用(已保留上述變量名):

 
 
 
 
  1. result = ' '.join(colors) 

也可以采取相反的方式,只需確保左右具有相同的結(jié)構(gòu)即可:

 
 
 
 
  1. >>> jan, (gname, gtitle, gphone) = people  
  2. >>> gname  
  3. 'German'  
  4. >>> gtitle  
  5. 'GBT'  
  6. >>> gphone  
  7. 'unlisted'  
  8. >>> jan  
  9. ['Jan', 'Gomez', '+1-888-222-1546'] 

6. 列表拼接&合并

首先從字符串列表開(kāi)始:

 
 
 
 
  1. colors = ['red', 'blue', 'green', 'yellow'] 

我們想將這些字符串連接在一起以創(chuàng)建一條長(zhǎng)鏈。特別是當(dāng)子字符串的數(shù)量很大時(shí),請(qǐng)避免這樣做:

 
 
 
 
  1. result = ''  
  2. for s in colors:  
  3.     result += s 

這樣做非常慢。且占用大量?jī)?nèi)存和性能??偤蛯⒗奂?、存儲(chǔ)、然后繼續(xù)進(jìn)行每個(gè)中間步驟。

取而代之,執(zhí)行以下操作:

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

join()函數(shù)可一次完成整個(gè)副本。當(dāng)僅處理幾個(gè)字符串時(shí),它與其他函數(shù)沒(méi)有什么區(qū)別。卻能使您養(yǎng)成使用最佳函數(shù)構(gòu)建長(zhǎng)鏈的習(xí)慣,因?yàn)槊鎸?duì)成百上千的字符串,使用join()函數(shù)的確大有不同。

下面是使用join()函數(shù)的一些技巧。如果想使用空格作為分隔符:

 
 
 
 
  1. # Do this :     # And not this :  
  2. if x:             if x == True:  
  3.    pass                  pass# Do this :     # And not this :  
  4. if items:         if len(items) != 0:  
  5.     pass                pass# and especially not that :  
  6.         if items != []:  
  7.                pass 

或逗號(hào)和空格:

 
 
 
 
  1. result = ', '.join(colors) 

為了使句子語(yǔ)法正確,除最后一個(gè)值之外的每個(gè)值之間都使用逗號(hào)(人們更喜歡使用“或”)。拆分列表的語(yǔ)法將完成其余工作。[:-1]返回除最后一個(gè)值外的所有內(nèi)容,我們可以將其與逗號(hào)連接。

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

7. 測(cè)試真實(shí)條件

就布爾值而言,利用Python既簡(jiǎn)潔又快速:

 
 
 
 
  1. # Do this :     # And not this :  
  2. if x:             if x == True:  
  3.    pass                  pass# Do this :     # And not this :  
  4. if items:         if len(items) != 0:  
  5.     pass                pass# and especially not that :  
  6.         if items != []:  
  7.                pass 

8. 盡可能使用枚舉函數(shù)

枚舉函數(shù)獲取一個(gè)列表并返回?cái)?shù)對(duì)(指數(shù),數(shù)項(xiàng)):

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

使用列表顯示結(jié)果是必要的,因?yàn)槊杜e函數(shù)是一種惰性函數(shù),僅在要求時(shí)才一次生成一個(gè)數(shù)項(xiàng)(一對(duì))。for循環(huán)需要這種機(jī)制。一次Print函數(shù)不會(huì)得到任何結(jié)果,但必須擁有要顯示的完整消息。因此,在使用Print函數(shù)之前,我們應(yīng)自動(dòng)將生成器轉(zhuǎn)換為列表。

因此,使用下面的循環(huán)效果更佳:

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

使用枚舉函數(shù)的版本比其他兩個(gè)版本更短,更簡(jiǎn)單。以上為表明枚舉函數(shù)返回迭代器的示例(生成器是迭代器的一種)。

9. 列表推導(dǎo)式

使用for和if的傳統(tǒng)方式:

 
 
 
 
  1. 讓我們對(duì)小于100的數(shù)字平方求和:   
  2. # With a loop :  
  3. total = 0  
  4. for num in range(1, 101):  
  5.     total += num * num 

使用列表推導(dǎo)式:

 
 
 
 
  1. new_list = [fn(item) for item in a_list if condition(item)] 

列表推導(dǎo)式清晰直接。在同一個(gè)列表推導(dǎo)式中,可以包含幾個(gè)for循環(huán)和if條件,但如果超過(guò)兩個(gè)或三個(gè),或條件十分復(fù)雜,我建議您使用普通的for循環(huán)。

例如,從0至9的二次冪列表:

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

上個(gè)列表中的奇數(shù)列表:

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

更多示例:

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

10. 生成器表達(dá)式

讓我們對(duì)小于100的數(shù)字平方求和:

 
 
 
 
  1. 讓我們對(duì)小于100的數(shù)字平方求和:   
  2. # With a loop :  
  3. total = 0  
  4. for num in range(1, 101):  
  5.     total += num * num 

還可以使用sum函數(shù),通過(guò)建立正確的序列來(lái)為我們更快地完成工作。

 
 
 
 
  1.  # With a list comprehension :  
  2. total = sum([num * num for num in range(1, 101)])# With a generator expression :  
  3. total = sum(num * num for num in xrange(1, 101)) 

生成器表達(dá)式類(lèi)似于列表推導(dǎo)式,只是在計(jì)算時(shí)屬于懶惰型。列表推導(dǎo)式一次計(jì)算整個(gè)結(jié)果,然后將其存儲(chǔ)在列表中。必要時(shí),生成器表達(dá)式一次計(jì)算一個(gè)值。當(dāng)序列很長(zhǎng)并且生成的列表只是中間步驟而不是最終結(jié)果時(shí),生成器表達(dá)式特別有用。

例如,如果我們必須對(duì)數(shù)十億個(gè)整數(shù)的平方求和,使用列表推導(dǎo)會(huì)達(dá)到內(nèi)存的飽和,但使用生成器表達(dá)式不會(huì)有任何問(wèn)題。盡管這需要一段時(shí)間!

 
 
 
 
  1. total = sum(num * num for num in range(1, 1000000000)) 

二者在語(yǔ)法上的差異是列表推導(dǎo)式帶有方括號(hào),而生成器表達(dá)式則沒(méi)有。生成器表達(dá)式有時(shí)需要括號(hào),因此您應(yīng)始終使用它們。

簡(jiǎn)而言之:

  • 當(dāng)期望結(jié)果為列表時(shí)使用列表推導(dǎo)式。
  • 當(dāng)列表僅為中間結(jié)果時(shí)使用生成器表達(dá)式。

來(lái)源: https://www.azquotes.com/quote/669106

總結(jié)

本文介紹了一些學(xué)習(xí)Python編程的優(yōu)秀技巧。如果您真的想成為一名程序員或想在您的個(gè)人技能中增加編碼技能,那么學(xué)習(xí)Python是一個(gè)不錯(cuò)的起點(diǎn)。尋找高質(zhì)量的Python在線(xiàn)培訓(xùn)課程,并開(kāi)始了解如何使用Python進(jìn)行編程。我建議您在繼續(xù)學(xué)習(xí)更難的概念前,通過(guò)交互式課程學(xué)習(xí)基礎(chǔ)知識(shí)。

學(xué)習(xí)中不要急于求成,否則可能會(huì)錯(cuò)過(guò)重要信息。做筆記,并確保定期復(fù)習(xí),并盡可能多地嘗試練習(xí)編寫(xiě)代碼。

與正在像您一樣學(xué)習(xí)的同學(xué)建立聯(lián)系,遇到問(wèn)題時(shí)不要害怕提問(wèn)。在他人遇到問(wèn)題時(shí)提供幫助會(huì)是一次很好的復(fù)習(xí),與他人的代碼一起工作是學(xué)習(xí)新事物的好方法。

如果您完成所有這些操作,沒(méi)有什么可以阻止您!所以還在等什么?立即開(kāi)始使用Python進(jìn)行編程吧!


網(wǎng)站欄目:Python的優(yōu)秀實(shí)踐和技巧,助您快速有效地編碼
當(dāng)前地址:http://www.dlmjj.cn/article/dpjhdoj.html