成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為什么你總是學不會Python,入門Python的4大陷阱

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

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

 

[[381875]]

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

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

語法太多了

Python 的語法規則多不多?其實非常多,如果你學習過一些古老不再更新的編程語言,對比下來你就會發現其實 Python 語法非常多。

因為 Python 需要適應現代的開發要求,他"逼不得已"需要不斷加入新的語法特性,比如像"裝飾器"、"海象運算符"等等。

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

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

那么,到底需要學習哪些語法?

  1. 分支判斷
  2. 循環

說白了就是 if 和 for 循環。

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

 

為什么你總是學不會Python,入門Python的4大陷阱

 

 

為什么你總是學不會Python,入門Python的4大陷阱

 

經常看到有人建議入門要親手輸入每段代碼,大家一定要三思,這只能提升你鍵盤打字水平

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

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

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

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

并不是,像 if 語法的學習重點不是怎么寫,而是怎么構造 bool 值,這就需要你進一步了解基本的數據類型(str、int、bool這些)。

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

以上這些知識點可能只是一本入門書籍中的1到3個章節的內容

序列的處理非常重要

當你基本了解 if 和 for 的使用后,下一步就要了解序列的數據結構(列表、元組)。

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

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

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

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

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

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

當你后期學會了推導式之后,你就會發現用得最多的語法就是 if 和 for

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

不管你學習什么的編程語言,不管你是應用開發還是普通的辦公自動化學習,真正復雜的邏輯大部分來自于序列的處理。

比如一堆文件、每個文件中又會有一堆的數據。

而簡單的單個數據,往往操作也是非常直白簡單。

字典要不要在這個階段學習?我建議是可以嘗試了解,如果發現自己不能理解,那就跳過。因為后期總會有他的應用場景,那時候結合場景學習會更加輕松

學習分解問題的思維

經過上面2個階段的學習,你會發現自己充其量只能解決小學加減乘除的簡單問題,稍微復雜一點的問題你就毫無頭緒。

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

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

編程的本質是把現實邏輯用代碼表達出來

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

我的文章少不了案例。

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

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

這個思考過程實際就是從整體到細節的過程:

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

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

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

而 Python 初學者卻經常使用這種反人類直覺編程——寫到哪,想到哪

現在換成 Python 問題。

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

 

為什么你總是學不會Python,入門Python的4大陷阱

 

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

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

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

 

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

 

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

網上搜索"python 讀取文件",找到:

 

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

 

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

 

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

 

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

這是普通字符串操作:

 

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

這應該是入門必需學會的方法,當然你也可以網上搜索"python 字符串分割"

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

 

  1. import os 
  2. for file in os.listdir(r'目標文件夾路徑'): 
  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'目標文件夾路徑'): 
  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) 

現在,results 這個列表就是結果了

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

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

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

一定要學習自定義函數

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

仍然解決前面的問題:

 

  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=='小明' 

 

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

看看整體調用:

 

  1. results=[] 
  2.  
  3. for file in get_file_paths(r'目標文件夾路徑'): 
  4.     book,author = get_book_message(file) 
  5.     if match(author): 
  6.         results.append(book) 

 

  • "取出符合條件的書" 的邏輯包含在整體過程中

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

但是怎么感覺現在代碼量比之前更多了?

的確如此,但是,如果現在信息保存在 excel 中,你就能馬上知道在哪個函數修改,并且修改的負擔變少了很多

為什么?

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

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

怎樣進階

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

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

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

因此,Python 的進階仍然是圍繞點3而展開。

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

這可能需要你學習:

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

又比如:

 

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

 

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

此時,你就需要學習面向對象的知識:比如定義類(其實用命名元組也行)

 

我認為一切按自己的實際需求出發選擇性學習是最好的,因為有使用場景學起來最輕松。

 

責任編輯:華軒 來源: 今日頭條
相關推薦

2020-05-13 09:03:14

Python開發代碼

2020-09-03 08:05:34

設計模式編程界

2021-12-21 06:09:05

Python切片索引

2012-06-27 10:26:19

Surface

2021-06-07 12:40:34

Python代碼陷阱

2020-06-24 09:00:43

分庫分表MySQL

2017-01-09 12:57:21

Linux

2012-11-13 10:27:45

PythonGo編程語言

2020-09-21 10:50:24

Java多線程代碼

2021-02-27 10:38:56

Python結構數據

2024-04-01 06:21:10

2015-12-03 10:09:31

賭場大數據

2019-05-30 15:20:04

webpack前端開發

2022-05-05 19:00:22

PythonPython特性

2014-09-22 09:27:57

Python

2022-09-19 00:08:22

人工智能機器交通管制

2024-08-30 16:14:58

2018-01-29 11:11:35

Linux入門學習

2020-04-01 17:50:02

Python編程語言

2018-10-28 15:40:23

Python編程語言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品www久久久久久广东 | 久久国产精品精品 | 69精品久久久久久 | 欧美国产视频 | av中文字幕在线 | 日韩在线视频一区 | 国产专区视频 | 国产乱码精品一区二区三区中文 | 亚洲精品久久嫩草网站秘色 | 久久久91精品国产一区二区三区 | 亚洲国产成人av好男人在线观看 | 久久看片| 在线只有精品 | 日韩欧美在线一区二区 | 日韩一区二区在线视频 | 久久四虎 | 久久久久久久久国产精品 | 国产精品99久久久久久宅男 | 亚洲精品乱码久久久久久按摩观 | 亚洲国产欧美日韩 | 一区二区三区四区在线播放 | 自拍偷拍亚洲欧美 | av激情影院 | 国产在线一区二区三区 | 亚洲免费视频在线观看 | 亚洲三级在线观看 | 欧美国产日韩在线 | 欧美一区二区三区在线观看视频 | 国产亚洲一区二区精品 | 久久中文一区二区 | 日韩久久久一区二区 | 日韩伦理一区二区 | 99精品久久| 精品成人佐山爱一区二区 | www国产亚洲精品 | 中文久久 | 国产成人精品一区二区三 | 丁香婷婷成人 | 国产日产久久高清欧美一区 | 成人一区二区三区在线观看 | 成人精品毛片国产亚洲av十九禁 |