學(xué)Python:從環(huán)境搭建到數(shù)據(jù)可視化實(shí)戰(zhàn)路線)
Python 大概是過(guò)去十年里最值得花時(shí)間認(rèn)真學(xué)一遍的編程語(yǔ)言。我身邊陸續(xù)有人因?yàn)楣ぷ骼锏囊患∈麻_(kāi)始碰 Python運(yùn)維想批量處理服務(wù)器日志財(cái)務(wù)想合并幾十張 Excel研究生想跑一組統(tǒng)計(jì)數(shù)據(jù)最后基本上都能在兩三周內(nèi)寫(xiě)出真正能用的程序。標(biāo)題叫“論python”我不想寫(xiě)那種面面俱到的教科書(shū)只想從最務(wù)實(shí)角度把 Python 的安裝、語(yǔ)法、幾個(gè)熱門(mén)方向和踩坑經(jīng)驗(yàn)串成一條完整路線。這篇文章適合兩類人完全零基礎(chǔ)的新手照著做一遍大概率能跑通已經(jīng)會(huì)其他語(yǔ)言的開(kāi)發(fā)者也可以快速對(duì)照自己的知識(shí)結(jié)構(gòu)看看 Python 有哪些和你想的不一樣的地方。全篇沒(méi)有高深理論所有代碼你都可以復(fù)制下來(lái)直接運(yùn)行唯一需要你做的就是不要只看跟著動(dòng)手敲一遍。1. 先聊清楚Python 到底解決什么問(wèn)題1.1 語(yǔ)法設(shè)計(jì)的減法心智負(fù)擔(dān)低我第一次寫(xiě) Python 時(shí)最直觀的感受是它讀起來(lái)像自然語(yǔ)言而不是需要反復(fù)查閱手冊(cè)的法律條文。別的語(yǔ)言用大括號(hào)包住代碼塊它直接用縮進(jìn)區(qū)分層次別的語(yǔ)言光聲明一個(gè)變量就要寫(xiě)類型它直接x 5就完事。語(yǔ)法上做減法換來(lái)的是新手期的心智負(fù)擔(dān)直線下降你能把更多精力放在“要解決的問(wèn)題”上而不是“編譯器會(huì)不會(huì)罵我”上。你可以把 Python 想象成寫(xiě)菜譜主料、輔料、步驟都寫(xiě)在明面上順序?qū)α司湍艹鲥仭 或 Java 更像開(kāi)一家飯店的作業(yè)流程要先把規(guī)章制度定清楚才能開(kāi)工。前者適合快速驗(yàn)證和迭代后者適合大規(guī)模工程。Python 能讓你把想法在幾分鐘內(nèi)變成可執(zhí)行的東西這是它在數(shù)據(jù)分析、腳本自動(dòng)化、機(jī)器學(xué)習(xí)這些領(lǐng)域特別吃香的根本原因。Python 還經(jīng)常被稱為“膠水語(yǔ)言”意思是它不介意自己只管調(diào)度把 C/C 寫(xiě)好的高性能模塊粘起來(lái)干重活。很多項(xiàng)目把 Python 當(dāng)作控制臺(tái)上的指揮官底層計(jì)算交給別的語(yǔ)言Python 負(fù)責(zé)把人話翻譯成指令。這個(gè)特性讓它的適用面比大多數(shù)人想象中寬得多。1.2 誰(shuí)在用 Python、用來(lái)干什么從搜索熱詞常年出現(xiàn)“python教程”“python入門(mén)”就能看出來(lái)絕大多數(shù)人學(xué) Python 的第一步不是某個(gè)炫酷的框架而是先回答兩個(gè)問(wèn)題裝哪個(gè)版本、用什么編輯器。但在這之前我更建議你先看看 Python 到底能做什么因?yàn)檫@決定了你要往哪個(gè)方向使力。| 使用場(chǎng)景 | 典型任務(wù) | 常用庫(kù)/工具 | | 自動(dòng)化辦公 | 批量處理 Excel、Word、郵件 | openpyxl、pandas | | 數(shù)據(jù)分析 | 清洗數(shù)據(jù)、統(tǒng)計(jì)報(bào)表、圖表輸出 | pandas、numpy、matplotlib | | Web 后端 | 快速建 API 和后臺(tái)服務(wù) | FastAPI、Django | | 爬蟲(chóng) | 采集公開(kāi)網(wǎng)頁(yè)數(shù)據(jù) | requests、BeautifulSoup | | 量化交易 | 策略回測(cè)、信號(hào)計(jì)算 | pandas、backtrader | | 機(jī)器學(xué)習(xí) | 特征工程、模型訓(xùn)練 | scikit-learn 等 |從這份表能看到Python 最大的特點(diǎn)不是某一個(gè)領(lǐng)域做到極致而是覆蓋面廣。它像一個(gè)萬(wàn)能工具箱什么活都能上手干一點(diǎn)。正因如此學(xué) Python 的投入產(chǎn)出比相當(dāng)可觀你只要掌握一套語(yǔ)法就能同時(shí)往數(shù)據(jù)分析、腳本開(kāi)發(fā)、接口開(kāi)發(fā)好幾個(gè)方向走。下面我就按“裝環(huán)境 → 學(xué)語(yǔ)法 → 做項(xiàng)目 → 排坑”的順序把這條路完整走一遍。2. 環(huán)境搭建從下載到跑通第一段代碼2.1 最省心的安裝方式與版本選擇先說(shuō)版本?,F(xiàn)在主流穩(wěn)定版本是 Python 3.x建議直接安裝官方下載頁(yè)面里標(biāo)注 Stable 的 3.11 或 3.12。Python 2 早就停止維護(hù)了網(wǎng)上很多老教程還在混用 2 的語(yǔ)法看到print后面帶不帶括號(hào)都不一致的一律按過(guò)期內(nèi)容處理。選版本有個(gè)原則優(yōu)先穩(wěn)定版不要追最新測(cè)試版因?yàn)榈谌綆?kù)的兼容性往往落后于核心版本發(fā)布。Windows 用戶到 python.org 下載對(duì)應(yīng)安裝包安裝時(shí)第一步就要勾上 Add Python to PATH。這個(gè)選項(xiàng)決定你之后能不能在命令行直接敲python沒(méi)勾的話后面會(huì)走很多彎路。macOS 上我推薦用 Homebrew 一行命令搞定brew install python3.12也可以用官網(wǎng)安裝包但裝完要確認(rèn)安裝器有沒(méi)有幫你把路徑寫(xiě)進(jìn) shell 配置。Linux 的情況特殊一點(diǎn)。系統(tǒng)通常自帶 Python而且版本可能偏舊但系統(tǒng)工具依賴系統(tǒng) Python千萬(wàn)不要手賤卸載。正確做法是額外裝一個(gè)Ubuntu/Debian 下執(zhí)行sudo apt install python3 python3-pip python3-venvCentOS 系則是sudo dnf install python3。裝完用python3 --version驗(yàn)證。注意在 Linux 上很多環(huán)境里python命令默認(rèn)指向舊版本或根本不存在所以統(tǒng)一用python3和pip3更保險(xiǎn)。裝完之后打開(kāi)終端執(zhí)行下面兩行python --version python3 --version能看到版本號(hào)說(shuō)明解釋器已經(jīng)就位。接著用任意編輯器寫(xiě)一行print(hello python)存成 hello.py在終端運(yùn)行python hello.py正確輸出就說(shuō)明整條鏈路通了。所謂“python下載安裝教程”核心其實(shí)就是這一步把 PATH 配好、把版本驗(yàn)證好后面的事都會(huì)順很多。2.2 編輯器選擇與解釋器配置VSCode 和 PyCharm 怎么選編輯器我見(jiàn)得最多的兩個(gè)選擇是 VSCode 和 PyCharm。VSCode 輕量、啟動(dòng)快、插件生態(tài)強(qiáng)裝一個(gè)官方 Python 插件ms-python.python就能獲得代碼高亮、補(bǔ)全、調(diào)試和 Jupyter Notebook 支持。PyCharm 是專為 Python 打造的 IDE新建項(xiàng)目時(shí)會(huì)自動(dòng)幫你創(chuàng)建虛擬環(huán)境調(diào)試和重構(gòu)功能對(duì)初學(xué)者更友好缺點(diǎn)是比較吃內(nèi)存。我的建議很直接電腦配置一般、喜歡清爽界面的選 VSCode想要開(kāi)箱即用、不想折騰插件的選 PyCharm Community 版免費(fèi)且足夠用。如果你的選擇是 VSCode配置解釋器只要三步第一安裝 Python 插件第二按 CtrlShiftP 打開(kāi)命令面板輸入 Python: Select Interpreter選擇剛裝好的解釋器第三新建一個(gè) .py 文件看右下角狀態(tài)欄是否顯示解釋器版本顯示了就是被正確識(shí)別。這一步特別關(guān)鍵很多“代碼能跑但補(bǔ)全和調(diào)試不生效”的問(wèn)題根源就是解釋器沒(méi)選對(duì)。VSCode 本質(zhì)是編輯器真正執(zhí)行代碼的是你選中的 Python 解釋器兩者必須對(duì)應(yīng)上。PyCharm 用戶則省心很多新建項(xiàng)目時(shí)它會(huì)自動(dòng)檢測(cè)系統(tǒng)解釋器或者直接幫你建一個(gè)虛擬環(huán)境。兩個(gè)工具各有擁護(hù)者但只要你理解了“解釋器”這個(gè)概念換哪個(gè)編輯器都不會(huì)慌。2.3 虛擬環(huán)境最容易被新手跳過(guò)的關(guān)鍵一步接下來(lái)是我認(rèn)為新手最值得花五分鐘理解的概念虛擬環(huán)境。說(shuō)人話它就是給每個(gè)項(xiàng)目單獨(dú)隔離出一整套 Python 依賴目錄。為什么要這么麻煩因?yàn)椴煌?xiàng)目對(duì)同一個(gè)庫(kù)的版本要求經(jīng)常打架。項(xiàng)目 A 要用 pandas 1.5項(xiàng)目 B 要用 pandas 2.0如果全裝到全局環(huán)境總有一個(gè)項(xiàng)目會(huì)出事。創(chuàng)建一個(gè)虛擬環(huán)境的命令極其簡(jiǎn)單python -m venv venv # Windows 激活方式venv\Scripts\activate # macOS/Linux 激活方式source venv/bin/activate pip install pandas激活之后命令行前面會(huì)出現(xiàn)(venv)前綴表示當(dāng)前所有pip install都只會(huì)裝進(jìn)這個(gè)項(xiàng)目目錄。之后無(wú)論安裝什么庫(kù)都只影響當(dāng)前項(xiàng)目換電腦或者項(xiàng)目不要了直接刪掉整個(gè) venv 文件夾系統(tǒng)干干凈凈。我見(jiàn)過(guò)太多人把所有庫(kù)一股腦裝進(jìn)全局環(huán)境一個(gè)月后自己都不清楚環(huán)境里有什么排查問(wèn)題只能推倒重來(lái)。虛擬環(huán)境越早用后面越省心。3. 語(yǔ)法入門(mén)不需要背但必須理解的部分3.1 變量、類型與流程控制入門(mén)三件套Python 的語(yǔ)法核心我認(rèn)為只需要先掌握三件事變量與常見(jiàn)數(shù)據(jù)類型、流程控制、函數(shù)。其余像類、裝飾器、生成器都是在解決更復(fù)雜問(wèn)題時(shí)才需要的進(jìn)階工具入門(mén)階段可以先不碰。下面這段代碼幾乎覆蓋了最核心的內(nèi)容name 小明 age 24 scores [90, 85, 78] info {city: 杭州, job: 數(shù)據(jù)分析師} for score in scores: if score 80: print(f{name} 的成績(jī) {score} 分屬于優(yōu)秀) else: print(f{name} 的成績(jī) {score} 分需要加油) print(f城市{info[city]}職業(yè){info[job]})這里有幾個(gè)概念要理解。name是字符串scores是列表info是字典列表和字符串有in式遍歷字典用鍵取值。f...是格式化字符串相當(dāng)于把變量拼進(jìn)文本里的快捷方式比起老式的xxx name xxx清爽得多。流程控制就一個(gè)if...else加一個(gè)for循環(huán)這兩樣?xùn)|西在任何語(yǔ)言里都是主干。Python 是動(dòng)態(tài)類型語(yǔ)言變量不需要提前聲明類型賦值即聲明這讓代碼非常短。但動(dòng)態(tài)類型也是一把雙刃劍類型錯(cuò)誤往往要到運(yùn)行那一刻才暴露。所以遇到不確定的數(shù)據(jù)最好先用type()或isinstance()檢查一下避免出現(xiàn)“解了半天才發(fā)現(xiàn)是字符串不是數(shù)字”這種哭笑不得的 bug。3.2 函數(shù)和 abs 這類內(nèi)置函數(shù)先學(xué)會(huì)用現(xiàn)成的輪子很多新手有個(gè)誤區(qū)覺(jué)得學(xué)編程就是要背一堆函數(shù)。其實(shí) Python 最省心的地方就在于內(nèi)置函數(shù)已經(jīng)覆蓋了絕大多數(shù)日常操作。以 abs 為例它是絕對(duì)值函數(shù)abs(-10)返回 10abs(3.7)返回 3.7用來(lái)做差值計(jì)算、誤差判定都很順手。類似的常用內(nèi)置函數(shù)還有l(wèi)en長(zhǎng)度、sum求和、max/min最大最小、round四舍五入、sorted排序、zip配對(duì)、enumerate帶下標(biāo)遍歷。a -12.8 print(abs(a)) # 12.8 prices [19.9, 25.0, 8.8, 32.5] print(sum(prices)) # 86.2 print(max(prices)) # 32.5 names [alice, bob, cindy] for i, name in enumerate(names): print(i, name.title())自定義函數(shù)更簡(jiǎn)單def關(guān)鍵字加上函數(shù)名和參數(shù)列表return返回結(jié)果。你完全可以暫時(shí)忽略那些花哨寫(xiě)法先把def add(a, b): return a b這種最小結(jié)構(gòu)寫(xiě)熟。內(nèi)置函數(shù)是標(biāo)配工具自定義函數(shù)是你自己的工具理解了這兩者的區(qū)別再去看別人代碼會(huì)順利很多。有時(shí)候會(huì)被問(wèn)到 abs 如果傳字符串會(huì)怎樣答案是 TypeError。這類細(xì)節(jié)提醒你一個(gè)好習(xí)慣不確定某個(gè)函數(shù)的行為時(shí)最快的驗(yàn)證方式不是翻文檔而是直接在交互式環(huán)境里跑一下。Python 的 REPL 就是個(gè)免費(fèi)實(shí)驗(yàn)室隨手敲幾行答案立刻出來(lái)。3.3 寫(xiě)出能維護(hù)的代碼命名、注釋與風(fēng)格入門(mén)語(yǔ)法學(xué)得快但代碼質(zhì)量是另一回事。Python 官方有一套風(fēng)格規(guī)范叫 PEP 8不需要背記住三條最關(guān)鍵的用 4 個(gè)空格縮進(jìn)而不是 Tab變量和函數(shù)名用snake_case小寫(xiě)加下劃線每一行盡量別超過(guò) 80 個(gè)字符??s進(jìn)尤其重要因?yàn)樗皇茄b飾而是語(yǔ)法本身混用 Tab 和空格會(huì)直接拋 IndentationError。命名比風(fēng)格更影響閱讀體驗(yàn)。x 1和total_sales 1后者的信息量完全不同。注釋我建議多寫(xiě)“為什么”少寫(xiě)“做了什么”。count count 1 # 計(jì)數(shù)加一這種注釋等于沒(méi)說(shuō)但# 這里需要再等一輪重試否則會(huì)觸發(fā)接口限流就能真正幫到三個(gè)月后的自己。免費(fèi)源碼大全里的代碼大多能運(yùn)行但存量代碼風(fēng)格千奇百怪。你看到一段能跑但看不懂的代碼不要急著背先照著 PEP 8 改一遍格式、補(bǔ)上命名這個(gè)過(guò)程本身就是特別好的訓(xùn)練。代碼是寫(xiě)給人看的只是順便能運(yùn)行這句話等你回看自己三個(gè)月前寫(xiě)的程序時(shí)會(huì)很有體會(huì)。4. 能拿去玩的三個(gè)方向把語(yǔ)法變成作品4.1 愛(ài)心代碼第一個(gè)能發(fā)給別人的程序Python 愛(ài)心代碼是很多人的第一個(gè)“作品”。別笑這其實(shí)是特別好的入門(mén)方式目標(biāo)清晰、畫(huà)面直觀、還能分享給朋友滿足感來(lái)得非???。最常見(jiàn)的是用內(nèi)置的 turtle 庫(kù)畫(huà)愛(ài)心不需要額外安裝直接跑經(jīng)典版本import turtle t turtle.Turtle() t.speed(3) t.color(red, pink) t.begin_fill() t.left(140) t.forward(112) t.circle(-56, 200) t.left(120) t.circle(-56, 200) t.forward(112) t.end_fill() t.hideturtle() turtle.done()這段代碼的核心是畫(huà)筆控制left(140)讓畫(huà)筆轉(zhuǎn)向forward(112)畫(huà)直線circle(-56, 200)畫(huà)一段圓弧左右兩段圓弧加上一條直線就拼出了愛(ài)心輪廓。想改大小就調(diào) forward 和 radius想換配色就改 color 的兩個(gè)參數(shù)。跑起來(lái)那一刻會(huì)有個(gè)小窗口彈出第一次看到自己做的東西動(dòng)起來(lái)比背十頁(yè)語(yǔ)法都有用。如果覺(jué)得 turtle 太基礎(chǔ)還有用數(shù)學(xué)公式畫(huà)的版本愛(ài)心線的參數(shù)方程是x 16 * sin(t) ** 3y 13 * cos(t) - 5 * cos(2t) - 2 * cos(3t) - cos(4t)配合 matplotlib 能畫(huà)出更精致的圖形。這類代碼網(wǎng)上非常多建議你拿到之后先別急著復(fù)制看看參數(shù)方程到底在描述什么再動(dòng)手復(fù)現(xiàn)收獲會(huì)大得多。4.2 爬蟲(chóng)采集公開(kāi)數(shù)據(jù)要注意的邊界爬蟲(chóng)是 Python 搜索熱詞里的常客也是很多人的第二個(gè)項(xiàng)目。先說(shuō)清楚一個(gè)定義爬蟲(chóng)只是自動(dòng)獲取網(wǎng)頁(yè)數(shù)據(jù)的程序本身沒(méi)有對(duì)錯(cuò)關(guān)鍵看你怎么用。我只建議做公開(kāi)數(shù)據(jù)、合法合規(guī)的采集并且盡量先看目標(biāo)網(wǎng)站的規(guī)則。一套最小可用的爬蟲(chóng)結(jié)構(gòu)通常三步請(qǐng)求網(wǎng)頁(yè)、解析內(nèi)容、保存結(jié)果。import requests resp requests.get(https://httpbin.org/get, timeout10) print(resp.status_code) print(resp.text[:300])requests.get拿到網(wǎng)頁(yè)響應(yīng)status_code是 200 表示請(qǐng)求成功。這個(gè)庫(kù)你基本必裝pip install requests一條命令搞定。接著用 BeautifulSoup 做解析from bs4 import BeautifulSoup text htmlbodyh1標(biāo)題/h1p正文/p/body/html soup BeautifulSoup(text, html.parser) print(soup.h1.get_text())關(guān)于爬蟲(chóng)我要多說(shuō)幾句邊界。請(qǐng)求頻率過(guò)高會(huì)把目標(biāo)站點(diǎn)壓垮這不僅是技術(shù)問(wèn)題更是公共素養(yǎng)問(wèn)題涉及個(gè)人隱私、會(huì)員信息、版權(quán)內(nèi)容的數(shù)據(jù)不要碰站點(diǎn)明確禁止的路徑不要硬闖。編程能力可以慢慢練但合規(guī)意識(shí)必須一開(kāi)始就建立這是這一行能不能走得遠(yuǎn)的分水嶺。熱詞里還有“python爬蟲(chóng)可視化界面”本質(zhì)上就是把爬蟲(chóng)和下一節(jié)的數(shù)據(jù)可視化串起來(lái)先爬數(shù)據(jù)存進(jìn) DataFrame再畫(huà)圖展示。別被“界面”兩個(gè)字嚇到最小實(shí)現(xiàn)也就二三十行代碼。4.3 數(shù)據(jù)可視化讓數(shù)字說(shuō)話數(shù)據(jù)拿到手之后總得讓人看懂這時(shí)候就輪到數(shù)據(jù)分析與可視化上場(chǎng)。熱詞里的“python數(shù)據(jù)分析與可視化”核心套路就三步用 pandas 讀數(shù)據(jù)、用 pandas 清洗和聚合、用 matplotlib 畫(huà)圖。import pandas as pd import matplotlib.pyplot as plt data {語(yǔ)言: [Python, C, C, Java, JavaScript], 熱度指數(shù): [100, 76, 68, 65, 63]} df pd.DataFrame(data) print(df.describe()) df.plot.bar(x語(yǔ)言, y熱度指數(shù), legendFalse) plt.title(編程語(yǔ)言熱度示例) plt.show()這段代碼先把字典轉(zhuǎn)成類似 Excel 表的 DataFramedescribe()一行就能輸出數(shù)據(jù)的最小值、最大值、平均值等統(tǒng)計(jì)信息plot.bar直接把柱狀圖畫(huà)出來(lái)。新手在這里最常見(jiàn)的坑是中文亂碼matplotlib 默認(rèn)字體集沒(méi)有中文字符畫(huà)出的圖全是方塊解決辦法是畫(huà)圖前加兩行設(shè)置plt.rcParams[font.sans-serif] [Microsoft YaHei, SimHei] plt.rcParams[axes.unicode_minus] False第一行固定中文字體第二行防止負(fù)號(hào)顯示成方框。這個(gè)坑幾乎人人都會(huì)踩建議直接寫(xiě)進(jìn)自己的繪圖配置模板里能省很多時(shí)間。pandas 和 matplotlib 的官方文檔都特別厚但你不需要一次讀完遇到需求時(shí)查某個(gè)函數(shù)就行實(shí)際用三個(gè)月之后自然會(huì)記住常用的一半。4.4 量化交易策略從回測(cè)開(kāi)始的正確姿勢(shì)量化交易策略代碼能上熱詞某種程度上反映了大家對(duì)“用代碼賺錢”的興趣。我必須先潑一盆冷水任何告訴你量化交易穩(wěn)賺不賠的內(nèi)容都不可信。正確的入門(mén)姿勢(shì)是從回測(cè)開(kāi)始用歷史數(shù)據(jù)驗(yàn)證策略邏輯而不是急著拿真金白銀去賭。import pandas as pd # 假設(shè) price.csv 至少有 close 列收盤(pán)價(jià) df pd.read_csv(price.csv) df[ma5] df[close].rolling(5).mean() df[ma20] df[close].rolling(20).mean() # 5日均線上穿20日均線時(shí)持有多頭倉(cāng)位 df[signal] (df[ma5] df[ma20]).astype(int) df[position] df[signal].diff().fillna(0) df[ret] df[close].pct_change() df[strategy_ret] df[position] * df[ret] print(策略累計(jì)收益率:, (1 df[strategy_ret]).prod() - 1)這是一個(gè)最簡(jiǎn)單的雙均線策略rolling(5).mean()算 5 日均線rolling(20).mean()算 20 日均線signal記錄每日是否滿足持倉(cāng)條件position用diff()算出倉(cāng)位變化strategy_ret把當(dāng)日收益率乘到倉(cāng)位權(quán)重上。邏輯不難但要真正可信還要考慮交易手續(xù)費(fèi)、滑點(diǎn)、做空限制、數(shù)據(jù)前瞻性偏差。第一次跑通回測(cè)之后我建議放一段時(shí)間先觀察這個(gè)策略在不同行情下的表現(xiàn)再談模擬盤(pán)最后才是實(shí)盤(pán)。真金白銀面前紀(jì)律比模型重要。5. 新手必踩的坑和排查清單5.1 環(huán)境問(wèn)題速查表把我在實(shí)踐里見(jiàn)過(guò)的高頻問(wèn)題整理成一張速查表基本覆蓋從安裝到上手 80% 的卡殼點(diǎn)| 現(xiàn)象 | 可能原因 | 解決方法 | | 提示 “python 不是內(nèi)部或外部命令” | Windows 沒(méi)把 Python 加入 PATH | 重新運(yùn)行安裝程序勾選 Add to PATH或手動(dòng)添加安裝目錄到環(huán)境變量 | | 明明裝了庫(kù)卻報(bào) ModuleNotFoundError | 庫(kù)裝進(jìn)了別的環(huán)境 | 檢查當(dāng)前虛擬環(huán)境是否激活用pip list查看實(shí)際已裝列表 | | pip install 超時(shí)或速度極慢 | 默認(rèn)源在國(guó)外 | 換國(guó)內(nèi)鏡像pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名| | Linux 升級(jí)系統(tǒng)自帶 Python 后系統(tǒng)工具報(bào)錯(cuò) | 動(dòng)了系統(tǒng)依賴的解釋器 | 不要卸載或升級(jí)系統(tǒng) Python改用 pyenv 或單獨(dú)安裝新版本 | | 運(yùn)行代碼報(bào) IndentationError | 縮進(jìn)混用 Tab 與空格 | 在編輯器里開(kāi)啟“用空格代替 Tab”統(tǒng)一為 4 個(gè)空格 | | matplotlib 中文顯示成方塊 | 默認(rèn)字體不含中文 | 設(shè)置 rcParams 字體為中文字體如 SimHei 或 Microsoft YaHei | | 代碼一樣別人能跑我不能跑 | 編輯器選錯(cuò)了解釋器 | 在 VSCode/PyCharm 中重新選擇 Python 解釋器為當(dāng)前項(xiàng)目環(huán)境 |排查這類問(wèn)題有個(gè)通用的笨辦法把報(bào)錯(cuò)信息整段復(fù)制到搜索引擎優(yōu)先看標(biāo)題語(yǔ)言和你的報(bào)錯(cuò)一致的頁(yè)面?,F(xiàn)實(shí)里 90% 的問(wèn)題別人都踩過(guò)答案早就在網(wǎng)上你只需要學(xué)會(huì)用準(zhǔn)確的報(bào)錯(cuò)短語(yǔ)去搜索而不是把整段代碼貼出來(lái)問(wèn)“哪里錯(cuò)了”。5.2 免費(fèi)源碼怎么用別下下來(lái)就跑熱詞里的“免費(fèi)python源碼大全”聽(tīng)起來(lái)很誘人但我得提醒一句下載下來(lái)的代碼先別急著運(yùn)行??孔V的做法分四步。第一先讀 README搞清楚項(xiàng)目依賴什么庫(kù)、需要什么配置、入口文件是哪個(gè)。第二看 requirements.txt在虛擬環(huán)境里逐項(xiàng)安裝依賴。第三從入口函數(shù)讀起搞清楚程序啟動(dòng)后的執(zhí)行流程再回頭讀各個(gè)模塊。第四改參數(shù)試運(yùn)行觀察輸出變化這樣才能真正理解而不是跑通就完事。還有一個(gè)安全提醒不要直接運(yùn)行來(lái)源不明的代碼很多惡意腳本就藏在“免費(fèi)源碼”里。建議先在隔離環(huán)境打開(kāi)讀一遍遇到看不懂的加密、混淆、自動(dòng)下載執(zhí)行外部?jī)?nèi)容的代碼立刻放棄。這個(gè)習(xí)慣在入門(mén)階段就要養(yǎng)成編程世界并不全是善意。5.3 學(xué)習(xí)建議保持動(dòng)手的節(jié)奏最后聊學(xué)習(xí)方法。我看到太多人學(xué) Python 的路徑是“收藏了 N 個(gè)教程一個(gè)月后還在看安裝篇”本質(zhì)原因是只看不練。編程是手藝活和學(xué)游泳一樣光看視頻不會(huì)游必須下水。我推薦的路線是這樣裝好環(huán)境當(dāng)天就寫(xiě)第一個(gè) hello第一周強(qiáng)化變量、循環(huán)、函數(shù)第二周做一個(gè)小項(xiàng)目比如把第 4 節(jié)的愛(ài)心代碼或爬蟲(chóng)跑起來(lái)第三周改進(jìn)它加參數(shù)、加功能把它變成自己的東西。不要貪多。網(wǎng)上教程動(dòng)輒幾十小時(shí)真正決定你會(huì)不會(huì)的是你親手寫(xiě)的代碼量。每天只寫(xiě) 30 行堅(jiān)持 21 天都遠(yuǎn)超大多數(shù)人的練習(xí)量。每學(xué)一條語(yǔ)法時(shí)都問(wèn)自己一句這個(gè)知識(shí)點(diǎn)能用來(lái)做什么想不出來(lái)的就先跳過(guò)說(shuō)明現(xiàn)在還用不到以后碰到自然能想起來(lái)。我自己的體會(huì)是Python 最迷人的地方不是“簡(jiǎn)單”而是反饋極快。敲錯(cuò)一個(gè)括號(hào)終端馬上告訴你錯(cuò)在哪一行畫(huà)錯(cuò)了圖馬上能看見(jiàn)策略回測(cè)不賺錢馬上能知道。這種即時(shí)反饋?zhàn)寣W(xué)習(xí)變成一種正循環(huán)只要你能忍住前兩周的笨拙后面會(huì)越跑越順。所以如果你現(xiàn)在還在下載頁(yè)面前猶豫裝哪個(gè)版本我的建議只有一個(gè)裝最新的穩(wěn)定版先跑起來(lái)再說(shuō)。