1.python介紹 Python(英國發音:/ˈpaɪθən/ 美國發音:/ˈpaɪθɑːn/)是一種廣泛使用的解釋型、高級編程、通用型編程語言,由吉多、範羅蘇姆創造,第一版發佈於1991年。可以視之為一種改良(加入一些其他編程語言的優點,如面向對象)的lisp。Python的設計哲學強調代碼的可 ...
1.python介紹
Python(英國發音:/ˈpaɪθən/ 美國發音:/ˈpaɪθɑːn/)是一種廣泛使用的解釋型、高級編程、通用型編程語言,由吉多、範羅蘇姆創造,第一版發佈於1991年。可以視之為一種改良(加入一些其他編程語言的優點,如面向對象)的lisp。Python的設計哲學強調代碼的可讀性和簡潔的語法(尤其是使用空格縮進劃分代碼塊,而非使用大括弧或者關鍵詞)。相比於C++或Java,Python讓開發者能夠用更少的代碼表達想法。不管是小型還是大型程式,該語言都試圖讓程式的結構清晰明瞭。與Scheme、Ruby、Perl、Tcl等動態類型編程語言一樣,Python擁有動態類型系統和垃圾回收功能,能夠自動管理記憶體使用,並且支持多種編程範式,包括面向對象、命令式、函數式和過程式編程。其本身擁有一個巨大而廣泛的標準庫。
2.python特點
優點
簡單:Python是一種代表簡單主義思想的語言。閱讀一個良好的Python程式就感覺像是在讀英語一樣。它使你能夠專註於解決問題而不是去搞明白語言本身。
易學:Python極其容易上手,因為Python有極其簡單的說明文檔 [7] 。 速度快:Python 的底層是用 C 語言寫的,很多標準庫和第三方庫也都是用 C 寫的,運行速度非常快。 [4] 免費、開源:Python是FLOSS(自由/開放源碼軟體)之一。使用者可以自由地發佈這個軟體的拷貝、閱讀它的源代碼、對它做改動、把它的一部分用於新的自由軟體中。FLOSS是基於一個團體分享知識的概念。 高層語言:用Python語言編寫程式的時候無需考慮諸如如何管理你的程式使用的記憶體一類的底層細節。 可移植性:由於它的開源本質,Python已經被移植在許多平臺上(經過改動使它能夠工作在不同平臺上)。這些平臺包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、PocketPC、Symbian以及Google基於linux開發的android平臺。 解釋性:一個用編譯性語言比如C或C++寫的程式可以從源文件(即C或C++語言)轉換到一個你的電腦使用的語言(二進位代碼,即0和1)。這個過程通過編譯器和不同的標記、選項完成。運行程式的時候,連接/轉載器軟體把你的程式從硬碟複製到記憶體中並且運行。而Python語言寫的程式不需要編譯成二進位代碼。你可以直接從源代碼運行 程式。在電腦內部,Python解釋器把源代碼轉換成稱為位元組碼的中間形式,然後再把它翻譯成電腦使用的機器語言並運行。這使得使用Python更加簡單。也使得Python程式更加易於移植。 面向對象:Python既支持面向過程的編程也支持面向對象的編程。在“面向過程”的語言中,程式是由過程或僅僅是可重用代碼的函數構建起來的。在“面向對象”的語言中,程式是由數據和功能組合而成的對象構建起來的。 可擴展性:如果需要一段關鍵代碼運行得更快或者希望某些演算法不公開,可以部分程式用C或C++編寫,然後在Python程式中使用它們。 可嵌入性:可以把Python嵌入C/C++程式,從而向程式用戶提供腳本功能。 豐富的庫:Python標準庫確實很龐大。它可以幫助處理各種工作,包括正則表達式、文檔生成、單元測試、線程、資料庫、網頁瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV文件、密碼系統、GUI(圖形用戶界面)、Tk和其他與系統有關的操作。這被稱作Python的“功能齊全”理念。除了標準庫以外,還有許多其他高質量的庫,如wxPython、Twisted和Python圖像庫等等。 規範的代碼:Python採用強制縮進的方式使得代碼具有較好可讀性。而Python語言寫的程式不需要編譯成二進位代碼。 缺點 單行語句和命令行輸出問題:很多時候不能將程式連寫成一行,如import sys;for i in sys.path:print i。而perl和awk就無此限制,可以較為方便的在shell下完成簡單程式,不需要如Python一樣,必須將程式寫入一個.py文件。 獨特的語法:這也許不應該被稱為局限,但是它用縮進來區分語句關係的方式還是給很多初學者帶來了困惑。即便是很有經驗的Python程式員,也可能陷入陷阱當中。 運行速度慢:這裡是指與C和C++相比。 3.windows下安裝python相關環境 python官網:https://www.python.org/ 進入官網,下載對應版本的python。下載好後,雙擊運行。![](https://img2018.cnblogs.com/blog/1743042/201907/1743042-20190715205512922-1737432680.png)
兩種選擇,第一種系統選擇;第二種自動,將勾選添加環境變數,就後續不用繼續添加。next。
然後選擇install安裝。安裝完成後先不要關閉,點擊disable……同意是。
安裝集成開發環境PyCharm
PyCharm 是由 JetBrains 打造的一款 Python IDE,支持 macOS、 Windows、 Linux 系統。PyCharm 功能 : 調試、語法高亮、Project管理、代碼跳轉、智能提示、自動完成、單元測試、版本控制……
PyCharm下載地址:https://www.jetbrains.com/pycharm/download/#section=windows
選擇社區版,進行下載。下載好後,直接運行安裝。
選擇相應的安裝目錄,next
finish。雙擊運行。在Complete Installation處選擇Do not import settings,ok。至此安裝完成。
4.linux下開發環境搭建
上傳並解壓對應版本安裝包:tar xvf Python-3.7.3.tar.xz
安裝python3
yum install gcc gcc-c++ make zlib* -y
yum install libffi-devel -y
cd 進入解壓後的Python所在的目錄中
./configure --prefix=/usr/bin/local/python3
make && make install
配置執行文件路徑
cd /usr/bin
mv /usr/bin/python /usr/bin/pythonbak
ln -fs /usr/local/python3/bin/python3 /usr/bin/python3
修改yum配置
vim /usr/bin/yum,在第一行後面的python後加上2
vim /usr/libexec/urlgrabber-ext-down,同上
5.虛擬環境搭建
什麼是python虛擬環境?
通俗的來講,虛擬環境就是從電腦獨立開闢出來的環境,相當於一個副本或備份,在這個環境你可以安裝私有包,而且不會影響系統中安裝的全局Python解釋器。
為什麼要用虛擬環境?
在實際項目開發中,我們通常會根據自己的需求去下載各種相應的框架庫,如Scrapy、Beautiful Soup等,但是可能每個項目使用的框架庫並不一樣,或使用框架的版本不一樣,這樣需要我們根據需求不斷的更新或卸載相應的庫。直接懟我們的Python環境操作會讓我們的開發環境和項目造成很多不必要的麻煩,管理也相當混亂。如以下場景:
場景1:項目A需要某個框架1.0版本,項目B需要這個庫的2.0版本。如果沒有安裝虛擬環境,那麼當你使用這兩個項目時,你就需要來回的卸載安裝了,這樣很容易就給你的項目帶來莫名的錯誤;
場景2:公司之前的項目需要python2.7環境下運行,而你接手的項目需要在python3環境中運行,想想就應該知道,如果不使用虛擬環境,這這兩個項目可能無法同時使用,使用python3則公司之前的項目可能無法運行,反正則新項目運行有麻煩。而如果虛擬環境可以分別為這兩個項目配置不同的運行環境,這樣兩個項目就可以同時運行。
windows下安裝
運行cmd,輸入pip install virtualenv。如果版本環境出現問題,嘗試輸入python -m pip install --upgrade pip。出現successful,表示成功。
新建虛擬環境
virtualenv scrapytest (沒有報錯,顯示done成功,然後在c盤對應的文件下查看是否創建成功)
virtualenv -p C:……(此處為安裝python的位置,包含其啟動執行文件) scrapytest(此為剛創建的虛擬環境的名字)
運行為:cd 進入到之前創建的虛擬環境的目錄下activate.bat,結束為deactivate.bat
linux安裝
yum install python-virtualenv
virtualenv py2
virtualenv -p /usr/local/bin/python3 py3
cd 進入創建的py2
source activate
deactivate
6.基本語法
控制語句 if語句,當條件成立時運行語句塊。經常與else, elif(相當於else if) 配合使用。 for語句,遍歷列表、字元串、字典、集合等迭代器,依次處理迭代器中的每個元素。 while語句,當條件為真時,迴圈運行語句塊。 try語句,與except,finally配合使用處理在程式運行中出現的異常情況。 class語句,用於定義類型。 def語句,用於定義函數和類型的方法。 pass語句,表示此行為空,不運行任何操作。 assert語句,用於程式調試階段時測試運行條件是否滿足。 with語句,Python2.6以後定義的語法,在一個場景中運行語句塊。比如,運行語句塊前加密,然後在語句塊運行退出後解密。 yield語句,在迭代器函數內使用,用於返回一個元素。自從Python 2.5版本以後。這個語句變成一個運算符。 raise語句,製造一個錯誤。 import語句,導入一個模塊或包。 from import語句,從包導入模塊或從模塊導入某個對象。 import as語句,將導入的對象賦值給一個變數。 in語句,判斷一個對象是否在一個字元串/列表/元組裡。 表達式 主要的算術運算符與C/C++類似。+, -, *, /, //, **, ~, %分別表示加法或者取正、減法或者取負、乘法、除法、整除、乘方、取補、取餘。>>, <<表示右移和左移。&, |, ^表示二進位的AND, OR, XOR運算。>, <, ==, !=, <=, >=用於比較兩個表達式的值,分別表示大於、小於、等於、不等於、小於等於、大於等於。在這些運算符裡面,~, |, ^, &, <<, >>必須應用於整數。 模塊 概念 python中的模塊是什麼?簡而言之,在python中,一個文件(以“.py”為尾碼名的文件)就叫做一個模塊,每一個模塊在python里都被看做是一個獨立的文件。模塊可以被項目中的其他模塊、一些腳本甚至是互動式的解析器所使用,它可以被其他程式引用,從而使用該模塊里的函數等功能,使用Python中的標準庫也是採用這種方法。 分類在Python中模塊分為以下幾種:
系統內置模塊,例如:sys、time、json模塊等等;
自定義模塊,自定義模塊是自己寫的模塊,對某段邏輯或某些函數進行封裝後供其他函數調用。註意:自定義模塊的命名一定不能和系統內置的模塊重名了,否則將不能再導入系統的內置模塊了。例如:自定義了一個sys.py模塊後,再想使用系統的sys模塊是不能使用的;
第三方的開源模塊:這部分模塊可以通過pip install進行安裝,有開源的代碼;
執行過程
Python在執行時,首先會將.py文件中的源代碼編譯成Python的byte code(位元組碼),然後再由Python Virtual Machine(Python虛擬機)來執行這些編譯好的byte code。這種機制的基本思想跟Java,.NET是一致的。然而,Python Virtual Machine與Java或.NET的Virtual Machine不同的是,Python的Virtual Machine是一種更高級的Virtual Machine。這裡的高級並不是通常意義上的高級,不是說Python的Virtual Machine比Java或.NET的功能更強大,而是說和Java 或.NET相比,Python的Virtual Machine距離真實機器的距離更遠。或者可以這麼說,Python的Virtual Machine是一種抽象層次更高的Virtual Machine。基於C的Python編譯出的位元組碼文件,通常是.pyc格式。除此之外,Python還可以以交互模式運行,比如主流操作系統Unix/Linux、Mac、Windows都可以直接在命令模式下直接運行Python交互環境。直接下達操作指令即可實現交互操作。
編譯與解釋的關係
首先,我們編程都是用的高級語言(寫彙編和機器語言的大牛們除外),電腦不能直接理解高級語言,只能理解和運行機器語言,所以必須要把高級語言翻譯成機器語言,電腦才能運行高級語言所編寫的程式。翻譯的方式有兩種,一個是編譯,一個是解釋。兩種方式只是翻譯的時間不同。
編譯型語言 寫的程式執行之前,需要一個專門的編譯過程,通過編譯系統(不僅僅只是通過編譯器,編譯器只是編譯系統的一部分)把高級語言翻譯成機器語言,把源高級程式編譯成為機器語言文件。以後就可以直接運行而不需要編譯了,因為翻譯只做了一次,運行時不需要翻譯,所以編譯型語言的程式執行效率高,但也不能一概而論,部分解釋型語言的解釋器通過在運行時動態優化代碼,甚至能夠使解釋型語言的性能超過編譯型語言。
解釋型語言 寫的程式不需要編譯。解釋型語言在運行的時候才翻譯,比如VB語言,在執行的時候,專門有一個解釋器能夠將VB語言翻譯成機器語言,每個語句都是執行的時候才翻譯。這樣解釋型語言每執行一次就要翻譯一次,效率比較低。
編譯型與解釋型,兩者各有利弊 。前者由於程式執行速度快,同等條件下對系統要求較低,因此像開發操作系統、大型應用程式、資料庫系統等時都採用它,像C/C++、Pascal/Object Pascal(Delphi)等都是編譯語言,而一些網頁腳本、伺服器腳本及輔助開發介面這樣的對速度要求不高、對不同系統平臺間的相容性有一定要求的程式則通常使用解釋性語言,如JavaScript、VBScript、Perl、Python、Ruby、MATLAB 等等。