目錄javascript
首先,咱們普及一下編程語言的基礎知識。用任何編程語言來開發程序,都是爲了讓計算機幹活,好比下載一個MP3,編寫一個文檔等等,而計算機幹活的CPU只認識機器指令,因此,儘管不一樣的編程語言差別極大,最後都得'翻譯'成CPU能夠執行的機器指令。而不一樣的編程語言,幹同一個活,編寫的代碼量,差距也很大。
好比,完成同一個任務,C語言要寫1000行代碼,Java只須要寫100行,而Python可能只要20行。
因此Python是一種至關高級的語言。
你也許會問,代碼少還很差?代碼少的代價是運行速度慢,C程序運行1秒鐘,Java程序可能須要2秒,而Python程序可能就須要10秒。
那是否是越低級的程序越難學,越高級的程序越簡單?表面上來講,是的,可是,在很是高的抽象計算中,高級的Python程序設計也是很是難學的,因此,高級程序語言不等於簡單。可是,對於初學者和完成普通任務,Python語言是很是簡單易用的。連Google都在大規模使用Python,你就不用擔憂學了會沒用。
用Python能夠作什麼?能夠作平常任務,好比自動備份你的MP3;能夠作網站,不少著名的網站包括YouTube就是Python寫的;能夠作網絡遊戲的後臺,不少在線遊戲的後臺都是Python開發的。總之就是能幹不少不少事啦。下面咱們瞭解一下計算機的基礎概念html
程序:是一組能讓計算機識別和執行的指令。
計算機五大部件:輸入設備
、輸出設備
、運算器
、控制器
、存儲器
,各部分主要做用:java
運算器
:完成各類算數運算、邏輯運算、數據傳輸等數據加工處理控制器
:控制程序的執行存儲器
:用於記憶程序和數據,例如內存輸入設備
:將數據或者程序輸入到計算機中,例如鼠標、鍵盤輸出設備
:將數據或程序的處理結果展現給用戶,例如顯示器、打印機等 注:CPU有運算器和控制器組成,其中還有寄存器以及多級緩存,其中咱們所熟知的L一、L2緩存是每一個CPU核心獨佔的,而L3緩存則是全部核心共享的,緩存的速度依次下降,新版的CPU還會把北橋芯片集成在CPU中。
計算機語言:人與計算機之間交互的語言,機器語言、彙編語言等屬於早期語言的表明,機器語言由必定位數組成的二進制0和1的序列組成,這中語言很是晦澀,難以理解,難以記錄,而彙編語言則藉助了一些助記符來替代機器指令,雖然好記了一點,但仍是難以學習,後來通過時代的變遷,各大偉人的突出貢獻,慢慢的針對不一樣場景的編程語言共同綻開。python
從距離機器和人類可讀的兩種方向,主要分爲低級語言
和高級語言
。
從運行方式來看又分爲編譯型語言
和解釋型語言
。linux
低級語言
:面向的機器的語言,好比機器語言、彙編語言,不一樣的及其不能通用。高級語言
:接近人類可讀的天然和數字結合的計算機語言,由編譯程序轉換成機器指令來進行執行,咱們只須要關注如何書寫源程序,剩下編譯的事情就交給編譯器進行處理。編譯語言
:把代碼轉換成目標及其的CPU指令解釋語言
:解釋後轉換成字節碼,運行在虛擬機上,解釋器執行中間代碼 高級語言根據發展歷程主要分爲四個階段或者說是四種類型:非結構化
、結構化
、面向對象
、函數式
。git
非結構化語言
:編號或標籤、GOTO、子程序能夠有多個入口和出口,有分支、循環。結構化語言
:任何基本語句只容許是惟一入口和出口,有順序、分支、循環、廢棄GOTO面向對象的語言
:更加接近人類認知世界的方式,萬事萬物抽象成對象,對象間關係抽象成類和繼承。而類具備封裝、繼承、多態等特性函數式語言
:屬於一種古老的編程範式,應用在數據計算、並行處理等場景,在這種語言中,函數是'一等公民',利用函數的特性,還有更高級的好比高階函數等。什麼是程序呢?通常咱們所說的程序是:算法+數據結構。能夠總結出以下特色:github
Python是著名的「龜叔」Guido van Rossum在1989年聖誕節期間,爲了打發無聊的聖誕節而編寫的一個編程語言。
和C語言相比:C語言適合開發那些追求運行速度、充分發揮硬件性能的程序。而Python是用來編寫應用程序的高級編程語言。
Python的優勢:算法
Python的缺點:sql
另外Python仍是一種動態編譯的、強類型的語言
,那麼什麼是動態語言,什麼是強類型語言呢?shell
靜態編譯語言
:實現聲明變量類型,類型不能再改變,編譯時檢查動態編譯語言
:不用事先聲明類型,隨時能夠賦值爲其餘類型,但編程時不能準確肯定是什麼類型,很難推斷強類型語言
:不一樣類型之間操做,必須先強制類型轉換爲同一類 好比print(1+'a'),這種是沒法執行的弱類型語言
:不一樣類型間能夠操做,自動隱士轉換,好比javascript中ConsolePython這種高級語言須要編譯成字節碼而後由Python虛擬機(解釋器)去執行的,針對解釋器,有多種不一樣的版本。
官方的CPython
: C語言開發,最普遍的Python解釋器IPython
:一個交互式、功能加強的CPythonPyPy
:Python語言寫的Python解釋器,而且針對性的進行了優化,好比JIT技術,動態編譯Python代碼Jpython
:Python的源碼編譯成Java的字節碼,跑在JVM上IronPython
:與Jpython相似運行再.Net平臺上的解釋器,Python代碼被編譯成.Net的字節碼雖然列舉了這麼多編譯器,可是目前主流的仍是官方提供的Cpython,但pypi因爲使用Python語言編寫,針對性的進行了許多優化,聽說速度能夠達到Cpython的10倍以上,建議後期能夠研究一下
Python是不少Linux系統默認安裝的語言,以Centos爲例因爲其yum包管理工具使用的是Python開發,因此其內置了Python2.x版本,可是Python目前已經發展到了3.7版本了,而且Python官方對2.x的支持也快到期,因此建議學習ython的3.x版本。
Python 3.x的在本質上和Python 2.x有很大的變化,2.x的程序是不能直接在3.x的版本上運行的,它們的主要區別有:
print
的打印,在3.x中是個函數,要打印的內容會被看成參數傳遞進入,而2.x中的含義是print
語句打印元祖input
函數。3.x中把2.x中的raw_input
捨去,功能合併到input
函數中去。round
函數。在3.x中的取整變爲距離最近的偶數_*_coding:utf-8 _*_
)不一樣平臺須要安裝不一樣版本的Python,好比windows,須要用exe的應用程序,而Linux能夠有源碼編譯安裝,或者yum安裝。
安裝方法
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 ,能夠進入解釋器表示安裝成功
Linux的安裝有yum和編譯安裝兩種方式:
[20:08:40 python@centos7 ~]$yum install -y python36
## 安裝Python命令行退格鍵、HTTPS等依賴包(自由選擇能夠不裝) [20:10:12 root@centos7 Python-3.6.7rc2]#yum install -y readline readline-devel openssl-devel # 下載Python源碼包 [20:11:49 python@centos7 ~]$wget https://www.python.org/ftp/python/3.6.7/Python-3.6.7rc2.tgz -P /tmp --2018-12-31 20:12:31-- https://www.python.org/ftp/python/3.6.7/Python-3.6.7rc2.tgz Resolving www.python.org (www.python.org)... 151.101.72.223, 2a04:4e42:11::223 Connecting to www.python.org (www.python.org)|151.101.72.223|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 22969389 (22M) [application/octet-stream] Saving to: ‘/tmp/Python-3.6.7rc2.tgz’ 100%[===========================================================================================================================================================================================>] 22,969,389 365KB/s in 33s 2018-12-31 20:13:04 (678 KB/s) - ‘/tmp/Python-3.6.7rc2.tgz’ saved [22969389/22969389] [20:13:04 python@centos7 ~]$ # 解壓文件 [20:14:17 root@centos7 tmp]#tar xf /tmp/Python-3.6.7rc2.tgz -C /usr/local/ [20:14:24 root@centos7 tmp]#cd /usr/local/ [20:14:27 root@centos7 local]#ls bin etc games include lib lib64 libexec Python-3.6.7rc2 sbin share src [20:16:28 root@centos7 local]#cd Python-3.6.7rc2/ # 執行編譯配置檢查 [20:17:20 root@centos7 local]#./configure --with-ssl --prefix=/usr/local/python3 # 編譯 [20:19:28 root@centos7 Python-3.6.7rc2]#make # 安裝 [20:20:28 root@centos7 Python-3.6.7rc2]#make install # 環境變量配置(添加/usr/local/python3/bin 到 PATH 路徑中) [20:22:23 root@centos7 bin]#vim ~/.bash_profile 1 # .bash_profile 2 3 # Get the aliases and functions 4 if [ -f ~/.bashrc ]; then 5 . ~/.bashrc 6 fi 7 8 # User specific environment and startup programs 9 10 PATH=$PATH:$HOME/bin:/usr/local/python3/bin 11 12 export PATH # 測試 [20:24:28 root@centos7 ~]#source .bash_profile [20:24:36 root@centos7 ~]#python36 bash: python36: command not found... [20:24:40 root@centos7 ~]#python3 Python 3.6.7rc2 (default, Dec 31 2018, 20:20:36) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux Type "help", "copyright", "credits" or "license" for more information. >>>
在不少工做的狀況下,因爲每一個項目用的可能不是一個版本的Python,而且不一樣應用程序因此來的第三方程序包都不一樣,如何讓多版本Python進行共存,而且保證每一個項目依賴的第三方包
想要讓多個Python版本共存,咱們想到的方法有以下兩種:
若是每添加一個新的Python版本就編譯一次的話,大大增長了環境切換的成本,而且還須要區分命令(python3.5, python 2.7)等等,因此就凸顯出了多版本管理工具的優勢
pyenv是一個多版本Python管理工具,它能夠幫咱們安裝想要的Python版本,而且能夠一鍵切換,屬於如今比較流行的工具。pyenv是一個開源的項目,其代碼託管在github上,咱們能夠訪問它的github站點來根據install的步驟進行安裝。pyenv的github地址:https://github.com/pyenv/pyenv
pyenv官方還提供了便捷的安裝方式,它的項目地址是:https://github.com/pyenv/pyenv-installer
,僅須要簡單幾步就能夠完成安裝,下面以這種方式進行說明。
下面的步驟已在CentOS 6.7上測試,並安裝成功
[root@Python ~]# yum install -y gcc make patch gdbm-devel openssl-devel sqlite-devel readline-devel zlib-devel bzip2-devel
[root@Python ~]# yum install -y git
# 執行以下命令安裝pyenv [root@Python ~]# curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash # 這裏建議使用普通用戶進行安裝 # 若是遇到 curl: (35) SSL connect error ,嘗試更新nss,若是問題依舊,嘗試更新curl [python@Python ~]# yum update nss [python@Python ~]# yum update curl
[root@Python ~]# vim /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@Python~]# source /etc/profile.d/pyenv.sh # PS:這裏直接更新了/etc/profile.d,若是是單個用戶安裝並使用,建議添加到用戶家目錄中的profile文件中去
[root@Python ~]# pyenv version system (set by /root/.pyenv/version) # 表示當前使用的是系統的Python版本
pyenv -h # 便可列出命令信息 pyenv install -l # 列出安裝的版本信息 pyenv install 3.3.5 # 便可安裝 pyenv versions # 查看系統python版本(pyenv install 安裝的版本均可以在這裏看到) pyenv global 3.3.5 # 切換Python默認版本爲3.3.5 pyenv local 3.3.5 # 切換當前目錄下的Python版本爲3.3.5(和目錄綁定,子目錄繼承環境設定) pyenv shell 3.3.5 # 僅僅針對當前shell環境(會話級別)
pyenv install 3.5.3
進行安裝時,它會聯網下載 Python 3.5.3
的源碼包,若是機器不能上網的話,能夠採用離線的方式,預先下載號Python 要安裝的Python的版本包(注意須要gz,xz,bz
,三種格式都須要) 在pyenv的安裝目錄下,通常在用戶的家目錄下.pyenv
目錄中,進入後新建子目錄cache,而後把三個包考進去便可,而後再次執行 pyenv install 3.5.3
便可[root@Python ~]$ cd .pyenv [root@Python ~]$ mkdir cache [root@Python ~]$ rz # 上傳三個下載好的Python包 [root@Python ~]$ pyenv install 3.5.3
當多個項目公用一臺主機的時候,就會產生不少問題,當你的項目和其餘人的項目共用python 3.5.3時,假如每一個項目都安裝了不少依賴包,你如何區分哪些包是你的項目須要的?這時virtualenv就很重要了,它能夠在pyenv的環境中,再造一個虛擬環境,這個環境是基於pyenv中管理的某個主環境,派生出來的獨立子環境,你對virtualenv進行的操做,和其餘的virtualenv沒有任何關聯。
# 建立一個virtualenv環境,名字爲daxin,基於pyenv管理的3.5.3版本 [python@localhost .pip]$ pyenv virtualenv 3.5.3 daxin [python@localhost .pip]$ pyenv versions * system (set by /home/python/.pyenv/version) 3.5.3 3.5.3/envs/daxin daxin # 這時,咱們再對某個項目進行切換時,以下 [python@localhost .pip]$ pyenv versions * system (set by /home/python/.pyenv/version) 3.5.3 3.5.3/envs/dachenzi 3.5.3/envs/daxin dachenzi daxin [python@localhost ~]$ mkdir cmdb [python@localhost ~]$ cd cmdb [python@localhost cmdb]$ pyenv local daxin (daxin) [python@localhost cmdb]$ ls # 最前面多了個virtualenv環境的名稱 # 這樣咱們就能夠放心的安裝和下載依賴包了,
若是某一天我要導出我當前環境安裝的全部依賴包,該怎麼辦呢?Python已經提供了一個工具,供咱們導出當前Python版本安裝的全部依賴包及名稱,它就是pip命令(python 3.x中已經內置該命令),使用它的freeze
參數便可。
# 使用freeze能夠直接導出當前安裝的依賴包以及 (daxin) [python@localhost cmdb]$ pip freeze > requirement.txt 對應的版本 (daxin) [python@localhost cmdb]$ cat requirement.txt backcall==0.1.0 decorator==4.3.0 ipython==7.1.1 ipython-genutils==0.2.0 jedi==0.13.1 parso==0.3.1 pexpect==4.6.0 pickleshare==0.7.5 prompt-toolkit==2.0.7 ptyprocess==0.6.0 Pygments==2.2.0 six==1.11.0 traitlets==4.3.2 wcwidth==0.1.7
注意:再新的項目中,只須要使用pip install -r requirement.txt
便可,讓pip按照requirement.txt文件中標識的包和版本進行安裝了。
virtualenv建立的虛擬環境都存放在pyenv
安裝目錄的versions
下
[python@localhost versions]$ pwd /home/python/.pyenv/versions [python@localhost versions]$ ll total 4 drwxr-xr-x. 7 python python 4096 Nov 3 18:07 3.5.3 lrwxrwxrwx. 1 python python 48 Nov 3 18:12 dachenzi -> /home/python/.pyenv/versions/3.5.3/envs/dachenzi lrwxrwxrwx. 1 python python 45 Nov 3 18:07 daxin -> /home/python/.pyenv/versions/3.5.3/envs/daxin [python@localhost versions]$
而你在virtualenv
中安裝的包,則存放在virtualenv
環境中對應的situ-package
目錄下
[python@localhost site-packages]$ pwd /home/python/.pyenv/versions/3.5.3/envs/daxin/lib/python3.5/site-packages [python@localhost site-packages]$ ls backcall parso-0.3.1.dist-info __pycache__ backcall-0.1.0-py3.5.egg-info pexpect pygments decorator-4.3.0.dist-info pexpect-4.6.0.dist-info Pygments-2.2.0.dist-info decorator.py pickleshare-0.7.5.dist-info setuptools easy_install.py pickleshare.py setuptools-28.8.0.dist-info IPython pip six-1.11.0.dist-info ipython-7.1.1.dist-info pip-18.1.dist-info six.py ipython_genutils pkg_resources traitlets ipython_genutils-0.2.0.dist-info prompt_toolkit traitlets-4.3.2.dist-info jedi prompt_toolkit-2.0.7.dist-info wcwidth jedi-0.13.1.dist-info ptyprocess wcwidth-0.1.7.dist-info parso ptyprocess-0.6.0.dist-info [python@localhost site-packages]$
pip命令對應Python來講,就像Yum和CentOS的關係,它是Python的包管理工具,咱們可使用pip命令安裝幾乎全部的Python第三方包。
(daxin353) [21:01:10 python@centos7 cmdb]$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 # 禁用緩存 (daxin353) [21:01:16 python@centos7 cmdb]$
pip命名默認是從Python官方提供的Pypi倉庫進行第三方軟件包,因爲官方源在國外,訪問速度可能會很慢,咱們能夠把Pypi源換成國內的阿里源,來增長訪問速度。 配置起來也很簡單,只須要新增pip的配置文件,指定源爲阿里源便可。
[21:14:53 python@centos7 ~]$mkdir ~/.pip [21:15:21 python@centos7 ~]$cd .pip [21:15:23 python@centos7 .pip]$vim pip.conf [global] # 全局配置段 index-url=https://mirrors.aliyun.com/pypi/simple/ # pypi倉庫地址 trusted-host=mirrors.aliyun.com # 信任主機(防止https輸出煩人的信息)
請參考博文: http://www.cnblogs.com/dachenzi/articles/7684064.html , 安裝過程當中遇到的問題,歡迎郵件諮詢 beyondlee2011@126.com
既然Python語言安裝完畢了,那麼小夥伴確定已經躍躍欲試了,那麼咱們就來寫一個吊炸天的Python程序吧
首先這個程序很牛逼,爲何這麼說呢?由於會用到一個咱們之後幾乎每天用的命令,那就是print。有的同窗英文好,一下就知道是打印的意思。那麼該如何使用呢?
這個吊炸天的例子以下:
# Python 2.x print 'hello world' # python 3.x print('hello world') # 這裏:引號擴起來的就表示要打印到屏幕上的代碼,快去試試吧。
OK,你已經精通Python了!厲害了個人哥。哈哈