日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
為什么你總是學(xué)不會Python,入門Python的4大陷阱

Python以語法簡單、關(guān)鍵字少著稱,因此經(jīng)常被各大媒體忽悠其是一門非常容易入門的編程語言。他的特定描述自然不言而喻,但其是否容易入門卻飽受爭議。因為每個人的基礎(chǔ)都不一樣。

市面上大部分的 Python 入門書籍的目錄都非常長(畢竟缺少某個重要的知識點會被批),但是作為入門來說,真的需要所有的知識點都學(xué)習(xí)一遍嗎?

對于入門者來說,看著這些書籍目錄學(xué)習(xí)往往會遇到各種陷阱,今天我就來分享一下我的個人觀點。

語法太多了

Python 的語法規(guī)則多不多?其實非常多,如果你學(xué)習(xí)過一些古老不再更新的編程語言,對比下來你就會發(fā)現(xiàn)其實 Python 語法非常多。

因為 Python 需要適應(yīng)現(xiàn)代的開發(fā)要求,他"逼不得已"需要不斷加入新的語法特性,比如像"裝飾器"、"海象運(yùn)算符"等等。

此時初學(xué)者會陷入第一個陷阱——抵受不住"目錄"的誘惑,感覺自己跳過了某個知識點就會無法入門。

作為入門者我是不建議學(xué)習(xí)這些東西(短期內(nèi)你大概率用不上)。

那么,到底需要學(xué)習(xí)哪些語法?

  1. 分支判斷
  2. 循環(huán)

說白了就是 if 和 for 循環(huán)。

其實,學(xué)習(xí)這些語法不是要你去記憶怎么寫,大部分時候這些語法語句不需要我們親手敲出每個字母,因為現(xiàn)在的 ide 都非常友好,一般都能提供生成代碼段的功能,如下是 vscode 的演示:

經(jīng)??吹接腥私ㄗh入門要親手輸入每段代碼,大家一定要三思,這只能提升你鍵盤打字水平

有段時間我經(jīng)常需要來回切換多種編程語言,但并不考驗我的語法記憶水平,這就是代碼段的好處

小伙伴:"那其他的語法規(guī)則呢,比如運(yùn)算符優(yōu)先級別這些,我總是記不住怎么辦?"

其實我也從來沒有去記憶啥運(yùn)算符優(yōu)先級別,因為在出現(xiàn)多種運(yùn)算符時,我總是使用括號明確他們的優(yōu)先級別:

小伙伴:"這樣子看起來,好像很容易入門,if 和 for 語法真的這么容易學(xué)習(xí)?"

并不是,像 if 語法的學(xué)習(xí)重點不是怎么寫,而是怎么構(gòu)造 bool 值,這就需要你進(jìn)一步了解基本的數(shù)據(jù)類型(str、int、bool這些)。

幸好這些知識點的數(shù)量非常少,對于入門來說也不需要深入了解每個類型的保存機(jī)制(比如需要多少個字節(jié))

以上這些知識點可能只是一本入門書籍中的1到3個章節(jié)的內(nèi)容

序列的處理非常重要

當(dāng)你基本了解 if 和 for 的使用后,下一步就要了解序列的數(shù)據(jù)結(jié)構(gòu)(列表、元組)。

此時,初學(xué)者會陷入另一個坑——列表有許多方法需要記憶!

同樣地,我也不推薦入門者記憶這些方法,只需要記住最常用的1、2個操作即可。比如:

  1. 添加元素:append
  2. 移除元素:remove

同理,字符串也有許多處理方法,通常我們只需要學(xué)習(xí)少量幾個方法即可

小伙伴:"?!,就這樣子?"

事實上,后期你可能連上述2個操作都很少用上。因為在 Python 中更傾向于構(gòu)造新的序列,而非對序列原地操作。

當(dāng)你后期學(xué)會了推導(dǎo)式之后,你就會發(fā)現(xiàn)用得最多的語法就是 if 和 for

你可能疑惑,為什么序列的處理很重要?

不管你學(xué)習(xí)什么的編程語言,不管你是應(yīng)用開發(fā)還是普通的辦公自動化學(xué)習(xí),真正復(fù)雜的邏輯大部分來自于序列的處理。

比如一堆文件、每個文件中又會有一堆的數(shù)據(jù)。

而簡單的單個數(shù)據(jù),往往操作也是非常直白簡單。

字典要不要在這個階段學(xué)習(xí)?我建議是可以嘗試了解,如果發(fā)現(xiàn)自己不能理解,那就跳過。因為后期總會有他的應(yīng)用場景,那時候結(jié)合場景學(xué)習(xí)會更加輕松

學(xué)習(xí)分解問題的思維

經(jīng)過上面2個階段的學(xué)習(xí),你會發(fā)現(xiàn)自己充其量只能解決小學(xué)加減乘除的簡單問題,稍微復(fù)雜一點的問題你就毫無頭緒。

此時你就陷入了另一個陷阱——一邊思考邏輯一邊寫代碼

多數(shù)入門書籍都不會教你這一點,因為這不是 Python 的特性,但他極其重要。

編程的本質(zhì)是把現(xiàn)實邏輯用代碼表達(dá)出來

而現(xiàn)實中,我們要完成一件比較復(fù)雜的事情時,都是先考慮整體流程,劃分出多個子流程,最后才針對每個子流程考慮細(xì)節(jié)。

我的文章少不了案例。

考慮以下的現(xiàn)實場景:你希望從你家里書架上(有100多本)找出某作者的書。

你可能覺得這個事情非常簡單,不就是從頭開始,每本書都看看作者名字,符合就拿出來?

這個思考過程實際就是從整體到細(xì)節(jié)的過程:

  1. 首先,你會考慮從哪里開始找,總有個搜索方向。比如從書架左上角橫向掃過每一行的書
  2. 其次,在沒有開始找之前,你就決定找出一本書后,看封面的作者名字
  3. 最后,符合條件要拿出來,與原來的書區(qū)別開來

注意上述每一點的思考都是在你開始操作之前就決定的,這就是整體到細(xì)節(jié)的考慮。

你不會隨手拿起一本書,然后才想到底怎么找作者名字?找到又要不要拿出來?這是非常反人類直覺的做法。

而 Python 初學(xué)者卻經(jīng)常使用這種反人類直覺編程——寫到哪,想到哪

現(xiàn)在換成 Python 問題。

一個文件夾下有許多文本文件,每個文件相當(dāng)于一本書,里面有書名、作者名字等信息:

下面是一個反直覺的寫法。本文最后會給出自定義函數(shù)的做法,你能明顯感受到2種寫法的思維區(qū)別。

第一步:怎么能保證取出每一個文件,沒有遺漏也不會重復(fù)取出?

經(jīng)過網(wǎng)上搜索"python 文件夾文件",可以找到多種方式,我就隨手用其中一種:

 
 
 
 
  1. import os 
  2.  
  3. for file in os.listdir(r'目標(biāo)文件夾路徑'): 
  4.     # file 就是每個文件的路徑 
  5.     pass 
  6.      

第二步:有一個文件路徑,怎么讀取里面的內(nèi)容?

網(wǎng)上搜索"python 讀取文件",找到:

 
 
 
 
  1. with open('文件路徑(記得帶后綴)', 'r') as f: 
  2.     lines = f.readlines() 
  3.     # lines 是一個列表,每個元素就是文件中的一行內(nèi)容 

這一步其實是第一步里面的后續(xù)操作,于是:

 
 
 
 
  1. import os 
  2.  
  3. for file in os.listdir(r'目標(biāo)文件夾路徑'): 
  4.     # file 就是每個文件的路徑 
  5.     with open(file, 'r') as f: 
  6.         lines = f.readlines() 

第三步:文件中作者行內(nèi)容是有"作者:"前綴,給你這一行,怎么提出里面的作者名字?

這是普通字符串操作:

 
 
 
 
  1. '作者:小明'.split(':')[1] 

這應(yīng)該是入門必需學(xué)會的方法,當(dāng)然你也可以網(wǎng)上搜索"python 字符串分割"

于是,現(xiàn)在代碼成這樣(順手把書名也取出):

 
 
 
 
  1. import os 
  2. for file in os.listdir(r'目標(biāo)文件夾路徑'): 
  3.     with open(file, 'r') as f: 
  4.         lines = f.readlines() 
  5.          
  6.         # 第三步 
  7.         book = lines[0].split(':')[1] 
  8.         author = lines[1].split(':')[1] 

第四步:判斷書名是不是我們要找的,符合要取出來

這就用上 if 判斷和基本的序列操作:

 
 
 
 
  1. import os 
  2.  
  3. # 第四步 
  4. results = [] 
  5. target = '小明' 
  6.  
  7. for file in os.listdir(r'目標(biāo)文件夾路徑'): 
  8.     with open(file, 'r') as f: 
  9.         lines = f.readlines() 
  10.         book = lines[0].split(':')[1] 
  11.         author = lines[1].split(':')[1] 
  12.          
  13.         # 第四步 
  14.         if target==author : 
  15.             results.append(book) 

現(xiàn)在,results 這個列表就是結(jié)果了

代碼看似簡單,但是,假如現(xiàn)在儲存書籍的不再是文本文件,而是一個 Excel,你能一下子知道修改哪個地方嗎?

初學(xué)者往往就在這種細(xì)節(jié)中受到挫折。明明我看懂別人寫的,但是解決自己問題時卻懵逼了

這是因為,Python 中有一個知識點能完美匹配"整體到細(xì)節(jié)"的過程!但初學(xué)者一般不怎么會用

一定要學(xué)習(xí)自定義函數(shù)

為什么編程語言基本都有自定義函數(shù)的特性?因為這符合我們解決問題的思維邏輯。

仍然解決前面的問題:

 
 
 
 
  1. # 第一步:從書架上取出書 
  2. def get_file_paths(folder): 
  3.     pass 
  4.  
  5. # 第二步:看封面,得知書名與作者 
  6. def get_book_message(file): 
  7.     pass 
  8.     return book,author 
  9.  
  10. # 第三步:看看是否符合 
  11. def match(author): 
  12.     return author=='小明' 

怎么感覺少了最后一步,"取出符合條件的書"?

看看整體調(diào)用:

 
 
 
 
  1. results=[] 
  2.  
  3. for file in get_file_paths(r'目標(biāo)文件夾路徑'): 
  4.     book,author = get_book_message(file) 
  5.     if match(author): 
  6.         results.append(book) 
  • "取出符合條件的書" 的邏輯包含在整體過程中

接下來,就是逐一實現(xiàn)每個自定義函數(shù)就可以。解決的思路與之前反直覺一樣。

但是怎么感覺現(xiàn)在代碼量比之前更多了?

的確如此,但是,如果現(xiàn)在信息保存在 excel 中,你就能馬上知道在哪個函數(shù)修改,并且修改的負(fù)擔(dān)變少了很多

為什么?

因為函數(shù)定義帶有約束,看看上面 get_book_message 的函數(shù)定義,必需傳入一個文件路徑,必需返回元組(書名,作者)。

而整體流程和其他的每一步的函數(shù)是不管你怎么從一個文件路徑得到這個元組,過程不重要,結(jié)果最重要

怎樣進(jìn)階

上面的總結(jié)(針對入門):

  1. 語法學(xué)習(xí)簡單為主(if、for)
  2. 基本序列要了解(列表、元組),但其對象操作方法不用特意記憶
  3. 學(xué)會分解問題的思維
  4. 學(xué)會自定義函數(shù)

實際上,點3才是最重要,其他點只是為他服務(wù)

因此,Python 的進(jìn)階仍然是圍繞點3而展開。

比如,前面的例子中,整體流程代碼中仍然包含了 "取出符合條件的書" 的邏輯,這其實不太合理。那么此時你就學(xué)習(xí)新的語法知識點,讓你能簡化整體流程代碼。

這可能需要你學(xué)習(xí):

  • lambda
  • 高階函數(shù)的定義(專有名詞很嚇人,實際就是能把邏輯傳遞給函數(shù)參數(shù))

又比如:

 
 
 
 
  1. # 第二步:看封面,得知書名與作者 
  2. def get_book_message(file): 
  3.     pass 
  4.     return book,author 

這個函數(shù)只是返回書名和作者名,如果還有其他的信息,那么整體流程的代碼也很麻煩。

此時,你就需要學(xué)習(xí)面向?qū)ο蟮闹R:比如定義類(其實用命名元組也行)

我認(rèn)為一切按自己的實際需求出發(fā)選擇性學(xué)習(xí)是最好的,因為有使用場景學(xué)起來最輕松。


文章名稱:為什么你總是學(xué)不會Python,入門Python的4大陷阱
轉(zhuǎn)載來于:http://m.5511xx.com/article/dphcdge.html