1989年的聖誕節期間,吉多·範羅蘇姆爲了在阿姆斯特丹打發時間,決心開發一個新的腳本解釋程序,做爲ABC語言的一種繼承。之因此選中Python做爲程序的名字,是由於他是BBC電視劇——蒙提·派森的飛行馬戲團(Monty Python's Flying Circus)的愛好者。php
Python是一種編程語言,Python是一門動態解釋性的強類型定義語言。 java
編程語言:python
計算機只能識別二進制碼,只認識0101010....linux
機器語言:
用二進制碼0和1描述的指令稱爲機器指令,全部機器指令的集合構成計算機的機器語言。
機器語言屬於低級語言 最底層
直觀性差,容易出錯
彙編語言:
實質和機器語言相同,都是直接對硬件進行操做,只不過指令採用了英文縮寫的標識符,更容易識別和記憶。
一句指令只能對應實際操做中一個很細微的動做,冗長,複雜,易出錯
可執行文件比較小,執行速度快
高級語言:
相對於彙編語言而言,並非特指某一種語言 C、C++、java、php、python、go、C#.....
它將許多相關的機器指令合成爲單條指令,而且去掉了與具體操做有關但與完成工做無關的細節。
對開發人員更友好,在開發效率上大大提升
程序不能直接被計算機識別,必須通過轉換才能被執行
編譯類:
程序執行前,就將程序源代碼一次性編譯成機器語言,而後計算機直接執行
C、C++、Delphi....
優勢:
程序執行時,再也不須要源代碼,不依賴語言環境,由於執行的是機器碼文件
執行速度快
缺點:
每次修改源代碼後,須要從新編譯
跨平臺性很差,不一樣操做系統,調用底層的機器指令不一樣,需爲不一樣的平臺生成不一樣的機器碼文件
解釋類:
程序執行時,由解釋器將代碼一行一行翻譯成機器語言,邊翻譯邊執行
Python、Java、PHP、Ruby....
優勢:
天生跨平臺,由於解釋器已經作好了對不一樣平臺的交互處理
隨時修改,當即見效
缺點:
運行效率低,全部代碼邊解釋邊執行,速度比編譯型慢不少
代碼是明文
動態類型語言和靜態類型語言主要針對數據類型檢查的時間問題。c++
動態語言git
是在運行時肯定數據類型的語言。變量使用以前不須要類型聲明,一般變量的類型是被賦值的那個值的類型。算法
Python、Ruby、Erlang、JavaScript、swift、PHP、SQL、Perl...編程
靜態語言swift
是在編譯時變量的數據類型便可肯定的語言,多數靜態類型語言要求在使用變量以前必須聲明數據類型。windows
C、C++、C#、Java、Object-C...
注意:一般狀況下解釋型語言是動態類型語言,編譯型語言是靜態類型語言。但也不全是,swift是編譯型語言可是它也是動態類型語言。C#和Java是解釋型語言也是靜態類型語言。
強類型語言:
一旦一個變量被指定了某個數據類型,若是不通過強制類型轉換,那麼它就永遠是這個數據類型。你不能把一個整形變量當成一個字符串來處理。
Java、C#、Python、Object-C、Ruby...
弱類型語言:
數據類型能夠被忽略,一個變量能夠賦不一樣數據類型的值。一旦給一個整型變量a賦一個字符串值,那麼a就變成字符類型。
JavaScript、PHP、C、C++...
CPython:
python的官方版本,使用C語言實現,使用最爲普遍,CPython實現會將源文件(py文件)轉換成字節碼文件(pyc文件),而後運行在Python虛擬機上。
IPython:
基於CPython之上的一個交互式解釋器
PyPy:
目標是執行速度,採用JIT技術,對python代碼進行動態編譯
JPython:
python的Java實現,Jython會將Python代碼動態編譯成Java字節碼,而後在JVM上運行。
IronPython:
運行在微軟.Net平臺上的python解釋器,能夠把python代碼編譯.Net的字節碼
.....
Python2與Python3:
Python2默認編碼方式是ASCII碼
在文件首行:#-*- encoding:utf-8 -*-
Python3默認編碼方式是utf-8
優勢:
一、Python的定位是「優雅」、「明確」、「簡單」,因此Python程序看上去老是簡單易懂,初學者學Python,不但入門容易,並且未來深刻下去,能夠編寫那些很是很是複雜的程序。
二、開發效率很是高,Python有很是強大的第三方庫,基本上你想經過計算機實現任何功能,Python官方庫裏都有相應的模塊進行支持,直接下載調用後,在基礎庫的基礎上再進行開發,大大下降開發週期,避免重複造輪子。
三、高級語言——當你用Python語言編寫程序的時候,你無需考慮諸如如何管理你的程序使用的內存一類的底層細節
四、可移植性——因爲它的開源本質,Python已經被移植在許多平臺上(通過改動使它可以工做在不一樣平臺上)。若是你當心地避免使用依賴於系統的特性,那麼你的全部Python程序無需修改就幾乎能夠在市場上全部的系統平臺上運行
五、可擴展性——若是你須要你的一段關鍵代碼運行得更快或者但願某些算法不公開,你能夠把你的部分程序用C或C++編寫,而後在你的Python程序中使用它們。
六、可嵌入性——你能夠把Python嵌入你的C/C++程序,從而向你的程序用戶提供腳本功能。
缺點:
一、速度慢,Python 的運行速度相比C語言確實慢不少,跟JAVA相比也要慢一些,但其實這裏所指的運行速度慢在大多數狀況下用戶是沒法直接感知到的,必須藉助測試工具才能體現出來,好比你用C運一個程序花了0.01s,用Python是0.1s,這樣C語言直接比Python快了10倍,算是很是誇張了,可是你是沒法直接經過肉眼感知的,由於一個正常人所能感知的時間最小單位是0.15-0.4s左右。其實在大多數狀況下Python已經徹底能夠知足你對程序速度的要求,除非你要寫對速度要求極高的搜索引擎等,這種狀況下,固然仍是建議你用C去實現的。
二、代碼不能加密,由於Python是解釋型語言,它的源碼都是以名文形式存放的,當咱們編寫Python代碼時,咱們獲得的是一個包含Python代碼的以.py爲擴展名的文本文件。要運行代碼,就須要Python解釋器去執行.py文件。整個Python語言從規範到解釋器都是開源的,理論上,只要水平夠高,任何人均可以編寫Python解釋器來執行Python代碼(固然難度很大)。事實上,確實存在多種Python解釋器。
若是項目要求源代碼必須是加密的,那麼一開始就不該該用Python來去實現。
三、沒有真正意義的多線程,GIL即全局解釋器鎖(Global Interpreter Lock),是計算機程序設計語言解釋器用於同步線程的工具,使得任什麼時候刻僅有一個線程在執行,Python的線程是操做系統的原生線程。在Linux上爲pthread,在Windows上爲Win thread,徹底由操做系統調度線程的執行。一個python解釋器進程內有一條主線程,以及多條用戶程序的執行線程。即便在多核CPU平臺上,因爲GIL的存在,因此禁止多線程的並行執行。
雲計算: 雲計算最火的語言, 典型應用OpenStack
WEB開發: 衆多優秀的WEB框架,衆多大型網站均爲Python開發,Youtube, Dropbox, 豆瓣..., 典型WEB框架有Django
科學運算、人工智能: 典型庫NumPy, SciPy, Matplotlib, Enthought librarys,pandas
系統運維: 運維人員必備語言
金融:量化交易,金融分析,在金融工程領域,Python不但在用,且用的最多,並且重要性逐年提升。緣由:做爲動態語言的Python,語言結構清晰簡單,庫豐富,成熟穩定,科學計算和統計分析都很牛逼,生產效率遠遠高於c,c++,java,尤爲擅長策略回測
圖形GUI: PyQT, WxPython,TkInter
1、Python安裝
windows:
1.下載安裝包 Windows x86-64 executable installer
https://www.python.org/downloads/
2.安裝路徑
C:\Python35
3.配置環境變量
【右鍵計算機】--》【屬性】--》【高級系統設置】--》【高級】--》【環境變量】--》【系統變量框中 雙擊Path】--》【C:\Python35 添加到 變量值 末尾,用;分割】
4.測試
將C:\Python35中python.exe複製一份,命名爲python3.exe
windows--》運行--》cmd 回車,在cmd程序中輸入python3,進入交互環境說明成功
Linux:
自帶python,通常是python2
1 [root@localhost ~]# python 2 Python 2.7.5 (default, Apr 11 2018, 07:36:10) 3 [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2 4 Type "help", "copyright", "credits" or "license" for more information. 5 >>> exit()
安裝python3:
1 [root@localhost ~]# wget https://www.python.org/ftp/python/3.5.3/Python-3.5.3.tgz 2 -bash: wget: 未找到命令 3 [root@localhost ~]# yum install wget -y 4 [root@localhost ~]# wget https://www.python.org/ftp/python/3.5.3/Python-3.5.3.tgz 5 [root@localhost ~]# tar xvf Python-3.5.3.tgz 6 [root@localhost ~]# cd Python-3.5.3 7 [root@localhost Python-3.5.3]# ls 8 aclocal.m4 configure Grammar Lib Makefile.pre.in Objects PCbuild Python Tools 9 config.guess configure.ac Include LICENSE Misc Parser Programs README 10 config.sub Doc install-sh Mac Modules PC pyconfig.h.in setup.py 11 [root@localhost Python-3.5.3]# mkdir /usr/local/Python3.5 12 [root@localhost Python-3.5.3]# ./configure --prefix=/usr/local/Python3.5 13 checking build system type... x86_64-pc-linux-gnu 14 checking host system type... x86_64-pc-linux-gnu 15 checking for python3.5... no 16 checking for python3... no 17 checking for python... python 18 checking for --enable-universalsdk... no 19 checking for --with-universal-archs... no 20 checking MACHDEP... linux 21 checking for --without-gcc... no 22 checking for --with-icc... no 23 checking for gcc... no 24 checking for cc... no 25 checking for cl.exe... no 26 configure: error: in `/root/Python-3.5.3': 27 configure: error: no acceptable C compiler found in $PATH 28 See `config.log' for more details 29 [root@localhost Python-3.5.3]#yum install gcc-* -y 30 [root@localhost Python-3.5.3]# ./configure --prefix=/usr/local/Python3.5 31 [root@localhost Python-3.5.3]# make 32 [root@localhost Python-3.5.3]# make install 33 [root@localhost Python-3.5.3]# cd /usr/local/Python3.5/bin/ 34 [root@localhost bin]# ls 35 2to3 idle3 pydoc3 python3 python3.5-config python3.5m-config pyvenv 36 2to3-3.5 idle3.5 pydoc3.5 python3.5 python3.5m python3-config pyvenv-3.5 37 [root@localhost bin]# ./python3.5 38 Python 3.5.3 (default, Nov 30 2018, 10:08:37) 39 [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux 40 Type "help", "copyright", "credits" or "license" for more information. 41 >>> 42 43 [root@localhost ~]# ln -s /usr/local/Python3.5/bin/python3.5 /bin/python3.5 44 [root@localhost ~]# python3.5 45 Python 3.5.3 (default, Nov 30 2018, 10:08:37) 46 [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux 47 Type "help", "copyright", "credits" or "license" for more information. 48 >>>
在 /home/dev/ 目錄下建立 hello.py 文件,內容以下:
1 print "hello,world"
執行 hello.py 文件,即: python /home/dev/hello.py
python工做過程
一、python 把代碼讀到內存 二、詞法語法分析 三、放到編譯器 ---》 生成字節碼 四、執行字節碼 ---》生成機器碼 CPU執行
3、變量、常量
# 變量:就是將一些運算的中間結果暫存到內存中,以便後續代碼調用
1 print(1+2+3+4) 2 print((1+2+3+4)*5) 3 4 x=1+2+3+4 5 print(x) 6 y=x*5 7 print(y) 8 # x、y稱爲變量
變量定義規範:
一、只能以字母、數字、下劃線組成,且不能以數字開頭
二、不能是python中的關鍵字:['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']
三、變量具備可描述性
定義變量的low方式:
一、變量名爲中文、拼音
二、變量名過長
三、變量名詞不達意
變量命名習慣
1 # 駝峯體 2 AgeOfOldboy = 56 3 NumberOfStudents = 50 4 5 # 下劃線 6 age_of_oldboy = 56 7 number_of_students = 50
1 a1 = 12 2 a2 = a1 3 a3 = a2 4 a2 = 100 5 print(a1,a2,a3) #12,100,12 按行執行
#常量:一直不變的量
約定俗成,不可更改,所有是大寫字母
1 AGE_OF_OLDBOY = 56
4、用戶交互 input
一、等待輸入,輸入後繼續往下走
二、將你輸入的內容賦值給前面的變量
三、input出來的類型所有是str
1 name = input('請輸入你的名字:') 2 age = input('請輸入你的年齡:') 3 4 print(name,age,type(age)) 5 print('個人名字'+name,'個人年齡'+age+'歲')
5、註釋
單行註釋 #
多行註釋 '''代碼內容''' """代碼內容"""
註釋原則:
不用所有加註釋,只須要在本身以爲重要或者很差理解的部分加註釋便可
註釋能夠用中文或英文,但絕對不要用拼音
6、數據類型
數字類型:主要用於計算
int(整形):整數
float(浮點型):小數
str(字符串):
凡是用引號引發來的全是字符串
字符串拼接:
雙方必須都是字符串,不能與數字或其餘類型拼接
1 a = '可是' 2 b = '反對' 3 c = a + b # 相加便是簡單拼接 4 print(c) 5 print(c*10) # 相乘就是複製本身多少次,再拼接到一塊兒
bool(布爾):
True False 不能加引號 用於判斷
type() 查看類型:
1 print(100) 2 print('100') 3 print(100,type(100)) 4 print('100',type('100'))
7、格式化輸出
%佔位符,s string 字符串,d digit 數字,f float 小數
%f 默認保存6位,%.3f 表示指定保留3位小數
%% 只是單純的顯示%
1 # 格式 2 msg ='''--------info of Alex Li--------- 3 Name : ALex Li 4 Age : 19 5 Job : Teacher 6 Hobbie: girl 7 ------------end------------''' 8 # 實現 9 name = input('請輸入名字:') 10 age = int(input('請輸入年齡:')) 11 job = input('請輸入工做:') 12 hobbie = input('請輸入愛好:') 13 14 msg ='''--------info of %s--------- 15 Name : %s 16 Age : %d 17 Job : %s 18 Hobbie: %s 19 ------------end------------''' %(name,name,age,job,hobbie) 20 print(msg)
8、運算符
運算按種類分爲算術運算、比較運算、邏輯運算、賦值運算、成員運算、身份運算、位運算等
算術運算:
如下假設變量:a=10,b=20
比較運算:
如下假設變量:a=10,b=20
賦值運算:
如下假設變量:a=10,b=20
邏輯運算:
1 print(1>1 or 3<4 or 4>5 and 2>1 and 9>8 or 7<6) 2 print(not 2>1 and 3<4 or 4>5 and 2>1 and 9>8 or 7<6) 3 print(1>2 and 3<4 or 4>5 and 2>1 or 9<8 and 4>6 or 3<2) 4 print(8 or 3 and 4 or 2 and 0 or 9 and 7) 5 print(0 or 2 and 3 and 4 or 6 and 0 or 3) 6 7 # T F F 8 4
9、流程控制 if
單分支:
if 條件:
知足條件後要執行的代碼
1 print(555) 2 if 5 > 4 : 3 print(666) 4 print(777)
雙分支:
if 條件:
知足條件後要執行的代碼
else:
if條件不知足就走這條
1 if 4 == 3 : 2 print(666) 3 else: 4 print('777')
多分支:
if 條件:
知足條件後要執行的代碼
elif:
上面的條件不知足就走這條
elif:
上面的條件不知足就走這條
else:
上面的條件都不知足就走這個
1 score = int(input('輸入分數:')) 2 3 if score > 100: 4 print('我擦,最高分才100。。。。') 5 elif score >= 90: 6 print('A') 7 elif score >= 80: 8 print('B') 9 elif score >= 70: 10 print('C') 11 elif score >= 60: 12 print('D') 13 else: 14 print('呵呵,沒及格。。。')
嵌套:
1 name = input('請輸入名字:') 2 age = input('請輸入年齡:') 3 if name == '小二': 4 if age == '18': 5 print(666) 6 else: 7 print(777) 8 else: 9 print('錯了。。')
10、while循環
while 條件:
循環體
1 # 死循環 2 count = 0 3 while True: 4 print("loop",count) 5 count += 1
#停止循環:改變條件,使其不成立
break:跳出循環
continue:結束本次循環,繼續下一次循環
1 使用while 循環實現輸出 1-100 內的全部奇數; 2 3 count = 0 4 while count < 101: 5 if count % 2 == 1: 6 print(count) 7 count += 1
1 count = 0 2 while count <= 100: 3 print("loop",count) 4 if count == 5: 5 break 6 count += 1 7 8 print("----out of while loop----")
1 count = 0 2 while count <= 100: 3 count += 1 4 if count > 5 and count < 95: 5 continue 6 print("loop", count) 7 8 print("----out of while loop----")
while ... else
當while循環正常執行完,中間沒有被break停止的話,就會執行else後面的語句
1 count = 0 2 while count <= 5: 3 count += 1 4 print("loop", count) 5 else: 6 print("循環正常執行完了") 7 print("----out of while loop----")