明確學習目標,不急于求成
當下是一個喧囂、浮躁的時代,我們總是被生活中大量涌現的熱點所吸引,幾乎沒有深度閱讀和思考的時間和機會,我始終認為,學習是需要沉下心來慢慢鉆研的,是長
期的;同時,學習不應該被賦予太多的功利色彩,一個Python 程式員的成長路線圖應該是這樣子的:基礎語法–>語感訓練–>課題練習–>分方向繼續學習–>中級程式員–>
拓展深度和廣度–>高級程式員,
然而,很多新手的學習路線圖卻是這樣子的:學完基礎語法之后,不了解 http 協議和 Ajax 異步請求,就興沖沖研究爬蟲去了;或者,學完基礎語法,就去搞視覺識別
連 OpenCV 的資料結構都看不懂;甚至,學完基礎語法就直接研究神經網路,結果是重演了一遍從入門到放棄,

我體會和建議就是,不急于求成,不好高騖遠,一步一步,穩扎穩打,功到自然成,不急于求成,可以避免走彎路,非但不會延緩你成長的速度,反倒會節省你的時間,
不好高騖遠,達成一個目標,再制定下一個目標,在連續的成功和進步中,建立起自信心,激發出更強的學習興趣,
在開始學習 Python 之前,你需要做一些準備
Now is better than never, Although never is often better than *right* now. 翻譯過來的意思是,做也許好過不做,但不假思索就動手還不如不做,的確,在開始學習 Python 之前,你需要了解的一些背景,做出一些選擇,并在你的計算機上做好準備作業,
Python 的各種發行版
Python 是龜叔的獨生子,但他有很多堂兄弟,比較有名的也有好幾位,如果你不確定哪個對你更友好,我建議你選擇嫡傳的 Python——即便你將來需要和他的其他堂兄
弟打交道,那也是熟門熟路,不建議初學者選擇AnacondaPython 和 ActivePython,在我看來他們提供的便利不如給用戶學習帶來的麻煩多,
Cpython
CPython 屬于 Python 參考實作方案,可算是所有其他 Python 衍生發行版的一套標準化版本,CPython 利用 C 語言撰寫而成,而其撰寫者包含多位 Python 語言頂級決策
層中的核心人員,CPython 在優化方面表現得最為保守,當然,這并不是缺點,而是設計取向,Python 的維護者們希望將 CPython 打造為 Python 最具廣泛兼容性與標準化的
實作方案,CPython 最適合對 Python 標準的兼容性與一致性要求較高的用戶,此外,CPython 同樣適用于希望以最基本方式使用 Python并愿意為此放棄某些便捷性的專業人士,
Anaconda Python
Anaconda 源自 Anaconda 公司之手(原名為 Continuum Analytics),其設計目標在于服務那些需要由商業供應商提供支持且具備企業支持服務的 Python 開發者,
Anaconda Python 的主要用例包括數學、統計學、工程、資料分析、機器學習以及其他相關應用,Anaconda 捆綁有 Python 商業與科學使用場景當中的各類常用庫——包括
SciPy、NumPy 以及 Numba 等等,同時通過一套定制化軟體包管理系統提供更多庫訪問能力,
ActivePython
與Anaconda類似,ActivePython同樣由營利性企業創建及維護——ActiveState公司,該公司還在銷售多種語言運行時以及多語言Komodo IDE,ActivePython主要面向企業
用戶與資料科學家——即希望使用Python語言,但又不愿把大量精力浪費在Python的組裝與管理方面,ActivePython使用Python中的常規pip軟體包管理器,但同時亦以認證壓
縮包的形式提供數百套通用庫,外加英特爾數學核心庫等其他一些具有第三方依賴關系的公共庫,
PyPy
PyPy 屬于CPython解釋器的替代品,其利用即時(JIT)編譯以加速Python程式的執行,根據實際執行的任務情況,其性能提升可能非常顯著,人們對于Python——特別是CPython
的抱怨之聲,主要圍繞其速度表現展開,在默認情況下,Python的運行速度遠不及C語言——差距甚至可能達到數百倍,PyPy JIT將Python代碼編譯為機器語言,從而帶來平均7.7倍
于CPython的運行速度,在某些特定任務中,其提速效果能夠達到50倍,
Jython
JVM(Java虛擬機)能夠作為除Java之外的多種語言的運行時選項,這份長的名單包括Groovy、Scala、Clojure、Kotlin、Python以及——沒錯,當然還有Jython ,Jython最大
的弊端在于其僅支持Python的2.x版本,目前對Python 3.x版本的支持能力尚在開發當中,但仍需要相當一段時間,當下,還沒有任何相關版本放出,
IronPython
類似于Jython的JVM上Python實作方案定位,IronPython屬于一套立足.Net運行時——或者CLR(公共語言運行時)——的Python實作方案,IronPython利用CLR的DLR(動態語言運行時)
以允許Python程式以等同于CPython的動態水平實作運行,與Jython類似,IronPython目前只支持Python 2.x版本,不過IronPython 3.x實作方案已經處于緊鑼密鼓的開發當中,
安裝Python
從 Python 官網下載時,請注意選擇正確的版本,如果是用于學習,下載最新版沒有問題,如果是用于生產,則要考慮你開發需要的第三方模塊是否支持最新版的 Python,
安裝時不要忘記勾選最下面的兩個復選框,否則會給后續的模塊安裝帶來一些麻煩,推薦使用默認方式安裝

選擇一款趁手的開發工具
學習一種編程語言,首先要找一款合用的集成開發工具,似乎是自然而然的想法,為什么不呢?IDE可以自動補齊,可以一鍵運行,還可以斷點除錯,使用IDE開發專案
就像駕駛一輛內飾豪華的汽車,盡情享受駕駛的樂趣就好了,誰還去關心引擎蓋里面發動機是如何作業的呢?我的年輕同事們也都是IDE的擁堆疊,最初使用pycharm后來
是時下大熱的vscode,可是,我始終認為,編程就像是駕駛,程式員就是司機,而且是職業司機,不是把駕駛當成通勤技能的各色白領金領,既然是職業司機,就不能
滿足于打著領結、戴著白手套駕駛內飾豪華、配置高端的汽車,而是必須具備打開引擎蓋子維修和保養的能力,
基于這個觀點,我不建議初學者一開始就使用集成開發工具——至少,在開始第一個星期不要使用IDE,對于python這樣一種解釋型的腳本語言,一款趁手的編輯器就足
夠了,linux平臺上,vim或者emacs都足夠好(如果你通曉二者或者其中之一的話,請接受我的敬意);windows平臺上,我推薦使用notepad++,python初學者使用編
輯器而非IDE的好處是:
1、專注于python本身,而不是被工具使用問題所困擾,君不見,知乎上關于pycharm和vscode的使用說明、常見問題的解決方案,多得幾乎超過了討論python本身
2、手工運行代碼,可以更直觀、更深刻地了解腳本的解釋執行程序
3、手工除錯代碼,有助于代碼優化,提高代碼把控能力
4、可以更好地使用pip安裝和管理第三方模塊
習慣使用IDLE,這是學習python最好的方式
解釋型語言的優勢,就是可以寫一句執行一句,想到哪兒寫到哪兒,不必像編譯型語言那樣得把程式全部寫完,編譯成功后才能運行,我特別喜歡使用python的IDLE
甚至拿它當計算器用,很多時候,我用IDLE驗證代碼的寫法是否正確,查看模塊是否安裝成功以及版本號,IDLE支持tab鍵自動補齊,我經常用這個功能查看某個物件
的方法和屬性,
>>> import numpy as np >>> np.__version__ '1.17.0' >>> np.hypot(3,4) 5.0 >>> def factorial(n): # 計算n的階乘 if n == 0: # 遞回出口 return 1 return n*factorial(n-1) # 向遞回出口方向靠近的自身呼叫 >>> factorial(5) 120 >>> _*2-100 140
小技巧
- tab鍵自動補齊
- 游標移動到執行過的陳述句上敲擊回車,可以重復這個命令
- 下劃線(_)可以獲取最后一次執行結果
實際上,IDLE就是一個IDE,你可以用它來創建或打開.py腳本檔案,可以編輯、運行和除錯,

嚴格遵從編碼規范
Linux 平臺上,一個 python 原始碼檔案應該以下部分組成,Windows 平臺上,可以省略第一項,
- 解釋器宣告
- 編碼格式宣告
- 模塊注釋或檔案字串
- 模塊匯入
- 常量和全域變數宣告
- 頂級定義(函式或類定義)
- 執行代碼
好在龜叔說過,A Foolish Consistency is the Hobgoblin of Little Minds(盡信書,不如無書),只要保持一致性、可讀性,就是一個好的規范,基于PEP8規范的原則
結合開發團隊在作業中的養成的習慣,我整理了一份實用的編碼規范,推薦給初學者,
Python 檔案組成
#!/usr/bin/env python # -*- coding: utf-8 -*- """通常這里是關于本檔案的說明(docstring),須以半角的句號、 問號或驚嘆號結尾! 本行之前應當空一行,繼續完成關于本檔案的說明 如果檔案說明可以在一行內結束,結尾的三個雙引號不需要換行;否則,就要像下面這樣 """ import os, time import datetime import math import numpy as np import xlrd, xlwt, xlutils import youth_mongodb import youth_curl BASE_PATH = r"d:\YouthGit" LOG_FILE = u"運行日志.txt" class GameRoom(object): """對局室""" def __init__(self, name, limit=100, **kwds): """建構式! name 對局室名字 limit 人數上限 kwds 引數字典 """ pass def craete_and_start(): """創建并啟動對局室""" pass if __name__ == '__main__': # 開啟游戲服務 start()
編碼格式宣告
通常,編碼格式宣告是必需的,如果 python 原始碼檔案沒有宣告編碼格式,python 解釋器會默認使用 ASCII 編碼,一旦原始碼檔案包含非ASCII編碼的字符,python 解釋器
就會報錯,以 UTF-8 為例,以下兩種編碼格式宣告都是合乎規則的,
# -*- coding: utf-8 -*- # coding = utf-8
我一直 UTF-8 編碼格式,喜歡使用第一種宣告方式,
Windows 平臺上,編碼格式宣告必須位于 python 檔案的第一行,Linux 平臺上,編碼格式宣告通常位于 python 檔案的第二行,第一行是 python 解釋器的路徑宣告,
#!/usr/bin/env python # -*- coding: utf-8 -*-
縮進
統一使用 4 個空格進行縮進,絕對不要用tab, 也不要tab和空格混用,對于行連接的情況,我一般使用4空格的懸掛式縮進,例如:
var_dict = { 'name': 'xufive', 'mail': '[email protected]' }
引號
引號使用的一般性原則:
- 自然語言使用雙引號
- 機器標識使用單引號
- 正則運算式使用雙引號
- 檔案字串 (docstring) 使用三個雙引號
注釋
#號后空一格,段落件用空行分開(同樣需要#號):
# 塊注釋 # 塊注釋 # # 塊注釋 # 塊注釋
行內注釋,至少使用兩個空格和陳述句分開:
age += 1 # 年齡增加一歲
比較重要的注釋段, 使用多個等號隔開, 可以更加醒目, 突出重要性:
server= gogame(room, options) # ===================================== # 請勿在此處傾倒垃圾!!! # ===================================== if __name__ == '__main__': server.run()
空行
空行使用的一般性原則:
- 編碼格式宣告、模塊匯入、常量和全域變數宣告、頂級定義和執行代碼之間空兩行
- 頂級定義之間空兩行,方法定義之間空一行
- 在函式或方法內部,可以在必要的地方空一行以增強節奏感,但應避免連續空行
空格
空格使用的一般性原則:
- 在二元運算子兩邊各空一格,算術運算子兩邊的空格可靈活使用,但兩側務必要保持一致
- 不要在逗號、分號、冒號前面加空格,但應該在它們后面加(除非在行尾)
- 函式的引數串列中,逗號之后要有空格
- 函式的引數串列中,默認值等號兩邊不要添加空格
- 左括號之后,右括號之前不要加添加空格
- 引數串列, 索引或切片的左括號前不應加空格
檔案字串
檔案字串是包、模塊、類或函式里的第一個陳述句,這些字串可以通過物件的__doc__成員被自動提取,并且被pydoc所用,檔案字串的使用三重雙引號("""),
如果檔案字串內容不能在一行內寫完,首行須以句號、 問號或驚嘆號結尾,接一空行,結束的三重雙引號必須獨占一行,
匯入模塊
匯入總應該放在檔案頂部,位于模塊注釋和檔案字串之后,模塊全域變數和常量之前,匯入應該按照從最通用到最不通用的順序分組,分組之間空一行:
- 標準庫匯入
- 第三方庫匯入
- 應用程式指定匯入
應當避免使用以下的匯入方法:
from math import *
命名規范
命名建議遵循的一般性原則:
- 模塊盡量使用小寫命名,首字母保持小寫,盡量不要用下劃線
- 類名使用駝峰(CamelCase)命名風格,首字母大寫,私有類可用一個下劃線開頭
- 函式名一律小寫,如有多個單詞,用下劃線隔開
- 私有函式可用一個下劃線開頭
- 變數名盡量小寫, 如有多個單詞,用下劃線隔開
- 常量采用全大寫,如有多個單詞,使用下劃線隔開
代碼的運行、除錯
如果你使用的集成開發工具,那么代碼的運行和除錯,就完全依賴于工具了,如果你使用編輯器開寫代碼,那就需要手工運行和除錯代碼,運行代碼分成兩步:
第1步:打開一個命令列視窗,路徑切換到腳本所在的檔案夾,我習慣在腳本所在視窗的空白位置(確保沒有選中任何物件),按下shift鍵點擊滑鼠右鍵,在彈
出的選單中選擇打開Powershell視窗,如下圖所示,

第2步:輸入python+空格+腳本檔案名,回車即可運行,輸入腳本檔案名時,按tab可以自動補齊,腳本的運行資訊、錯誤資訊、運行結果等,都可以顯示在這個視窗中
這是最原始的資訊,你在其他開發工具中看到資訊,都是對這些資訊的再加工,
當然,很多編輯器也支持自定義運行命令,可以實作一鍵運行python腳本,以Notdpan++為例,點擊“運行”->“運行”選單,在彈出的視窗中輸入:
cmd /k cd /d “$(CURRENT_DIRECTORY)” & python “$(FULL_CURRENT_PATH)” & echo. & pause & exit
因為轉義緣故,復制該命令的話,請檢查$符號前面是否有\符號,如有,請洗掉,接下來,點擊“保存”按鈕,在彈出的視窗中輸入新增命令的名稱,比如PyRun,定義快捷
鍵,最后點擊“確定”按鈕,
完成以上設定后,就可以在Notepad++中使用選單命令或者快捷鍵運行Python代碼了,手工除錯代碼的手段不多,除了 print 資訊,幾乎只有把除錯資訊寫成除錯檔案了
聽起來,好像問題很嚴重,其實只是理念和取向不同而已,反過來想,手段單一不恰好意味著簡單、簡明嗎?我一直使用 print 除錯,堅信沒有比它更好的了
模塊管理
在python語言的發展程序中,安裝和管理第三方模塊的方法也歷經變化,現在,我們終于等來了pip這個近乎完美的工具,pip除了安裝(install)和洗掉(uninstall)這
兩大功能,還可以指定模塊的安裝版本(無需預先洗掉當前已安裝版本),可以顯示所有已安裝的模塊,還可以通過 upgrade 自主升級,很多學者在使用pip時會遇到
各種各樣稀奇古怪的問題,我在這里解釋一下:
同時安裝了py2/py3
同時安裝了py2/py3,將會存在多個版本的pip.exe,你如果直接運行:
pip install <模塊名>
則有可能因為pip.exe版本不對而出錯,正確的做法是指定python版本,-m是python解釋器的引數,意思是把pip模塊做為腳本運行,完整命令如下:
py -3 -m pip install <模塊名>
使用Anaconda,或者通過IDE來安裝模塊
如果你使用的是Anaconda Python,或者你是通過IDE來安裝模塊,則需要檢查它們的配置和設定,情況各有不同,沒有統一的解決方案,
僅安裝了py2 或 py3
如果你的計算機只安裝了py2 或者 py3,那么上面兩種安裝方法應該都沒有問題,如果你的電腦找不到pip.exe檔案,則可以使用這個命令生成:
python -m ensurepip
pip應用演示
下面,就以同時安裝了py2/py3的計算機為例(如果只安裝了py2或py3,需要將下面演示中的py -3替換成python),演示pip模塊的用法,不管任何情況,我都建議使用
-m引數呼叫pip模塊,而不是直接使用 pip.exe 安裝模塊,
# 雖然可以這樣使用pip安裝模塊(以numpy為例) D:\XufiveGit\wxgl> pip install numpy # 但我建議這樣使用pip D:\XufiveGit\wxgl> py -3 -m pip install numpy # 洗掉模塊 D:\XufiveGit\wxgl> py -3 -m pip uninstall numpy # 安裝模塊,指定版本
D:\XufiveGit\wxgl> py -3 -m pip install numpy=1.15.0 # 自主升級 D:\XufiveGit\wxgl> py -3 -m pip install --upgrade pip # 顯示已安裝的模塊 D:\XufiveGit\wxgl> py -3 -m pip list Package Version ----------------- ----------- -pencv-python 4.1.1 argh 0.26.2 attrs 19.1.0 Automat 0.7.0 basemap 1.2.0 beautifulsoup4 4.6.3 bleach 3.1.0 cefpython3 66.0 ... ...
pip也用來安裝本地whl檔案:
D:\PyPackage\py3> py -3 -m pip install .\basemap-1.2.0-cp37-cp37m-win_amd64.whl
模塊倉庫
如果你需要下載python模塊,這里是我見過的最全、最穩定的python模塊倉庫,由加州大學歐文分校熒光動力學實驗室創建并維護,
Python模塊倉庫:https://www.lfd.uci.edu/~gohlke/pythonlibs/
模塊安裝包
如果你的很多個專案中,都會用到你自己的某些模塊,那么,把這些模塊做成安裝包,安裝到你的開發環境里,可能是最佳選擇,
發布自己的python模塊安裝包,首先得把自己的模塊做成 .whl 格式的檔案,然后再找個地兒存放它,接下來就是在 pip 命令中使用 -i 引數指定這個地兒(下載源),
Just so sooooooooo
準備作業
注冊 pypi.org 用戶
我原本就是 pypi 的注冊用戶,但當我上傳 .whl 格式的檔案時,卻被提示無權限,仔細閱讀相關檔案才發現,還需要在https://test.pypi.org/account/register/ 注冊,
我不確定是不是僅在這里注冊就可用了,
使用 pip 安裝或升級幾個必備工具
生成和上傳 .whl 格式的檔案需要幾個特殊工具,好在這幾個工具使用 pip 就可以輕松搞定,
py -3 -m pip install --user --upgrade setuptools wheel
py -3 -m pip install --user --upgrade twine
規劃檔案目錄
假定要發布的模塊名稱為 wxgl,包含 scene.py, region.py, colorbar.py 等三個檔案,檔案目錄結構如下:
/wxgl_pkg wxgl __init__.py colorbar.py region.py scene.py README.md setup.py
init.py
該檔案其內容可以為空,我的 init.py檔案如下:
-*- coding: utf-8 -*- name = 'wxgl' version = "0.3.0" version_info = (0, 3, 0, 0)
README.md
關于安裝和使用的說明,文本檔案,不能使用中文,
setup.py
# -*- coding: utf-8 -*- import setuptools with open("README.md", "r") as fh: long_description = fh.read() setuptools.setup( name="wxgl", version="0.3.0", author="xufive", author_email="[email protected]", description="A 3d library based pyOpenGL.", long_description=long_description, long_description_content_type="text/markdown", url="https://github.com/xufie/wxgl", packages=setuptools.find_packages(), classifiers=[ "Programming Language :: Python :: 3", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", ], )
提醒一點:License 很重要,pipy 檢查很嚴格,不可亂寫,最初是我使用 GPL,檢查失敗,后改用 MIT 才通過,
生成安裝包檔案
運行 setup.py 腳本,生成安裝包檔案
py -3 setup.py sdist bdist_wheel
順利的話,你可以看到 dist 檔案夾:
/wxgl_pkg dist wxgl-0.3.0-py3-none-any.whl wxgl-0.0.1.tar.gz wxgl __init__.py colorbar.py region.py scene.py README.md setup.py
如果只需要 .whl 檔案,就運行:
py -3 setup.py bdist_wheel
上傳安裝包檔案
切換到 dist 路徑下,運行:
py -3 -m twine upload --repository-url https://test.pypi.org/legacy/ dist/*
根據提示輸入用戶名、密碼,稍等片刻,即可完成,
安裝
使用 -i 引數,指定安裝源為https://test.pypi.org/simple/,其他引數不變:
py -3 -m pip install -i https://test.pypi.org/simple/ wxgl
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/187938.html
標籤:Python
