Python大佬 | 菜鳥進階必備的九大技能

Python是一種很棒的語言,語法簡單,無需在代碼中搜索分號。對於初學者來講,Python是入門最簡單的語言之一。Python有大量的庫支持,你還能夠安裝其餘庫來增長本身的編程經驗。python

學了一陣子以後,你可能會以爲:爲如此簡單的操做寫大量的代碼有些使人困惑。實際上,事情並無你想得那麼糟。理解其背後的邏輯比寫幾行代碼更爲重要。短代碼更好,但若是邏輯有問題,那麼不管如何你的代碼都會有問題。隨着經驗和創造力的增加,最終你的代碼將會變得更短、更好。程序員

不少人學習python,不知道從何學起。編程

不少人學習python,掌握了基本語法事後,不知道在哪裏尋找案例上手。app

不少已經作案例的人,殊不知道如何去學習更加高深的知識。函數

那麼針對這三類人,我給你們提供一個好的學習平臺,免費領取視頻教程,電子書籍,以及課程的源代碼!??¤工具

QQ羣:1057034340學習

初學者與中級程序員動畫

那麼,對於Python程序員而言,初學者和進階者有什麼區別呢?spa

本文將重點介紹如下方面:code

  • 解決問題和提出問題;

  • XY問題;

  • 理解代碼爲什麼起做用(或不起做用);

  • 使用字符串;

  • 使用列表;

  • 使用循環;

  • 使用函數(並正確談論函數);

  • 面向對象編程;

  • 尊重PEP。

  1. 解決問題和提出問題:

程序員缺少解決問題能力的話,代碼出色也是枉然。

若是你解決問題的思惟不夠發達,可能就沒法爲你要解決的問題找到最佳的解決方案。編程不只僅是編寫代碼,須要解決問題纔能有機會出初學者行列。

提出編程相關的問題也很重要。若是不經嘗試,就讓別人解決你的問題,可能也會出局。這很難,但若是不嘗試本身解決問題,你將對解決方案一無所獲。

若是想要了解更多關於編程提問的技能,我另有一篇文章,連接以下(英文):How to Ask Questions About Programming:

medium.com/better-prog…

2. XY問題:

「我須要從字符串中提取最後3個字符。」

「不,你不須要。只需文件擴展名。」

XY問題頗有趣。你有個X問題,當你調用服務中心時,會尋求Y問題的解決方案,以解決X問題。

上面的案例就是極好的例子。若是想要文件名中的文件擴展名,很容易假設你須要的是最後3個字母。

如何寫代碼:

def extract_ext(filename):return filename[-3:]print (extract_ext('photo_of_sasquatch.png'))>>> png
複製代碼

用戶從一開始應該會索要擴展名,最後3個字母是Y問題,而X問題是咱們想要擴展名。

def extract_ext(filename):return filename.split('.')[-1]print (extract_ext('photo_of_sasquatch.png'))print (extract_ext('photo_of_lochness.jpeg'))>>> png>>> jpeg
複製代碼

成功了!

你也可使用標準庫 `os.path.splitext `,點擊這裏查看:os.path.splitext:*www.geeksforgeeks.org/python-os-p…

3. 理解代碼爲什麼起做用(或不起做用):

做爲新手,你可能要花幾天來對付一小段代碼。若是這段代碼忽然起做用了,你可能會感受放心,而後繼續下一段代碼。這是最糟糕的事情之一。不理解緣由只管運行的作法,可能比不理解代碼的爲何不運行更加危險。

不理解爲什麼代碼不運行的狀況總會發生,當進行故障排除並搞清楚其緣由時,思考代碼不運行的緣由和最終使其運行的因素很是重要。此次學到的知識會帶到下一個程序中。

例如,若是多個縮進級別的代碼中出現了縮進錯誤,能夠嘗試隨機調整代碼塊,而後在最終運行時爲本身慶祝。

切記,在大多數IDE中,能夠摺疊循環和if語句,從而更容易查看正在使用的部分。

Python大佬 | 菜鳥進階必備的九大技能

右側是摺疊了if/else語句的ATOM

另外一種辦法是將你的代碼經過 www.pythontutor.com可視化,就能夠逐行查看代碼運行的方式了。

Python大佬 | 菜鳥進階必備的九大技能

使用pythontutors執行代碼

4. 使用字符串:

這部份內容其實與字符串不徹底相關,與挖掘Python優雅的庫有更大關係。

咱們很早就在Python中學過,字符串也能夠看做是一串字符。你也可使用索引訪問字符串中的字符。

word = 'supergreat'print (f'{word[0]}')>>> sprint (f'{word[0:5]}')>>> super
複製代碼

敏銳的學習者會查看`str`所提供的內容,但也能夠不查看 `str`文檔繼續編程。

查看函數或過程文檔能夠經過調用 `help(str)` 或者`dir(str)`來實現。執行此操做時,你可能會發現一些並不知道的方法,也許你在查看`str`時,找到有個名叫 `endswith` 的方法,或許能用在某處。

Python大佬 | 菜鳥進階必備的九大技能Python大佬 | 菜鳥進階必備的九大技能

下面是一些以兩種不一樣方式執行相同操做的代碼案例,一種用到了咱們才談過的拆分,還有一種用到了咱們剛剛學到的 `endswith` :

filenames = ['lochness.png' , 'e.t.jpeg' , 'conspiracy_theories_CONFIRMED.zip']# 1: Using ENDSWITHfor files in filenames:if files.endswith('zip'):print(f'{files} is a zip file')else:print (f'{files} is NOT a zip file')# 2: Using SPLITfor files in filenames:if files.split('.')[-1] == 'zip':print(f'{files} is a zip file (using split)')else:print (f'{files} is NOT a zip file (using split)')
複製代碼

大多程序員是歷來不會把全部文檔讀遍來學習所有內容的。做爲一名程序員,部分工做就是要搜索如何解決問題的信息。

5. 使用列表:

列表很棒,用途也很普遍。

下面的案例中,咱們將整數和字符串混合在了一塊兒:

my_list = ['a' , 'b' , 'n' , 'x' , 1 , 2 , 3, 'a' , 'n' , 'b']for item in my_list:print (f'current item: {item}, Type: {type(item)}')
複製代碼

Python大佬 | 菜鳥進階必備的九大技能

注意咱們是怎麼將字符串和整數混合在一塊兒的,若是嘗試對其排序,就會報錯:

print (my_list.sort)
複製代碼

Python大佬 | 菜鳥進階必備的九大技能

若是咱們想把整數與字母分開要怎麼作?一種方式是經過循環來實現,咱們能夠遍歷列表中的全部項目。初學者很早就會使用循環了,循環對於編程也很重要。代碼多是下面這樣的:my_list = ['a' , 'b' , 'n' , 'x' , 1 , 2 , 3 , 'a' , 33.3 , 'n' , 'b']number_list = string_list = for item in my_list:print (f'current item: {item}, Type: {type(item)}')if not isinstance(item,str):number_list.append(item)else:string_list.append(item)my_list = string_list即使有些混亂,這也是一種有效的方式,能夠運行,不過通過重構能夠用單行來表示!若是想要生活多些樂趣,請學習Python的列表解析式,下面是一樣問題經過列表解析式得出的:my_list = [letter for letter in my_list if isinstance(letter,str)]就是這樣!還沒結束!使用過濾器也能夠得到一樣的結果:def get_numbers(input_char):if not isinstance(input_char,str):return Truereturn Falsemy_list = [1,2,3,'a','b','c']check_list = filter(get_numbers, my_list)for items in check_list:print(items)
複製代碼

如今你可能明白了,實現一樣的結果有不少方法,你必須找出適合你或你團隊的那個。

6.額外知識點

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

    names = ['First' , 'Middle' , 'Last']print(names[::-1])>>> ['Last', 'Middle', 'First']

  • 在列表中加入元素:

    names = ['First' , 'Middle' , 'Last']full_name = ' '.join(names)print(f'Full Name:\n{full_name}')>>> First Middle Last6. 使用循環:

是否在Python中見過這樣的代碼?

greek_gods = ['Zeus' , 'Hera' , 'Poseidon' , 'Apollo' , 'Bob']for index in range(0,len(greek_gods)):print (f'at index {index} , we have : {greek_gods[index]}')
複製代碼

你可能發現了,它來自其餘語言,這不是Python的風格。在Python中,你可使用for-each循環:

for name in greek_gods:print (f'Greek God: {name}')
複製代碼

你很快就能發現,這裏咱們不包含索引。若是想用索引打印要怎麼作?在Python中,你可使用枚舉(enumerate參數),這是一種訪問所需內容的絕佳方案。

for index, name in enumerate(greek_gods):print (f'at index {index} , we have : {name}')
複製代碼

Python大佬 | 菜鳥進階必備的九大技能

7. 使用函數(並正確談論函數):

我在從事動畫工做時,老是說若是同一個操做重複5次,就應該考慮是否須要寫個程序。有些時候花上兩週開發一款工具能夠節省你六個禮拜的工做時間。

編寫代碼時,若是發現同一動做執行了不止一次,應該考慮這是過程仍是函數,還不僅是寫寫代碼。函數會返回內容,過程則只是運行代碼,第一個案例是個過程,第二個是函數。

這樣說可能會使人困惑,下面是其工做原理的示意圖:

Python大佬 | 菜鳥進階必備的九大技能

注意print和return的差別,看起來也許很類似,但若是你查看輸出結果,函數只會返回發送的名稱。

下一個要了解的語法是parameters和arguments,在過程或函數中定義時(紅色部分)被稱爲形參(parameters),當發送名稱到過程或函數中(綠色部分)時就叫實參(arguments)了。

下面是些案例:

案例1

def print_list(input_list):for each in input_list:print(f'{each}')print #just to separate outputgreek_gods = ['Zeus' , 'Hera' , 'Poseidon' , 'Apollo' , 'Bob']grocery_list = ['Apples' , 'Milk' , 'Bread']print_list(greek_gods)print_list(grocery_list)print_list(['a' , 'b' , 'c'])
複製代碼

Python大佬 | 菜鳥進階必備的九大技能

無需把循環寫上3次,只需在過程當中寫上一次,而後在須要時調用便可。在案例2中,你能夠發現代碼是如何返回反向列表的。

案例2

def reverse_list(list_input):return list_input[::-1]my_list = ['a', 'b' , 'c']print (reverse_list(my_list))>>> ['c', 'b', 'a']
複製代碼

8.面向對象編程

Python是一種面向對象的語言,其強大之處在於對象。將對象視爲藍圖,若是使用藍圖,你能夠建立該藍圖的實例。也就是說,你能夠建立須要的多個藍圖實例,但不會損毀你使用的藍圖。

面向對象編程(OOP)是一個龐大的話題,所以咱們不會在本節中涵蓋全部你須要瞭解的內容,但能夠經過幾個簡單的示例幫你入門。

若是你以前讀過面向對象編程的相關內容,可能已經厭倦了學生(student)類,但咱們又來了。從定義一個名爲student的類開始,student會擁有一個名稱和一個subject_list:

class Student:def__init__(self,name):self._name = nameself._subject_list = 

若是想要建立一個student,能夠像這樣將其分配給變量:

student1 = Student('Martin Aaberge')

若是須要更多student,可使用同一個類並添加另外的姓名:student2 = Student('Ninja Henderson')`student1`和`student2`都是student類的實例,它們共享同一個藍圖,但彼此之間並沒有關係。此時,咱們對學生們能作的很少,但咱們確實增長了一個主題列表。要填充此列表,咱們須要建立方法,你能夠調用方法來實現與該類實例的交互。咱們更新:class Student:def__init__(self,name):self._name = nameself._subject_list = defadd_subject(self, subject_name):self._subject_list.append(subject_name)defget_student_data(self):print (f'Student: {self._name} is assigned to:')for subject in self._subject_list:print (f'{subject}')print這個類能夠用於建立、編輯學生信息,並獲取咱們存在其中的信息:

#create students:student1 = Student('Martin Aaberge')student2 = Student('Heidi Hummelvold')#add subjects to student1student1.add_subject('psychology_101')student1.add_subject('it_security_101')#add subject to student2student2.add_subject('leadership_101')#print current data on studentsstudent1.get_student_datastudent2.get_student_data
複製代碼

將類保存在單獨的文件中並導入主代碼的操做很常見,在咱們的案例中,咱們會在student.py文件中建立一個`student`類,並將其導入咱們的main.py文件(本案例中,它們都位於同一個文件夾中)。

from student import Studentstudent1 = Student('Martin')student1.add_subject('biomechanics_2020')student1.get_student_data
複製代碼

Python大佬 | 菜鳥進階必備的九大技能

student類和main.py在使用它

Python大佬 | 菜鳥進階必備的九大技能

9.尊重PEP

咱們常常看到人們在寫Python代碼時並不尊重PEP(Python加強提案:Python Enhancement Proposals),但我本身會尊重。

當你在開發環境中工做時,遵照標準很是重要——若是不是PEP標準,也至少要遵照公司的標準。

PEP是代碼的一組準則,下面是PEP-8的連接(

www.python.org/dev/peps/pe…

),讀起來很棒。請確保你通讀過一次,瞭解大概內容。一個典型的案例是`snake_case`,Python是以`snake_case`來寫的,這表明着咱們用下劃線來區分詞組,即使大學裏也會犯錯,所以別難過,只要別這樣作就好了。

這樣寫是對的:

chocolate_cake = 'yummy'

這樣是錯的:

chocolateCake = 'Yummy
相關文章
相關標籤/搜索