- 1. 編程基礎
- 2. 程序
- 3. Python 的語言介紹
- 4. Python 的解釋器
- 5. Python 版本區別
- 6. Python 安裝
- 7. pyenv 多版本管理
- 8. pip 命令
- 9. Pycharm 安裝及基本使用
- 10. 第一個 Python 程序
1. 編程基礎
??用任何編程語言來開發程序,都是為了讓計算機干活,而計算機干活的 CPU 只認識機器指令,所以,盡管不同的編程語言差異極大,最后都得 翻譯
成 CPU 可以執行的機器指令。而不同的編程語言,干同一個活,編寫的代碼量,差距也很大。
??比如,完成同一個任務,可能 C 語言要寫 1000 行代碼,Java 需要寫 100 行,而 Python 卻只要 10 行。
??所以 Python 是一種高級語言。
??那是不是越低級的程序越難學,越高級的程序越簡單?表面上來說,是的,但是,在非常高的抽象計算中,高級的 Python 程序設計也是非常難學的,所以,高級程序語言不等于簡單。即便如此,對于初學者和完成普通任務,Python 語言還是非常簡單易用的。連 Google 都在大規模使用 Python,別擔心學了會沒用。
1.1. 基本概念
??程序:是一組能讓計算機識別和執行的指令。
??計算機五大部件:輸入設備
、輸出設備
、運算器
、控制器
、存儲器
,各部件的主要作用:
- 運算器:完成各種算數運算、邏輯運算、數據傳輸等數據加工處理
- 控制器:控制程序的執行
- 存儲器:用于記憶程序和數據,例如內存
- 輸入設備:將數據或者程序輸入到計算機中,例如鼠標、鍵盤
- 輸出設備:將數據或程序的處理結果展示給用戶,例如顯示器、打印機等
??CPU 由運算器和控制器組成,其中還有寄存器以及多級緩存,其中我們所熟知的 L1、L2 緩存是每個 CPU 核心獨占的,而 L3 緩存則是所有核心共享的。寄存器、多級緩存、內存、硬盤的讀取速度依次降低。
??計算機語言
: 人與計算機之間交互的語言,機器語言、匯編語言等屬于早期語言的代表,機器語言由一定位數組成的二進制 0 和 1 的序列組成,這種語言非常晦澀,難以理解,難以記錄,而匯編語言則借助了一些助記符來替代機器指令,雖然好記了一點,但還是難以學習,后來經過時代的變遷,牛人們的不斷貢獻,慢慢的針對不同場景的編程語言逐漸出現、百花齊放。
1.2. 語言分類
??從距離機器和人類可讀的兩種方向,主要分為 低級語言
和 高級語言
。
- 低級語言:面向的機器的語言,比如機器語言、匯編語言,不同的機器不能通用。
- 高級語言:接近人類可讀的自然和數字結合的計算機語言,由編譯程序轉換成機器指令來進行執行,我們只需要關注如何書寫源程序,剩下編譯的事情就交給編譯器進行處理。
??從運行方式來看又分為 編譯型語言
和 解釋型語言
。
- 編譯語言:把代碼轉換成目標機器的 CPU 指令
- 解釋語言:解釋后轉換成字節碼,運行在虛擬機上,解釋器執行中間代碼
??語言越高級,越接近人類的自然語言和數學語言,越低級則越能讓機器理解,高級語言和低級語言之間需要的一個轉換的工具:編譯器、解釋器,例如 C、C++ 等語言的源代碼需要本地編譯,而 Java、Python、C# 的源代碼需要被解釋器編譯成中間代碼,在虛擬機上運行。
1.3. 高級語言的發展
??高級語言根據發展歷程主要分為四個階段或者說是四種類型:非結構化
、結構化
、面向對象
、函數式
:
非結構化語言
:編號或標簽、GOTO、子程序可以有多個入口和出口,有分支、循環。結構化語言
:任何基本語句只允許是唯一入口和出口,有順序、分支、循環、廢棄 GOTO面向對象的語言
:更加接近人類認知世界的方式,萬事萬物抽象成對象,對象間關系抽象成類和繼承。而類具有封裝、繼承、多態等特性函數式語言
:屬于一種古老的編程范式,應用在數據計算、并行處理等場景,在這種語言中,函數是 ' 一等公民 ',利用函數的特性,還有更高級的比如高階函數等。
2. 程序
??程序 = 算法 + 數據結構。程序
有如下特點:
- 數據是一切程序的核心
- 數據結構是數據在計算機中的類型和組織方式
- 算法是處理數據的方式,算法有優劣之分
??寫程序難點:
- 理不清數據
- 搞不清處理方法
- 無法把數據設計轉換成數據結構,無法把處理方法轉換成算法
- 無法用設計范式來進行程序設計
- 世間程序皆有 bug,但不會 debug
3. Python 的語言介紹
??Python 是著名的 “龜叔” Guido van Rossum 在 1989 年圣誕節期間,為了打發無聊的圣誕節而編寫的一門編程語言。
??Python 作為一門高級編程語言,相比于其他語言,初學者很容易入門,除此之外,Python 還具有以下優點:
- 簡單:Python 奉行簡潔主義,易于讀寫,它使你能夠專注于解決問題而不是去搞明白語言本身。
- 兼容性:Python 兼容眾多平臺,所以開發者不會遇到使用其他語言時常會遇到的困擾。
- 面向對象:Python 既支持面向過程,也支持面向對象編程。在面向過程編程中,程序員復用代碼,在面向對象編程中,使用基于數據和函數的對象。
- 豐富的庫:Python 標準庫確實很龐大。它可以幫助你處理各種工作,包括正則表達式、文檔生成、單元測試、線程、數據庫、網頁瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV 文件、密碼系統、GUI (圖形用戶界面)、Tk 和其他與系統有關的操作。
- 規范的代碼:Python 采用強制縮進的方式使得代碼具有極佳的可讀性。
- 可擴展性和可嵌入性。如果你需要你的一段關鍵代碼運行得更快或者希望某些算法不公開,你可以把你的部分程序用 C 或 C++ 編寫,然后在你的 Python 程序中使用它們。你可以把 Python 嵌入你的 C/C++ 程序,從而向你的程序用戶提供腳本功能。
??Python 的學習強度相對于其他的一些編程語言普遍公認更簡單,零基礎也可輕松學會,而且發展前景好,在人工智能、大數據、云計算、運維自動化等領域均得到了廣泛的應用,且現階段人才緊缺,薪資普遍高于其他編程語言,因此,是 IT 轉型的好選擇!
??此外 Python 還是一種 動態編譯的、強類型的
語言,那么什么是動態編譯語言,什么是強類型語言呢?
- 靜態編譯語言:實現聲明變量類型,類型不能再改變,編譯時檢查,如 C、C++、Java
- 動態編譯語言:不用事先聲明類型,隨時可以賦值為其他類型,但編程時不知道是什么類型,很難推斷,如 Python、PHP、JavaScript
-
強類型語言:不同類型之間操作,必須先強制類型轉換為同一類型,比如
print('a'+1)
, 將字符串和數字直接相加將拋出異常,無法正常執行,如 Python、Java -
弱類型語言:不同類型間可以操作,自動隱式轉換,比如 JavaScript 中
Console.log(1+'a')
4. Python 的解釋器
??Python 這種高級語言需要編譯成字節碼然后由 Python 虛擬機(解釋器) 去執行,針對解釋器,有多種不同的版本。
- 官方的 CPython:C 語言開發,最廣泛的 Python 解釋器
- IPython:一個交互式、功能增強的 CPython,其典型應用是 jupyter notebook,常用于學習 Python、數據分析、機器學習等領域
- PyPy:Python 語言寫的 Python 解釋器,并且針對性的進行了優化,比如 JIT 技術,動態編譯 Python 代碼
- JPython:Python 的源碼編譯成 Java 的字節碼,跑在 JVM 上
- IronPython:與 Jython 類似,運行在.Net 平臺上的解釋器,Python 代碼被編譯成.Net 的字節碼
?? 雖然列舉了這么多編譯器,但是目前主流的還是官方提供的 CPython,但 PyPy 由于使用 Python 語言編寫,針對性的進行了許多優化,據說速度可以達到 CPython 的 5 倍以上,建議后期可以研究一下
5. Python 版本區別
??Python 是很多 Linux 系統默認安裝的語言,以 CentOS 為例由于其 yum 包管理工具使用的是 Python 開發,所以其內置了 Python 2.x 版本,但是 Python 目前已經發展到了 3.7 版本了,并且 Python 官方對 2.x 的支持也快到期,所以建議學習 Python 的 3.x 版本。
??Python 3.x 的在本質上和 Python 2.x 有很大的變化,2.x 的程序是不能直接在 3.x 的版本上運行的,它們的主要區別有:
-
語句函數化。例如
print(1,2)
打印出 1 2,但是 2.x 中意思是print
語句打印元組,3.x 中意思是函數的 2 個參數 - 整除。在 3.x 中,/ 為自然除,// 為整除。2.x 中 / 和 // 都為整除。
-
input
函數。3.x 中把 2.x 中的raw_input
舍去,功能合并到input
函數中去。 -
round
函數。在 3.x 中的取整變為距離最近的偶數 -
3.x 字符串統一使用 unicode。2.x 中如果想要輸入中文,還需要在文件頭顯示聲明 (
_*_coding:utf-8 _*_
) - 異常的捕獲、拋出的語法改變
6. Python 安裝
??不同平臺需要安裝不同版本的 Python,比如 windows,需要用 exe 應用程序,而 Linux 可以下載源碼編譯安裝,或者 yum 安裝。
6.1. windows 安裝
??安裝方法:由于 windows 是圖形界面,這里就不一一截圖了,只文字說明安裝步驟。
下載安裝包
訪問 https://www.Python.org/ 在 Downloads 標簽頁下選擇 windows,然后根據自己需求,下載對應的Windows x86-64 executable installer
版本安裝
??雙擊下載好的Windows x86-64 executable installer
,一直 next 即可。
??安裝路徑默認即可,不要自作聰明修改
配置環境變量
??在安裝程序中選擇 add to PATH,就是把 Python 命令安裝在 PATH 變量中,讓我們可以在任意地方通過命令訪問,如果忘記選擇,也可以通過下面的方法進行設置:
??右擊我的電腦 --> 屬性 --> 高級系統設置 --> 環境變量 --> 編輯 PATH 變量 --> 添加 Python 的安裝路徑 C:\Python36 (以分號;
隔開)--> 確定測試
??打開 cmd (命令提示符,快捷鍵 windows+r) ,輸入 Python ,可以進入解釋器表示安裝成功
6.2. Linux 安裝
??Linux 的安裝有 yum 和編譯安裝兩種方式:
- yum 方式
[root@centos7 ~]# yum install -y Python36
- 編譯安裝
??編譯安裝稍微麻煩一些,詳細操作步驟請參考我的另一篇博客《CentOS 7 系統編譯安裝 Python 3 環境》:https://blog.csdn.net/colinlee19860724/article/details/88856657
7. pyenv 多版本管理
??在實際工作情況下,由于每個項目用的可能不是一個版本的 Python,并且不同應用程序所以來的第三方程序包都不同,如何讓多版本 Python 進行共存,并且保證每個項目依賴的第三方包。想要讓多個 Python 版本共存,有如下兩種方法:
- 編譯安裝新版本至某一個路徑
- 多版本 Python 管理工具
??如果每添加一個新的 Python 版本就編譯一次的話,大大增加了環境切換的成本,并且還需要區分命令(Python3.5, Python 2.7) 等等,所以就凸顯出了多版本管理工具的優點
7.1. pyenv 介紹及安裝
??pyenv 是一個多版本 Python 管理工具,它可以幫我們安裝想要的 Python 版本,并且可以一鍵切換。pyenv 是一個開源的項目,其代碼托管在 github 上,我們可以訪問它的 github 站點來根據 install 的步驟進行安裝。pyenv 的 github 地址:https://github.com/pyenv/pyenv,使用此方法的詳細安裝說明還可以參考我的另一篇博客《CentOS 7 系統下使用 Pyenv 安裝 Python 環境》:https://blog.csdn.net/colinlee19860724/article/details/89095650
??pyenv 官方還提供了便捷的安裝方式,它的項目地址是:https://github.com/pyenv/pyenv-installer,僅需要簡單幾步就可以完成安裝,下面以這種方式進行說明。
??下面的步驟已在 CentOS 7.6 上測試,并安裝成功:
- 安裝依賴包 (由于 pyenv 默認使用編譯的方式安裝 Python,所以它需要的依賴包需要提前安裝)
[root@centos7 ~]# yum install -y gcc make patch gdbm-devel openssl-devel sqlite-devel readline-devel zlib-devel bzip2-devel
- 安裝 GIT (由于 pyenv-installer 中調用 git 使用 clone 的方式拉取 pyenv 的代碼,所以這里需要進行安裝)
[root@centos7 ~]# yum install -y git
- 安裝 Pyenv
# 執行如下命令安裝 pyenv
[root@centos7 ~]# curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
- 修改環境變量
[root@centos7 ~]# vim /etc/profile.d/pyenv.sh
[root@centos7 ~]# cat /etc/profile.d/pyenv.sh
#!/bin/bash
# Define environment variable
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
[root@centos7 ~]# source /etc/profile.d/pyenv.sh
# PS:這里直接更新了 /etc/profile.d,如果是單個用戶安裝并使用,建議添加到用戶家目錄中的 profile 文件中去
- 驗證
[root@centos7 ~]# pyenv version
system (set by /root/.pyenv/version) # 表示當前使用的是系統的 Python 版本
- pyenv 命令
pyenv -h # 即可列出命令幫助信息
pyenv install -l # 列出安裝的版本信息
pyenv install 3.6.6 # 安裝 3.6.6 版本
pyenv versions # 查看系統 Python 版本(pyenv install 安裝的版本都可以在這里看到)
pyenv global 3.6.6 # 切換 Python 默認版本為 3.6.6
pyenv local 3.6.6 # 切換當前目錄下的 Python 版本為 3.6.6 (和目錄綁定,子目錄繼承環境設定)
pyenv shell 3.6.6 # 僅僅針對當前 shell 環境 (會話級別)
- 離線安裝 Python 版本
??通過 pyenv install 3.6.6
進行安裝時,它會聯網下載 Python 3.6.6
的源碼包,如果機器不能上網的話,可以采用離線的方式,預先下載好 Python 要安裝的 Python 的版本包(注意需要 gz,xz,bz
,三種格式都需要) 在 pyenv 的安裝目錄下,一般在用戶的家目錄下 .pyenv
目錄中,進入后新建子目錄 cache,然后把三個包考進去即可,然后再次執行 pyenv install 3.6.6
即可
[root@centos7 ~]# cd .pyenv
[root@centos7 ~]# mkdir cache
[root@centos7 ~]# rz # 通過仿真終端上傳三個下載好的 Python 包
[root@centos7 ~]# pyenv install 3.6.6
7.2. virtualenv
??當多個項目公用一臺主機的時候,就會產生很多問題,當你的項目和其他人的項目共用 Python 3.6.6 時,假如每個項目都安裝了很多依賴包,你如何區分哪些包是你的項目需要的?這時 virtualenv 就很重要了,它可以在 pyenv 的環境中,再造一個虛擬環境,這個環境是基于 pyenv 中管理的某個主環境,派生出來的獨立子環境,你對 virtualenv 進行的操作,和其他的 virtualenv 沒有任何關聯。
# 創建一個 virtualenv 環境,名字為 colin,基于 pyenv 管理的 3.6.6 版本
[root@centos7 ~]# pyenv virtualenv 3.6.6 colin
[root@centos7 ~]# pyenv versions
* system (set by /root/.pyenv/version)
3.6.6
3.6.6/envs/colin
colin
[root@centos7 ~]# mkdir lxl_test
[root@centos7 ~]# cd lxl_test
[root@centos7 lxl_test]# pyenv local colin
[root@centos7 lxl_test]# pyenv versions
system
3.6.6
3.6.6/envs/colin
* colin (set by /root/lxl_test/.python-version) # 該目錄 virtualenv 環境已切換,這樣我們就可以放心的安裝和下載依賴包了
7.3. pyenv 安裝位置
??virtualenv 創建的虛擬環境都存放在 .pyenv
安裝目錄的 versions
下:
[root@centos7 versions]# pwd
/root/.pyenv/versions
[root@centos7 versions]# ll
total 0
drwxr-xr-x. 7 root root 68 Apr 1 15:17 3.6.6
lrwxrwxrwx. 1 root root 38 Apr 1 15:17 colin -> /root/.pyenv/versions/3.6.6/envs/colin
?? 而你在virtualenv
中安裝的包,則存放在virtualenv
環境中對應的site-packages
目錄下
[root@centos7 site-packages]# pwd
/root/.pyenv/versions/3.6.6/envs/colin/lib/python3.6/site-packages
[root@centos7 site-packages]# ls
attr pangu-4.0.6.1.dist-info
attrs-19.1.0.dist-info pangu.py
ipykernel prompt_toolkit-2.0.9.dist-info
ipykernel-5.1.0.dist-info ptyprocess
ipykernel_launcher.py ptyprocess-0.6.0.dist-info
IPython pvectorc.cpython-36m-x86_64-linux-gnu.so
ipython-7.4.0.dist-info __pycache__
ipython_genutils pygments
ipython_genutils-0.2.0.dist-info Pygments-2.3.1.dist-info
ipywidgets pyrsistent
ipywidgets-7.4.2.dist-info pyrsistent-0.14.11-py3.6.egg-info
7.4. 導出項目依賴包
??如果某一天我要導出我當前環境安裝的所有依賴包,該怎么辦呢?Python 已經提供了一個工具,供我們導出當前 Python 版本安裝的所有依賴包及名稱,它就是 pip 命令 (Python 3.x 中已經內置該命令), 使用它的 freeze
參數即可。
# 使用 freeze 可以直接導出當前安裝的依賴包以及
[root@centos7 lxl_test]# pip freeze > requirement.txt # 對應的版本
[root@centos7 lxl_test]# cat requirement.txt
pangu==4.0.6.1
??注意:在新的項目中,只需要使用
pip install -r requirement.txt
即可,讓 pip 按照 requirement.txt 文件中標識的包和版本進行安裝了。pip 命令還有很多強大的功能,下面我們來做個簡要介紹。
8. pip 命令
??pip 命令對應 Python 來說,就像 Yum 和 CentOS 的關系,它是 Python 的包管理工具,我們可以使用 pip 命令安裝幾乎所有的 Python 第三方包。
8.1. 命令說明
[root@centos7 lxl_test]# pip -h
Usage:
pip <command> [options]
Commands:
install # 安裝第三方包
download # 下載第三方包
uninstall # 卸載第三方包
freeze # 輸出包的名稱和版本信息,可以重定向到文件中去
list # 顯示已安裝的第三方包
show # 顯示安裝包信息
search # 在 Pypi 庫中查找第三方包
help # 查看幫助信息
General Options:
-h, --help # 顯示幫助
-v, --verbose # 顯示詳細信息
-V, --version # 顯示版本信息
-q, --quiet # 安靜模式,不輸出任何提示信息
--log <path> # 把輸出信息追加 log 文件中
--proxy <proxy> # 使用代理,格式為: [user:passwd@] proxy.server:port.
--retries <retries> # 最大連接失敗重試次數,默認 5 次
--timeout <sec> # 設置最大超時時間,默認是 15 秒
--cache-dir <dir> # 指定緩存目錄
--no-cache-dir # 禁用緩存
8.2. 配置說明
??pip 命名默認是從 Python 官方提供的 Pypi 倉庫進行第三方軟件包,由于官方源在國外,訪問速度可能會很慢,我們可以把 Pypi 源換成國內的阿里源,來增加訪問速度。 配置起來也很簡單,只需要新增 pip 的配置文件,指定源為阿里源即可。
??創建 pip 配置文件:
[root@centos7 ~]# mkdir ~/.pip
[root@centos7 ~]# cd .pip
[root@centos7 .pip]# vim pip.conf
[root@centos7 .pip]# cat pip.conf
[global] # 全局配置段
index-url=https://mirrors.aliyun.com/pypi/simple/ # pypi 倉庫地址
trusted-host=mirrors.aliyun.com # 信任主機
9. Pycharm 安裝及基本使用
??PyCharm 是一種 Python IDE,帶有一整套可以幫助用戶在使用 Python 語言開發時提高其效率的工具,比如調試、語法高亮、Project 管理、代碼跳轉、智能提示、自動完成、單元測試、版本控制。此外,該 IDE 提供了一些高級功能,以用于支持 Django 框架下的專業 Web 開發。
??一句話總結:幫助我們將代碼自動格式化(優雅的空格),關鍵字提示,以及一鍵執行、調試等功能,對于敏捷開發有很大的幫助。所以 Pythoner 請使用 Pycharm 吧。
??具體安裝方法這里不再贅述,請大家自行上網搜索,安裝過程中遇到的問題,歡迎郵件咨詢 517999276@qq.com 。
10. 第一個 Python 程序
??Python 語言已經安裝完畢,環境也已經配置好,那我們就來寫一個簡單的 Python 程序吧
??例子如下:
# Python 2.x
print 'hello world'
# Python 3.x
print('hello world')
# 這里:引號內的是要打印到屏幕上的字符,快去試試吧。