python的創始人:Guido Van Rossumpython
編程語言主要從如下幾個角度進行分類:編譯型,靜態型,動態性,強類型定義語言和弱類型定義語言linux
(1)編譯型:有一個負責翻譯的程序來對咱們的源代碼進行轉換,生成對應的可執行代碼,這個過程就是編譯(Compile),而負責編譯的程序就被稱爲編譯器(Compiler)c++
(2)一般咱們所說的動態語言,靜態語言是指動態類型語言和靜態類型語言程序員
(3)動態類型語言:是指在運行期間採起作數據類型檢查的語言。即在用動態類型的語言編程時,永遠也不用給任何變量指定數據類型,該語言會在你第一次賦值給變量時,在內部將數據類型記錄下來。典型的是python和Rubyweb
(4)靜態類型語言:數據類型是在編譯期間檢查的,也就是說在寫程序的時候要聲明全部變量的數據類型。C/C++是靜態類型語言的典型表明,其餘的靜態類型語言還有C#,JAVA正則表達式
網絡應用、科學運算、GUI程序、系統管理工具、其餘等等算法
Web應用開發 Python常常被用於Web開發。好比,經過mod_wsgi模塊,Apache能夠運行用Python編寫的Web程序。Python定義了WSGI標準應用接口來協調Http服務器與基於Python的Web程序之間的通訊。一些Web框架,如Django,TurboGears,web2py,Zope等,可讓程序員輕鬆地開發和管理複雜的Web程序。 操做系統管理、服務器運維的自動化腳本 在不少操做系統裏,Python是標準的系統組件。 大多數Linux發行版以及NetBSD、OpenBSD和Mac OS X都集成了Python,能夠在終端下直接運行Python。有一些Linux發行版的安裝器使用Python語言編寫,好比Ubuntu的Ubiquity安裝器,Red Hat Linux和Fedora的Anaconda安裝器。Gentoo Linux使用Python來編寫它的Portage包管理系統。Python標準庫包含了多個調用操做系統功能的庫。經過pywin32這個第三方軟件 包,Python可以訪問Windows的COM服務及其它Windows API。使用IronPython,Python程序可以直接調用.Net Framework。通常說來,Python編寫的系統管理腳本在可讀性、性能、代碼重用度、擴展性幾方面都優於普通的shell腳本。 科學計算 NumPy,SciPy,Matplotlib可讓Python程序員編寫科學計算程序。 桌面軟件 PyQt、PySide、wxPython、PyGTK是Python快速開發桌面應用程序的利器。 服務器軟件(網絡軟件) Python對於各類網絡協議的支持很完善,所以常常被用於編寫服務器軟件、網絡爬蟲。第三方庫Twisted支持異步網絡編程和多數標準的網絡協議(包含客戶端和服務器),而且提供了多種工具,被普遍用於編寫高性能的服務器軟件。 遊戲 不少遊戲使用C++編寫圖形顯示等高性能模塊,而使用Python或者Lua編寫遊戲的邏輯、服務器。相較於Python,Lua的功能更簡單、體積更小;而Python則支持更多的特性和數據類型。 構思實現,產品早期原型和迭代 YouTube、Google、Yahoo!、NASA都在內部大量地使用Python。
優勢:簡單、開發效率高、高級語言、可移植性、可擴展性、可嵌入性sql
缺點:速度慢,可是相對的、代碼不能加密、線程不能利用多CPU問題shell
優勢 簡單————Python是一種表明簡單主義思想的語言。閱讀一個良好的Python程序就感受像是在讀英語同樣,儘管這個英語的要求很是嚴格!Python的這種僞代碼本質是它最大的優勢之一。它使你可以專一於解決問題而不是去搞明白語言自己。 易學————就如同你即將看到的同樣,Python極其容易上手。前面已經提到了,Python有極其簡單的語法。 免費、開源————Python是FLOSS(自由/開放源碼軟件)之一。簡單地說,你能夠自由地發佈這個軟件的拷貝、閱讀它的源代碼、對它作改動、把它的一部分用於新的自由軟件中。FLOSS是基於一個團體分享知識的概念。這是爲何Python如此優秀的緣由之一——它是由一羣但願看到一個更加優秀的Python的人創造並常常改進着的。 高層語言————當你用Python語言編寫程序的時候,你無需考慮諸如如何管理你的程序使用的內存一類的底層細節。 可移植性————因爲它的開源本質,Python已經被移植在許多平臺上(通過改動使它可以工做在不一樣平臺上)。若是你當心地避免使用依賴於系統的特性,那麼你的全部Python程序無需修改就能夠在下述任何平臺上面運行。這些平臺包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/二、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程序更加易於移植。 面向對象————Python既支持面向過程的編程也支持面向對象的編程。在「面向過程」的語言中,程序是由過程或僅僅是可重用代碼的函數構建起來的。在「面向對象」的語言中,程序是由數據和功能組合而成的對象構建起來的。與其餘主要的語言如C++和Java相比,Python以一種很是強大又簡單的方式實現面向對象編程。 可擴展性————若是你須要你的一段關鍵代碼運行得更快或者但願某些算法不公開,你能夠把你的部分程序用C或C++編寫,而後在你的Python程序中使用它們。 豐富的庫————Python標準庫確實很龐大。它能夠幫助你處理各類工做,包括正則表達式、文檔生成、單元測試、線程、數據庫、網頁瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV文件、密碼系統、GUI(圖形用戶界面)、Tk和其餘與系統有關的操做。記住,只要安裝了Python,全部這些功能都是可用的。這被稱做Python的「功能齊全」理念。除了標準庫之外,還有許多其餘高質量的庫,如wxPython、Twisted和Python圖像庫等等。 規範的代碼————Python採用強制縮進的方式使得代碼具備極佳的可讀性。 缺點 運行速度,有速度要求的話,用C++改寫關鍵部分吧。 國內市場較小(國內以python來作主要開發的,目前只有一些web2.0公司)。但時間推移,目前不少國內軟件公司,尤爲是遊戲公司,也開始規模使用他。 中文資料匱乏(好的python中文資料屈指可數)。託社區的福,有幾本優秀的教材已經被翻譯了,但入門級教材多,高級內容仍是隻能看英語版。 構架選擇太多(沒有像C#這樣的官方.net構架,也沒有像ruby因爲歷史較短,構架開發的相對集中。Ruby on Rails 構架開發中小型web程序天下無敵)。不過這也從另外一個側面說明,python比較優秀,吸引的人才多,項目也多。
Cpython、IPython、PyPy、Jython、IronPython數據庫
#安裝sqlite-devel yum -y install sqlite-devel #安裝依賴 yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel #下載安裝 wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz mkdir -p /usr/local/python3 tar -zxvf Python-3.6.1.tgz cd Python-3.6.1 ./configure --prefix=/usr/local/python3 make make install #軟鏈接 ln -s /usr/local/python3/bin/python3 /usr/bin/python3 #環境 vim ~/.bash_profile PATH=$PATH:$HOME/bin:/usr/local/python3/bin export PATH source ~/.bash_profile
一、下載安裝包 https://www.python.org/downloads/ 2、安裝 默認安裝路徑:C:\python35 3、配置環境變量 【右鍵計算機】--》【屬性】--》【高級系統設置】--》【高級】--》【環境變量】--》【在第二個內容框中找到 變量名爲Path 的一行,雙擊】 --> 【Python安裝目錄追加到變值值中,用 ; 分割】 如:原來的值;C:\python35,切記前面有分號
python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ascill)
ASCII(American Standard Code for Information Interchange,美國標準信息交換代碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其餘西歐語言,其最多隻能用 8 位來表示(一個字節),即:2**8 = 256,因此,ASCII碼最多隻能表示 256 個符號。
顯然ASCII碼沒法將世界上的各類文字和符號所有表示,因此,就須要新出一種能夠表明全部字符和符號的編碼,即:Unicode
Unicode(統一碼、萬國碼、單一碼)是一種在計算機上使用的字符編碼。Unicode 是爲了解決傳統的字符編碼方案的侷限而產生的,它爲每種語言中的每一個字符設定了統一而且惟一的二進制編碼,規定雖有的字符和符號最少由 16 位來表示(2個字節),即:2 **16 = 65536,
注:此處說的的是最少2個字節,可能更多
UTF-8,是對Unicode編碼的壓縮和優化,他再也不使用最少使用2個字節,而是將全部的字符和符號進行分類:ascii碼中的內容用1個字節保存、歐洲的字符用2個字節保存,東亞的字符用3個字節保存...
python2.x版本,默認支持的字符編碼爲ASCll python3.x版本,默認支持的是Unicode,不用聲明字符編碼能夠直接顯示中文
單行注視:# 被註釋內容 多行註釋:""" 被註釋內容 """ 註釋快捷鍵:選中被註釋的內容,ctrl+?註釋選中的內容,再次ctrl+?取消註釋
3.關鍵字
python一些具備特殊功能的標示符,這就是所謂的關鍵字
關鍵字,是python已經使用的了,因此不容許開發者本身定義和關鍵字相同的名字的標示符
and as assert break class continue def del elif else except exec finally for from global if in import is lambda not or pass print raise return try while with yield
能夠經過下面的方式查看關鍵字
import keyword print(keyword.kwlist)
age = 22 print('我今年%d歲'%age)
輸出結果:我今年22歲
經常使用的格式化輸出符號
變量定義的規則:
變量名只能是 字母、數字或下劃線的任意組合
變量名的第一個字符不能是數字
關鍵字不能聲明爲變量名
1.if-else
if 條件: 知足條件時要作的事情1 知足條件時要作的事情2 知足條件時要作的事情3 ...(省略)... else: 不知足條件時要作的事情1 不知足條件時要作的事情2 不知足條件時要作的事情3 ...(省略)...
實例:
name = input('請輸入用戶名字:') password = input('請輸入密碼:') if name == 'root' and password == '123': print('root login success') else: print('用戶名或密碼錯誤')
2.elif
if xxx1: 事情1 elif xxx2: 事情2 elif xxx3: 事情3
實例:
score = 77 if score>=90 and score<=100: print('本次考試,等級爲A') elif score>=80 and score<90: print('本次考試,等級爲B') elif score>=70 and score<80: print('本次考試,等級爲C') elif score>=60 and score<70: print('本次考試,等級爲D') elif score>=0 and score<60: print('本次考試,等級爲E')
3.if嵌套
if 條件1: 知足條件1 作的事情1 知足條件1 作的事情2 ...(省略)... if 條件2: 知足條件2 作的事情1 知足條件2 作的事情2 ...(省略)...
1.while循環
while 條件: 條件知足時,作的事情1 條件知足時,作的事情2 條件知足時,作的事情3 ...(省略)...
實例:求1到100的總和
i = 1 sum = 0 while i <= 100: sum = sum + i i += 1 print("總和爲%d"%sum) #總和爲5050
2.while循環嵌套
while 條件1: 條件1知足時,作的事情1 條件1知足時,作的事情2 條件1知足時,作的事情3 ...(省略)... while 條件2: 條件2知足時,作的事情1 條件2知足時,作的事情2 條件2知足時,作的事情3 ...(省略)...
實例: 九九乘法表
i = 1 while i<=9: j=1 while j<=i: print("%d*%d=%-2d "%(j,i,i*j),end='') j+=1 print('\n') i+=1
結果:
1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
3.for循環
在Python中 for循環能夠遍歷任何序列的項目,如一個列表或者一個字符串等。
for 臨時變量 in 列表或者字符串等: 循環知足條件時執行的代碼 else: 循環不知足條件時執行的代碼
實例:
name = 'derek' for i in name: print(i)
結果:
d
e
r
e
k
4.break和continue
break的做用:用來結束整個循環
continue的做用:用來結束本次循環,緊接着執行下一次的循環
(1)實例:break的用法
i = 0 while i < 10: i += 1 if i == 5: break print(i)
結果:
1 2 3 4
(2)實例:continue的用法
i = 0 while i < 10: i += 1 if i == 5: continue print(i)
結果:
1 2 3 4 6 7 8 9 10
要理解深淺拷貝,需先弄懂下面的概念
變量-引用-對象(可變對象,不可變對象)-切片-拷貝(淺拷貝,深拷貝)
變量是一個系統表的元素,擁有指向對象的鏈接的空間
對象是被分配的一塊內存,存儲其所表明的值
引用是自動造成的從變量到對象的指針
在Python中不可變對象指:一旦建立就不可修改的對象,包括字符串,元祖,數字
在Python中可變對象是指:能夠修改的對象,包括:列表、字典
1.不可變對象的賦值
a的值發生改變,b不會跟着改變
a = 1 b = a print(a) print(b) a = 3 print(a) print(b) 結果: 1 1 3 1
2.可變對象的賦值
a的值發生改變,b也跟着改變
a = [1,2] b = a print(a) print(b) a[0] = 3 print(a) print(b) 結果: [1, 2] [1, 2] [3, 2] [3, 2]
要想b的值不會改變,就要用到copy模塊了
3.深淺拷貝
淺拷貝:只拷貝頂級的對象,或者說:父級對象
深拷貝:拷貝全部對象,頂級對象及其嵌套對象。或者說:父級對象及其子對象
import copy #第一種:若是字典只有頂級對象(沒有帶嵌套) d = {'name':'derek','age':'22'} c1 = copy.copy(d) #淺拷貝 c2 = copy.deepcopy(d) #深拷貝 print(id(d),id(c1),id(c2)) #5794912 5794984 31939824 三個不一樣對象 d['age'] = 25 print(d,c1,c2) #{'name': 'derek', 'age': 25} # {'name': 'derek', 'age': '22'} # {'name': 'derek', 'age': '22'} 源對象修改值的時候,深淺拷貝的對象值沒有改變
import copy #第二種,字典中有嵌套 d = {'name':{'first':'zhang','last':'derek'}, 'job':['IT','HR']} c1 = copy.copy(d) c2 = copy.deepcopy(d) print(id(d),id(c1),id(c2)) #31157416 31940256 35946856 d['job'][0] = 'tester' print(d,c1,c2) # {'name': {'first': 'zhang', 'last': 'derek'}, 'job': ['tester', 'HR']} # {'name': {'first': 'zhang', 'last': 'derek'}, 'job': ['tester', 'HR']} # {'name': {'first': 'zhang', 'last': 'derek'}, 'job': ['IT', 'HR']}
源對象修改值的時候,淺拷貝的值跟着改變,深拷貝的值沒變
結論: