本文是Python通用編程系列教程,已所有更新完成,實現的目標是從零基礎開始到精通Python編程語言。本教程不是對Python的內容進行泛泛而談,而是精細化,深刻化的講解,共5個階段,25章內容。因此,須要有耐心的學習,才能真正有所收穫。雖不涉及任何框架的使用,可是會對操做系統和網絡通訊進行全局的講解,甚至會對一些開源模塊和服務器進行重寫。學完以後,你所收穫的不只僅是精通一門Python編程語言,並且具有快速學習其餘編程語言的能力,無障礙閱讀全部Python源碼的能力和對計算機與網絡的全面認識。對於零基礎的小白來講,是入門計算機領域並精通一門編程語言的絕佳教材。對於有必定Python基礎的童鞋,相信這套教程會讓你的水平更上一層樓。php
咱們學習一門編程語言須要先了解清楚,什麼是編程,爲何要編程,最後才學習怎麼編程
計算機的發明就是爲了用機器取代人力,來幫助人類進行無休止的工做,還不給他工資,這就是編程的目的,由於計算機聽不懂人話,那就是隻好人來講計算機的話,來傳達給計算機這個工做應該如何進行,人在說「機話」的過程其實就是編程,是人類把咱們須要工做的內容經過某種指令傳達給計算機。python
你說「機話」就好了,難道說「機話」還有不一樣的
是的,人話都各有千秋,「機話」天然也是風情萬種。上面所說的能被計算機所識別的表達方式就是編程語言,語言是溝通的介質,編程語言是程序員與計算機的橋樑,每到七夕的時候,你要經過這道牆才能揭開計算機的神祕面紗。ios
總結一下:編程就是程序員按照某種編程語言我本身的工做流寫下來,結果就是一堆包含有字符,數字或者英文字母的文件。須要注意的是,在程序運行以前和普通的文件沒有區別,只有當程序運行了,計算機纔會按照該編程語言的語法格式讀取裏面的內容,這樣程序的內容纔會生效,纔會有計算機工做的效果。程序員
編程語言發展到現在經歷了三個過程,分別是:機器語言,彙編語言和高級語言。web
機器語言能夠理解爲人徹底說「機話」,咱們要先知道計算機的原理是二進制,計算機他也就能看懂二進制了(關於二進制,後面的內容到字符編碼會有詳細的講解),那就用二進制編程吧:好比我想讓計算機計算一個100加200,我要這樣操做:shell
1100100,101011,11001000
複製代碼
註釋:二進制1100100 表明十進制的100,二進制11001000代碼十進制200,二進制101011代碼「+」這個符號,100+200的計算用機器語言編寫大概就是上面的代碼,我太年輕,沒出生在那個美好的時代,這段代碼是經過本身的理解寫的,若是寫的有誤請指正一下。顯而易見,用這種方式編寫程序對於程序員來講是十分痛苦的,開發效率很是低下。相反,對於計算機來講,他一看到100100000這種東西就會心想,「這個對個人胃口,我就喜歡這樣的」,因而乎,上來就是一頓XXOO......他很爽,他很快,可是做爲程序員的你,確定爽不夠。因此總結一下,機器語言是人站在計算機的角度去編程,編程開發效率低,程序運行效率高。編程
彙編語言能夠理解爲人說「機人話」,就是人用簡寫的英文標識符去取代二進制,這樣的話人編寫的效率確定會提高了,可是計算機的有點不樂意了,不是直接的二進制,總感受不舒服,程序執行起來沒有機器語言那麼順暢,就好像隔着一層薄膜,要先把這個薄膜撕破才能識別出英文標識符所表明的二進制的,進而來執行代碼。因此,相比較機器語言來講,彙編語言開發效率提高,程序運行效率略微下降。flask
高級語言能夠理解爲人說「人話」(人:終於能好好說話了),之因此稱他爲高級,是由於他與以上兩種語言有本質的區別,高級語言是創建在操做系統的基礎之上,而以上兩種編程語言都是不須要操做系統,直接操做硬件的。操做系統是人創造的,他的出現目的就是提升人們的工做效率,讓人們更好的使用計算機,因爲操做系統的封裝,把操做的硬件的悲傷的工做留給了本身,而讓程序員的編程變得很是友好,使用和本身的語言很是類似的語法格式去編程,大大的提高了程序員的開發效率。相反,計算機對於這件事有意見。windows
# 計算機:大家這些愚蠢的人類,搞了個什麼破操做系統,這樣的我要先翻譯成二進制才能執行,執行的很慢,我不爽了。
# 程序員:老子管你爽不爽,我活的幹得快了,我爽了就好了,讓你玩兩下就不錯了,有的計算機玩都沒機會玩,你還想爽,你怎麼不上天啊
# 計算機:喔,行。。。。。。你行。。。。。。
複製代碼
接下來用一句話總結一下,機器語言到彙編語言再到高級語言,程序員開發效率提高的同時,程序執行效率也下降了,那麼這是進步仍是退步呢?服務器
速度不是關鍵,開發效率纔是王道。由於速度有瓶頸,機器語言到高級語言,雖然速度降了,可是依然快到人類的大腦意識沒法捕捉出來差距,0.000000001秒和0.00001秒對你來講應該沒什麼區別吧,雖然他們相差了1萬倍。開發效率能夠大幅提高,因此這樣的發展天然是進步。
高級語言更貼近人類的語言,他必須先被轉換成能計算機能讀懂的二進制後,才能被執行,按照轉換的方式分爲:
編譯型語言和解釋型語言
編譯型語言須要編譯器,就像谷歌翻譯同樣,在程序執行以前要先編譯,而後轉化成爲了二進制以後,計算機才能夠運行。這樣就帶來了一個問題,當程序須要修改的時候,不能直接修改編譯以後的目標文件,而是要修改源文件,再次編譯生成目標文件,這個時候計算機在運行,查看修改的結果。因爲不一樣的計算機的操做系統的不一樣,編譯器生成的目標文件也不相同。和解釋型語言相比較,他的執行速度快,要依賴編譯器,重點是調試顯而易見很麻煩。像C語言,C++都是編譯型語言。
解釋型語言須要解釋器,就行同聲傳譯同樣,應用程序源代碼一邊由相應語言的解釋器「翻譯」成目標代碼(機器語言),一邊執行,所以效率比較低,並且不能生成可獨立執行的可執行文件,應用程序不能脫離其解釋器(想運行,必須先裝上解釋器,就像跟老外說話,必須有翻譯在場),但這種方式比較靈活,能夠動態地調整、修改應用程序。像Python,Java,Php都是解釋型語言。
_python的創始人爲吉多·範羅蘇姆(Guido van Rossum)。1989年的聖誕節期間,Guido開始寫可以解釋Python語言語法的解釋器。Python這個名字,來自Guido所摯愛的電視劇Monty Python’s Flying Circus。他但願這個新的叫作Python的語言,能符合他的理想:創造一種C和shell之間,功能全面,易學易用,可拓展的語言。_最新的TIOBE排行榜,Python趕超PHP佔據第4, Python崇尚優美、清晰、簡單,是一個優秀並普遍使用的語言。_Python能夠應用於衆多領域,如:數據分析、組件集成、網絡服務、圖像處理、數值計算和科學計算等衆多領域。目前業內幾乎全部大中型互聯網企業都在使用Python,如:Youtube、Dropbox、BT、Quora(中國知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、騰訊、汽車之家、美團等。
先來看一段官方文檔 In summary : Python 2.x is legacy, Python 3.x is the present and future of the languagePython 3.0 was released in 2008. The final 2.x version 2.7 release came out in mid-2010, with a statement ofextended support for this end-of-life release. The 2.x branch will see no new major releases after that. 3.x isunder active development and has already seen over five years of stable releases, including version 3.3 in 2012,+3.4 in 2014, and 3.5 in 2015. This means that all recent standard library improvements, for example, are onlyavailable by default in Python 3.x.Guido van Rossum (the original creator of the Python language) decided to clean up Python 2.x properly, with less regard for backwards compatibility than is the case for new releases in the 2.x range. The most drastic improvement is the better Unicode support (with all text strings being Unicode by default) as well as saner bytes/Unicode separation.Besides, several aspects of the core language (such as print and exec being statements, integers using floor division) have been adjusted to be easier for newcomers to learn and to be more consistent with the rest of the language, and old cruft has been removed (for example, all classes are now new-style, "range()" returns a memory efficient iterable, not a list as in 2.x).
目前雖然業內不少企業還在大量使用Python2.6 or 2.7,由於舊項目幾十萬甚至上百萬行的代碼想快速升級到3.0不是件容易的事,可是你們在開發新項目時幾乎都會使用3.x。另外Python3 確實想比2.x作了不少的改進,直觀點來說,就像從XP升級到Win7的感受同樣,棒棒的。Python2 和Python3的具體細節區別咱們在之後課程中會慢慢深刻。
Python目前已支持全部主流操做系統,在Linux,Unix,Mac系統上自帶Python環境,在Windows系統上須要安裝一下,超簡單
打開官網 www.python.org/downloads/w… 下載中心
強調:python解釋器執行程序是解釋執行,即打開文件讀內容,所以文件的後綴名沒有硬性限制,但一般定義爲.py結尾
用Python寫一個Hello World程序
print('Hello World')
複製代碼
比較一下其餘語言Hello World的寫法
# C++
#include <iostream>
int main(void)
{
std::cout<<"Hello world";
}
# C
#include <stdio.h>
int main(void)
{
printf("\nhello world!");
return 0;
}
# JAVA
public class HelloWorld{
// 程序的入口
public static void main(String args[]){
// 向控制檯輸出信息
System.out.println("Hello World!");
}
}
# PHP
<?php
echo "hello world!";
?>
# Ruby
日本人開發的,砸日本車的時候,順手就把你拖出去打死了,祭天
puts "Hello world."
# GO
package main
import "fmt"
func main(){
fmt.Printf("Hello World!\n God Bless You!");
}
# 精通各類語言的hello world,看一看仍是python的好
複製代碼
安裝Python專用 IDE Pycharm
爲什麼要用IDE> _到如今爲止,咱們也是寫過代碼的人啦,但你有沒有發現,每次寫代碼要新建文件、寫完保存時還要選擇存放地點,執行時還要切換到命令行調用python解釋器,好麻煩呀,可否一鼓作氣,讓我簡單的寫代碼?此時開發工具IDE上場啦,一個好的IDE能幫你大大提高開發效率。不少語言都有比較流行的開發工具,好比JAVA 的Eclipse, C#,C++的VisualStudio, Python的是啥呢? Pycharm,最好的Python 開發IDE
安裝
下載地址:www.jetbrains.com/pycharm/dow… 選擇Professional 專業版 進入> Pycharm官網根據提示下載專業版便可,Comunnity社區版是免費的,但支持的功能很少,好比之後咱們會學的Django就不支持,因此仍是用專業版,但專業版是收費的,一年一千多,不便宜。萬能的淘寶,你懂的 註冊完成後啓動,會讓你先建立一個項目,其實就是一個文件夾,咱們之後的代碼都存在這裏面。
建立目錄 你之後寫的項目可能有成百上千個代碼文件 ,全放在一塊兒可很差,因此通常把一樣功能的代碼放在一個目錄,咱們如今以天爲單位,爲天天的學習建立一個目錄day1,day2,day3...這樣
計算機工做的過程直白講就是對數據的增刪改查操做,那麼數據必定是變化的,咱們要存儲變化的數據就應該用「變量」。 什麼是變量
爲何要有變量
Python如何定義變量
name='Albert'
sex='male'
age=18
level=10
複製代碼
['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
駝峯體
AgeOfAlbert = 18
NumberOfStudents = 80
複製代碼
下劃線(推薦使用)
age_of_albert = 18
number_of_students = 80
複製代碼
定義變量名很差的方式
值得一提的是:在公司裏項目很大的時候,咱們每每會命名的變量名比較長,這是一方面是爲了變量名不重複,另外一方面是爲了能看到變量名就知道數據的含義
有一句話給你們:變量即邏輯
定義變量會有:id,type,value
強調:
>>x='Info Albert:18'
>>y='Info Albert:18'
>>x == y
>>True
>>x is y
>>False
複製代碼
若是本身用電腦終端或者Pycharm測試可能會出現 x is y 結果是False的狀況,不用擔憂,這是Pycharm或者終端環境作的內存優化,當變量比較長的時候就沒問題了。
常量即指不變的量,如pai 3.141592653..., 或在程序運行過程當中不會改變的量,舉例:日本首相的年齡是一個變量,加入他今天忽然掛了,那麼這個年齡就不會在改變了,那就是常量。在Python中沒有一個專門的語法表明常量,程序員約定俗成用變量名所有大寫表明常量
JAPANESE_PRIME_MINISTER_AGE = 56
複製代碼
在c語言中有專門的常量定義語法,const int count = 60;一旦定義爲常量,更改即會報錯
Python屬於強類型的動態腳本語言強類型:不容許不一樣類型相加動態:定義變量不用數據類型聲明,且肯定一個變量的類型是第一次給他賦值的時候
剛纔咱們定義人名使用的是 name = ‘Albert’來定義的,形如 ' ' 或者 " " 或者 """ """ 單引號,雙引號或者三引號中間寫內容的這種定義方式就是 str類型,咱們叫作字符串類型
print('Hello world') # 這就是一個字符串類型
複製代碼
定義的時候是把等號右側的值賦值給等號左側的變量
咱們不只要知道他的數據類型是str,在學習一個數據類型的時候還要知道他是一個可變類型仍是不可變類型。
可變類型能夠理解爲一個大房子的地方不動,給這個房子裝修一下就是作了修改,而不可變類型就是這個房子不能從新裝修,你要改能夠,你在別的地方再蓋一個房子,你再住進去。
咱們定義一我的的年齡的時候 使用age = 18 來定義的,等號後面直接➕整數數字,那麼這個變量的數據類型就是int類型,咱們叫整型,整形是一個不可變類型
當咱們定一我的的身高的時候,使用height = 1.83 來定義,同理這是float類型,咱們叫浮點型,浮點型是一個不可變類型
當咱們須要存儲一個班級裏面全部學生的名字的時候,就是用一個變量來存儲多個值,以上三種數據類型都只能存儲一個值,這種狀況咱們能夠只用list這種數據類型來完成,咱們叫列表。定義形式:中括號內,多個元素用逗號分割,每一個元素能夠是任意的數據類型,列表是一個可變類型
names = ['albert','james','kebo'] # 存儲一個班級的多個學生
information = ['albert',18,1.83] # 存儲一我的信息
# 存儲多人信息
informations = [['albert',18,1.83],['james',34,2.03],['kebo',40,1.98]]
複製代碼
另一種和list相似的數據類型是tuple,咱們叫元組,他的用法和list很是類似,只是列表能夠修改,而元組不能修改,只能查看,他的定義方式是小括號內,多個元素用逗號分割,每一個元素能夠是任意的數據類型。以上代碼中括號改爲小括號就能夠了,注意是英文的小括號(),元組是一個不可變類型
上面代碼存儲多我的的信息的時候,大家大概的能看出來我是存儲的每一個人的姓名,年齡和身高,可是不明確,咱們不能用猜的,要解決這個問題就是定義的時候就說明白,這個時候字典來了,定義形式:花括號內多個元素用逗號分割,每一個元素按照key: value的形式,須要注意的是:字典的key只能用不可變類型,咱們通常使用字符串,字典是一個可變類型。
information = {'name':'albert','age':18,'height':1.83} # 存儲一我的信息
informations = [
{'name':'albert','age':18,'height':1.83},
{'name':'james','age':34,'height':2.03},
{'name':'kebo','age':40,'height':1.98}
] # 存儲多人信息
複製代碼
在NBA有400多位球員,若是咱們不考慮前後順序要存儲這400多位球員,確定是不能重複的,每位球員只能算一個,上面的列表和元組是能夠重複的,咱們只須要知道「Albert」確定是不在這裏面的就能夠了。定義形式:花括號內多個元素用逗號分割,每一個元素能夠是任意的數據類型,可是不能重複,集合是一個可變類型。
NBA_players = {'James', 'Kobe', 'Jordan', }
複製代碼
在NBA中有衆多的球員,可是有的人可能一生也大不了NBA了,若是咱們想要判斷一我的是不是NBA球員就能夠用布爾類型,它只有兩個值,True和Flase。
基本的數據類型,咱們就暫時先了解到這裏,後面的章節會對這些數據類型的使用進行更加詳細的講解。
關於變量的命名在這裏作一點補充,這雖然簡單,可是很是重要。 推薦你們使用『匈牙利命名法』,這也是在工做中最爲規範的變量命名方式,有些時候看一我的寫的代碼,只須要看他寫的變量名就能粗略判斷出他的水平了。 簡而言之,匈牙利命名法就是把變量的『類型』縮寫,放到變量名的最前面。關鍵在於,這裏說的變量『類型』,指的是那些和你的代碼業務邏輯相關的類型。好比,在你的代碼中有兩個變量:students 和 teachers,他們分別表明的是用來存儲學生的集合與用來存儲老師的列表,使用『匈牙利命名法』後,能夠把這兩個名字改寫成這樣:
students -> set_students teachers -> list_teachers
不少狀況下,使用『匈牙利命名法』是個不錯的主意,由於它能夠改善你的代碼可讀性,尤爲在那些變量衆多、同一類型屢次出現時,注意不要濫用就好。
隨着學習的深刻,用不了多久,你就能夠寫複雜的上千甚至上萬行的代碼啦,有些代碼你花了好久寫出來,過了些天再回去看,發現居然看不懂了,這太正常了。 另外,你之後在工做中會發現,一個項目可能是由幾個甚至幾十個開發人員一塊兒作,你要調用別人寫的代碼,別人也要用你的,若是代碼不加註釋,你本身都看不懂,更別說別人了,這產會捱打的。因此爲了不這種尷尬的事情發生,必定要增長你代碼的可讀性。
代碼註釋分爲三種:
"""註釋內容 """
,或者三對單引號中間寫註釋內容,和明顯多行註釋就是能夠註釋多行,當你的註釋比較長的使用,寫很長的一行不便於閱讀,這時,咱們推薦使用多行註釋。代碼註釋的原則:
注意(很是重要): 註釋大家如今可能誰都會寫,但其實在工做中,除了一些高標準的公司以外,可以規範寫註釋的人很是少,寫註釋和寫規範的註釋是表明一位程序員編程素養的最簡單的方式。
注意:既然是文件頭,那麼天然是要放在文件頂部,這也是開發規範的一些細節
#!/usr/bin/env python # 指定解釋器
# -*- coding: utf-8 -*- # 指定文件字符編碼
複製代碼
若是每次寫代碼咱們都本身去寫的話有點浪費時間,咱們能夠本身先在Pycharm上面配置好,之後每次新建一個文件自動就會添加文件頭。MacOS系統的用戶能夠按照先點擊Pycharm左上角按照:Pycharm--Preferences--Editor--File and Code Templates--Python Script 的順序找到一塊空白的區域,把一下代碼粘貼進去,Windows系統的用戶能夠按照:File--Settings--Editor--File and Code Templates--Python Script,執行一樣的操做。注意:做者那一行代碼能夠改爲你本身的名字。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : ${DATE} ${TIME}
# @Author : Albert
# @File : ${NAME}.py
複製代碼
文章寫到這裏才正式進入本章標題的內容,前面都是鋪墊
古時候,咱們去銀行取錢,須要有一個銀行業務員等着咱們把本身的帳號密碼輸入給他,而後他去進行驗證,成功後,咱們再將取款金額輸入/告訴他驕傲的現代人,會爲客戶提供一臺ATM機(就是一臺計算機),讓ATM機跟用戶交互,從而取代人力。然而機器是死的,咱們必須爲其編寫程序來運行,這就要求咱們的編程語言中可以有一種能與用戶交互,接收用戶輸入數據的機制。
用戶交互就是程序等待用戶輸入數據以後,在執行下一步的程序,咱們使用 input 來完成這個操做。
name = input('請輸入姓名:') # 我把輸入的內容賦值給name這個變量
print(‘你好’ + name) # 當用戶輸入完成本身的姓名以後就會打印出來 你好XXX
複製代碼
Python2 與Python3 的區別
須要注意的是:當須要輸入一個數字的時候,考慮到咱們會用這個數字作計算,而Python3的input會默認轉成str,全部咱們須要把用戶輸入的數據轉化成int
age = input('請輸入年齡')
age = int(age) # 把字符串age轉化成int類型age用於計算
複製代碼