Python初學(xué)者進(jìn)階的九大技能

前言

本文的文字及圖片來(lái)源于網(wǎng)絡(luò),僅供學(xué)習(xí)础淤、交流使用,不具有任何商業(yè)用途,如有問(wèn)題請(qǐng)及時(shí)聯(lián)系我們以作處理资铡。


Python是一種很棒的語(yǔ)言,語(yǔ)法簡(jiǎn)單边篮,無(wú)需在代碼中搜索分號(hào)己莺。對(duì)于初學(xué)者來(lái)說(shuō),Python是入門(mén)最簡(jiǎn)單的語(yǔ)言之一。

Python有大量的庫(kù)支持暂论,你還可以安裝其他庫(kù)來(lái)增加自己的編程經(jīng)驗(yàn)媒咳。

學(xué)了一陣子之后,你可能會(huì)覺(jué)得:為如此簡(jiǎn)單的操作寫(xiě)大量的代碼有些令人困惑胁艰。實(shí)際上,事情并沒(méi)有你想得那么糟智蝠。理解其背后的邏輯比寫(xiě)幾行代碼更為重要腾么。短代碼更好,但如果邏輯有問(wèn)題杈湾,那么無(wú)論如何你的代碼都會(huì)有問(wèn)題解虱。隨著經(jīng)驗(yàn)和創(chuàng)造力的增長(zhǎng),最終你的代碼將會(huì)變得更短漆撞、更好殴泰。


初學(xué)者與中級(jí)程序員

那么于宙,對(duì)于Python程序員而言,初學(xué)者和進(jìn)階者有什么區(qū)別呢悍汛?

本文將重點(diǎn)介紹以下方面:

  • 解決問(wèn)題和提出問(wèn)題捞魁;
  • XY問(wèn)題;
  • 理解代碼為何起作用(或不起作用)离咐;
  • 使用字符串谱俭;
  • 使用列表;
  • 使用循環(huán)宵蛀;
  • 使用函數(shù)(并正確談?wù)摵瘮?shù))昆著;
  • 面向?qū)ο缶幊蹋?/li>
  • 尊重PEP。

1. 解決問(wèn)題和提出問(wèn)題:

程序員缺乏解決問(wèn)題能力的話术陶,代碼出色也是枉然凑懂。

如果你解決問(wèn)題的思維不夠發(fā)達(dá),可能就無(wú)法為你要解決的問(wèn)題找到最佳的解決方案梧宫。編程不僅僅是編寫(xiě)代碼接谨,需要解決問(wèn)題才能有機(jī)會(huì)出初學(xué)者行列。

提出編程相關(guān)的問(wèn)題也很重要祟敛。如果不經(jīng)嘗試疤坝,就讓別人解決你的問(wèn)題,可能也會(huì)出局馆铁。這很難跑揉,但如果不嘗試自己解決問(wèn)題,你將對(duì)解決方案一無(wú)所得埠巨。

如果想要了解更多關(guān)于編程提問(wèn)的技能历谍,我另有一篇文章,鏈接如下(英文):How to Ask Questions About Programming:https://medium.com/better-programming/how-to-ask-questions-about-programming-dcd948fcd2bd辣垒。

2. XY問(wèn)題:

“我需要從字符串中提取最后3個(gè)字符望侈。”
“不勋桶,你不需要脱衙。只需文件擴(kuò)展名±裕”

XY問(wèn)題很有趣捐韩。你有個(gè)X問(wèn)題,當(dāng)你調(diào)用服務(wù)中心時(shí)鹃锈,會(huì)尋求Y問(wèn)題的解決方案荤胁,以解決X問(wèn)題。

上面的案例就是極好的例子屎债。如果想要文件名中的文件擴(kuò)展名仅政,很容易假設(shè)你需要的是最后3個(gè)字母垢油。

如何寫(xiě)代碼:



好極了,現(xiàn)在換成photo_of_lochness.jpeg

用戶從一開(kāi)始應(yīng)該會(huì)索要擴(kuò)展名圆丹,最后3個(gè)字母是Y問(wèn)題滩愁,而X問(wèn)題是我們想要擴(kuò)展名。



成功了辫封!

你也可以使用標(biāo)準(zhǔn)庫(kù) os.path.splitext()惊楼,點(diǎn)擊這里查看:os.path.splitext():https://www.geeksforgeeks.org/python-os-path-splitext-method/

3. 理解代碼為何起作用(不起作用)

作為新手秸讹,你可能要花幾天來(lái)對(duì)付一小段代碼。如果這段代碼突然起作用了雅倒,你可能會(huì)感覺(jué)放心璃诀,然后繼續(xù)下一段代碼。這是最糟糕的事情之一蔑匣。不理解原因只管運(yùn)行的做法劣欢,可能比不理解代碼的為什么不運(yùn)行更加危險(xiǎn)。

不理解為何代碼不運(yùn)行的情況總會(huì)發(fā)生裁良,當(dāng)進(jìn)行故障排除并搞清楚其原因時(shí)凿将,思考代碼不運(yùn)行的原因和最終使其運(yùn)行的因素非常重要。這次學(xué)到的知識(shí)會(huì)帶到下一個(gè)程序中价脾。

例如牧抵,如果多個(gè)縮進(jìn)級(jí)別的代碼中出現(xiàn)了縮進(jìn)錯(cuò)誤,可以嘗試隨機(jī)調(diào)整代碼塊侨把,然后在最終運(yùn)行時(shí)為自己慶祝犀变。

切記,在大多數(shù)IDE中秋柄,可以折疊循環(huán)和if語(yǔ)句获枝,從而更容易查看正在使用的部分。

右側(cè)是折疊了if/else語(yǔ)句的ATOM

另一種辦法是將你的代碼通過(guò) www.pythontutor.com可視化骇笔,就可以逐行查看代碼運(yùn)行的方式了省店。
使用pythontutors執(zhí)行代碼

4. 使用字符串:

這部分內(nèi)容其實(shí)與字符串不完全相關(guān),與挖掘Python優(yōu)雅的庫(kù)有更大關(guān)系笨触。

我們很早就在Python中學(xué)過(guò)懦傍,字符串也可以看作是一串字符。你也可以使用索引訪問(wèn)字符串中的字符旭旭。


敏銳的學(xué)習(xí)者會(huì)查看str()所提供的內(nèi)容谎脯,但也可以不查看 str()文檔繼續(xù)編程。

查看函數(shù)或過(guò)程文檔可以通過(guò)調(diào)用 help(str) 或者dir(str)來(lái)實(shí)現(xiàn)持寄。執(zhí)行此操作時(shí)源梭,你可能會(huì)發(fā)現(xiàn)一些并不知道的方法娱俺,也許你在查看str()時(shí),找到有個(gè)名叫 endswith() 的方法废麻,或許能用在某處荠卷。


下面是一些以兩種不同方式執(zhí)行相同操作的代碼案例,一種用到了我們才談過(guò)的拆分烛愧,還有一種用到了我們剛剛學(xué)到的 endswith()

大多程序員是從來(lái)不會(huì)把所有文檔讀遍來(lái)學(xué)習(xí)全部?jī)?nèi)容的油宜。作為一名程序員,部分工作就是要搜索如何解決問(wèn)題的信息怜姿。

5. 使用列表:


列表很棒慎冤,用途也很廣泛。

下面的案例中沧卢,我們將整數(shù)和字符串混合在了一起:




注意我們是怎么將字符串和整數(shù)混合在一起的蚁堤,如果嘗試對(duì)其排序,就會(huì)報(bào)錯(cuò):




如果我們想把整數(shù)與字母分開(kāi)要怎么做但狭?一種方式是通過(guò)循環(huán)來(lái)實(shí)現(xiàn)披诗,我們可以遍歷列表中的所有項(xiàng)目。初學(xué)者很早就會(huì)使用循環(huán)了立磁,循環(huán)對(duì)于編程也很重要呈队。

代碼可能是下面這樣的:



即便有些混亂,這也是一種有效的方式唱歧,可以運(yùn)行宪摧,不過(guò)經(jīng)過(guò)重構(gòu)可以用單行來(lái)表示!

如果想要生活多些樂(lè)趣迈喉,請(qǐng)學(xué)習(xí)Python的列表解析式绍刮,下面是同樣問(wèn)題通過(guò)列表解析式得出的:



就是這樣!

還沒(méi)結(jié)束挨摸!使用過(guò)濾器也可以獲得同樣的結(jié)果:




現(xiàn)在你可能明白了孩革,實(shí)現(xiàn)同樣的結(jié)果有很多方法,你必須找出適合你或你團(tuán)隊(duì)的那個(gè)得运。

額外知識(shí)點(diǎn)

  • 反向列表(或字符串):


  • 在列表中加入元素:


6. 使用循環(huán):

是否在Python中見(jiàn)過(guò)這樣的代碼膝蜈?



你可能發(fā)現(xiàn)了,它來(lái)自其他語(yǔ)言熔掺,這不是Python的風(fēng)格饱搏。在Python中,你可以使用for-each循環(huán):



你很快就能發(fā)現(xiàn)置逻,這里我們不包含索引推沸。如果想用索引打印要怎么做?在Python中,你可以使用枚舉(enumerate參數(shù))鬓催,這是一種訪問(wèn)所需內(nèi)容的絕佳方案肺素。

7. 使用函數(shù)(并正確談?wù)摵瘮?shù)):

我在從事動(dòng)畫(huà)工作時(shí),總是說(shuō)如果同一個(gè)操作重復(fù)5次宇驾,就應(yīng)該考慮是否需要寫(xiě)個(gè)程序倍靡。有些時(shí)候花上兩周開(kāi)發(fā)一款工具可以節(jié)省你六個(gè)禮拜的工作時(shí)間。

編寫(xiě)代碼時(shí)课舍,如果發(fā)現(xiàn)同一動(dòng)作執(zhí)行了不止一次塌西,應(yīng)該考慮這是過(guò)程還是函數(shù),而不只是寫(xiě)寫(xiě)代碼筝尾。函數(shù)會(huì)返回內(nèi)容捡需,過(guò)程則只是運(yùn)行代碼,第一個(gè)案例是個(gè)過(guò)程筹淫,第二個(gè)是函數(shù)栖忠。

這樣說(shuō)可能會(huì)令人困惑,下面是其工作原理的示意圖:



注意print和return的差異贸街,看起來(lái)也許很相似,但如果你查看輸出結(jié)果狸相,函數(shù)只會(huì)返回發(fā)送的名稱薛匪。

下一個(gè)要了解的語(yǔ)法是parameters和arguments,在過(guò)程或函數(shù)中定義時(shí)(紅色部分)被稱為形參(parameters)脓鹃,當(dāng)發(fā)送名稱到過(guò)程或函數(shù)中(綠色部分)時(shí)就叫實(shí)參(arguments)了逸尖。

下面是些案例:

案例1



無(wú)需把循環(huán)寫(xiě)上3次,只需在過(guò)程中寫(xiě)上一次瘸右,然后在需要時(shí)調(diào)用即可娇跟。在案例2中,你可以發(fā)現(xiàn)代碼是如何返回反向列表的太颤。

案例2

8.面向?qū)ο缶幊?/h2>

Python是一種面向?qū)ο蟮恼Z(yǔ)言苞俘,其強(qiáng)大之處在于對(duì)象。將對(duì)象視為藍(lán)圖龄章,如果使用藍(lán)圖吃谣,你可以創(chuàng)建該藍(lán)圖的實(shí)例。也就是說(shuō)做裙,你可以創(chuàng)建需要的多個(gè)藍(lán)圖實(shí)例岗憋,但不會(huì)損毀你使用的藍(lán)圖。

面向?qū)ο缶幊蹋∣OP)是一個(gè)龐大的話題锚贱,因此我們不會(huì)在本節(jié)中涵蓋所有你需要了解的內(nèi)容仔戈,但可以通過(guò)幾個(gè)簡(jiǎn)單的示例幫你入門(mén)。

如果你之前讀過(guò)面向?qū)ο缶幊痰南嚓P(guān)內(nèi)容,可能已經(jīng)厭倦了學(xué)生(student)類监徘,但我們又來(lái)了晋修。從定義一個(gè)名為student的類開(kāi)始,student會(huì)擁有一個(gè)名稱和一個(gè)subject_list:


如果想要?jiǎng)?chuàng)建一個(gè)student耐量,可以像這樣將其分配給變量:

如果需要更多student飞蚓,可以使用同一個(gè)類并添加另外的姓名:

student1student2都是student類的實(shí)例,它們共享同一個(gè)藍(lán)圖廊蜒,但彼此之間并無(wú)關(guān)系趴拧。此時(shí),我們對(duì)學(xué)生們能做的不多山叮,但我們確實(shí)增加了一個(gè)主題列表著榴。要填充此列表,我們需要?jiǎng)?chuàng)建方法屁倔,你可以調(diào)用方法來(lái)實(shí)現(xiàn)與該類實(shí)例的交互脑又。

我們更新:


這個(gè)類可以用于創(chuàng)建、編輯學(xué)生信息锐借,并獲取我們存在其中的信息:

將類保存在單獨(dú)的文件中并導(dǎo)入主代碼的操作很常見(jiàn)问麸,在我們的案例中,我們會(huì)在student.py文件中創(chuàng)建一個(gè)student類钞翔,并將其導(dǎo)入我們的main.py文件(本案例中严卖,它們都位于同一個(gè)文件夾中)。

student類和main.py在使用它

9.尊重PEP

我們經(jīng)巢冀危看到人們?cè)趯?xiě)Python代碼時(shí)并不尊重PEP(Python增強(qiáng)提案:Python Enhancement Proposals)哮笆,但我自己會(huì)尊重。

當(dāng)你在開(kāi)發(fā)環(huán)境中工作時(shí)汰扭,遵守標(biāo)準(zhǔn)非常重要——如果不是PEP標(biāo)準(zhǔn)稠肘,也至少要遵守公司的標(biāo)準(zhǔn)。

PEP是代碼的一組準(zhǔn)則萝毛,下面是PEP-8的鏈接(https://www.python.org/dev/peps/pep-0008/)项阴,讀起來(lái)很棒。請(qǐng)確保你通讀過(guò)一次笆包,了解大概內(nèi)容鲁冯。一個(gè)典型的案例是snake_case,Python是以snake_case來(lái)寫(xiě)的色查,這代表著我們用下劃線來(lái)區(qū)分詞組薯演,即便大學(xué)里也會(huì)犯錯(cuò),因此別難過(guò)秧了,只要?jiǎng)e這樣做就行了跨扮。

這樣寫(xiě)是對(duì)的:



這樣是錯(cuò)的:


結(jié)論

入門(mén)是了不起的體驗(yàn),需要艱苦鉆研,但你的學(xué)習(xí)曲線急遽上升衡创,用新的經(jīng)驗(yàn)填滿你帝嗡。

也許新手狀態(tài)很難擺脫,了解你要關(guān)注什么是很困難的璃氢,下一步呢哟玷?

也許本文將你向正確的方向推進(jìn)了一步,也許只是一堆你已經(jīng)知道的胡言亂語(yǔ)一也。如果你不確定下一步該做什么巢寡,不要害怕提問(wèn)。確保你用好了那些比你更有經(jīng)驗(yàn)的人椰苟,對(duì)各種意見(jiàn)持開(kāi)放態(tài)度抑月,看看哪些對(duì)你有用。如果還沒(méi)準(zhǔn)備好使用某些編程方式舆蝴,請(qǐng)繼續(xù)讓代碼能夠運(yùn)行谦絮,同時(shí)學(xué)些新的和更好的方法。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末洁仗,一起剝皮案震驚了整個(gè)濱河市层皱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赠潦,老刑警劉巖奶甘,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異祭椰,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)疲陕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)方淤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蹄殃,你說(shuō)我怎么就攤上這事携茂。” “怎么了诅岩?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵讳苦,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我吩谦,道長(zhǎng)鸳谜,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任式廷,我火速辦了婚禮咐扭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己蝗肪,他們只是感情好袜爪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著薛闪,像睡著了一般辛馆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上豁延,一...
    開(kāi)封第一講書(shū)人閱讀 51,443評(píng)論 1 302
  • 那天昙篙,我揣著相機(jī)與錄音,去河邊找鬼术浪。 笑死瓢对,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的胰苏。 我是一名探鬼主播硕蛹,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼硕并!你這毒婦竟也來(lái)了法焰?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤倔毙,失蹤者是張志新(化名)和其女友劉穎埃仪,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體陕赃,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡卵蛉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了么库。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片傻丝。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖诉儒,靈堂內(nèi)的尸體忽然破棺而出葡缰,到底是詐尸還是另有隱情,我是刑警寧澤忱反,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布泛释,位于F島的核電站,受9級(jí)特大地震影響温算,放射性物質(zhì)發(fā)生泄漏怜校。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一注竿、第九天 我趴在偏房一處隱蔽的房頂上張望韭畸。 院中可真熱鬧宇智,春花似錦、人聲如沸胰丁。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)锦庸。三九已至机蔗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間甘萧,已是汗流浹背萝嘁。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扬卷,地道東北人牙言。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像怪得,于是被迫代替她去往敵國(guó)和親咱枉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容