1、python發展史php
python的創始人爲吉多·範羅蘇姆(Guido van Rossum)。1989年的聖誕節期間,吉多·範羅蘇姆爲了在阿姆斯特丹打發時間,決心開發一個新的腳本解釋程序,做爲ABC語言的一種繼承。Python這個名字,來自Guido所摯愛的電視劇Monty Python’s Flying Circus。他但願這個新的叫作Python的語言,能符合他的理想:創造一種C和shell之間,功能全面,易學易用,可拓展的語言。html
Python 3.2 - February 20, 2011python
2、Python是什麼編程語言web
2.一、編譯型:一次性將全部程序編譯成二進制文件。算法
缺點:開發效率低,不能跨平臺。
優勢:運行速度快。
C,C++,...shell
2.二、解釋型:當程序執行時,一行一行的解釋。
優勢:開發效率高,能夠跨平臺。
缺點:運行速度慢。
python ,php,...編程
3、Python優缺點瀏覽器
優勢:網絡
3.一、Python的定位是「優雅」、「明確」、「簡單」,因此Python程序看上去老是簡單易懂,初學者學Python,不但入門容易,並且未來深刻下去,能夠編寫那些很是很是複雜的程序。多線程
3.二、開發效率很是高,Python有很是強大的第三方庫,基本上你想經過計算機實現任何功能,Python官方庫裏都有相應的模塊進行支持,直接下載調用後,在基礎庫的基礎上再進行開發,大大下降開發週期,避免重複造輪子。
3.三、高級語言————當你用Python語言編寫程序的時候,你無需考慮諸如如何管理你的程序使用的內存一類的底層細節
3.四、可移植性————因爲它的開源本質,Python已經被移植在許多平臺上(通過改動使它可以工 做在不一樣平臺上)。若是你當心地避免使用依賴於系統的特性,那麼你的全部Python程序無需修改就幾乎能夠在市場上全部的系統平臺上運行
3.五、可擴展性————若是你須要你的一段關鍵代碼運行得更快或者但願某些算法不公開,你能夠把你的部分程序用C或C++編寫,而後在你的Python程序中使用它們。
3.6可嵌入性————你能夠把Python嵌入你的C/C++程序,從而向你的程序用戶提供腳本功能。
缺點:
3.7速度慢,Python 的運行速度相比C語言確實慢不少,跟JAVA相比也要慢一些,所以這也是不少所謂的大牛不屑於使用Python的主要緣由,但其實這裏所指的運行速度慢在大多數狀況下用戶是沒法直接感知到的,必須藉助測試工具才能體現出來,好比你用C運一個程序花了0.01s,用Python是0.1s,這樣C語言直接比Python快了10倍,算是很是誇張了,可是你是沒法直接經過肉眼感知的,由於一個正常人所能感知的時間最小單位是0.15-0.4s左右,哈哈。其實在大多數狀況下Python已經徹底能夠知足你對程序速度的要求,除非你要寫對速度要求極高的搜索引擎等,這種狀況下,固然仍是建議你用C去實現的。
3.8代碼不能加密,由於PYTHON是解釋性語言,它的源碼都是以名文形式存放的,不過我不認爲這算是一個缺點,若是你的項目要求源代碼必須是加密的,那你一開始就不該該用Python來去實現。
3.9線程不能利用多CPU問題,這是Python被人詬病最多的一個缺點,GIL即全局解釋器鎖(Global Interpreter Lock),是計算機程序設計語言解釋器用於同步線程的工具,使得任什麼時候刻僅有一個線程在執行,Python的線程是操做系統的原生線程。在Linux上爲pthread,在Windows上爲Win thread,徹底由操做系統調度線程的執行。一個python解釋器進程內有一條主線程,以及多條用戶程序的執行線程。即便在多核CPU平臺上,因爲GIL的存在,因此禁止多線程的並行執行。關於這個問題的折衷解決方法,咱們在之後線程和進程章節裏再進行詳細探討。
當咱們編寫Python代碼時,咱們獲得的是一個包含Python代碼的以.py
爲擴展名的文本文件。要運行代碼,就須要Python解釋器去執行.py
文件。因爲整個Python語言從規範到解釋器都是開源的,因此理論上,只要水平夠高,任何人均可以編寫Python解釋器來執行Python代碼(固然難度很大)。事實上,確實存在多種Python解釋器
4、Python 種類
CPython
當咱們從Python官方網站下載並安裝好Python 3.6後,咱們就直接得到了一個官方版本的解釋器:CPython。這個解釋器是用C語言開發的,因此叫CPython。在命令行下運行python
就是啓動CPython解釋器。
CPython是使用最廣的Python解釋器。教程的全部代碼也都在CPython下執行。
IPython
IPython是基於CPython之上的一個交互式解釋器,也就是說,IPython只是在交互方式上有所加強,可是執行Python代碼的功能和CPython是徹底同樣的。比如不少國產瀏覽器雖然外觀不一樣,但內核其實都是調用了IE。
CPython用>>>
做爲提示符,而IPython用In [
序號
]:
做爲提示符。
PyPy
PyPy是另外一個Python解釋器,它的目標是執行速度。PyPy採用JIT技術,對Python代碼進行動態編譯(注意不是解釋),因此能夠顯著提升Python代碼的執行速度。
絕大部分Python代碼均可以在PyPy下運行,可是PyPy和CPython有一些是不一樣的,這就致使相同的Python代碼在兩種解釋器下執行可能會有不一樣的結果。若是你的代碼要放到PyPy下執行,就須要瞭解PyPy和CPython的不一樣點。
Jython
Jython是運行在Java平臺上的Python解釋器,能夠直接把Python代碼編譯成Java字節碼執行。
IronPython
IronPython和Jython相似,只不過IronPython是運行在微軟.Net平臺上的Python解釋器,能夠直接把Python代碼編譯成.Net的字節碼。
Python的解釋器不少,但使用最普遍的仍是CPython。若是要和Java或.Net平臺交互,最好的辦法不是用Jython或IronPython,而是經過網絡調用來交互,確保各程序之間的獨立性。
5、Python 入門
5.一、第一句Python代碼
建立1.py文件,內容以下:
print("hello world")
執行以下:(python 文件名)
5.二、解釋器
上一步中執行 python 1.py 時,明確的指出 1.py 腳本由 python 解釋器來執行。
若是想要相似於執行shell腳本同樣執行python腳本,例: ./1.py
,那麼就須要在 hello.py 文件的頭部指定解釋器,如:
#!/usr/bin/env python
print ("hello world")
5.三、內容編碼
python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ascill)
ASCII(American Standard Code for Information Interchange,美國標準信息交換代碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其餘西歐語言,其最多隻能用 8 位來表示(一個字節),即:2**8 = 256,因此,ASCII碼最多隻能表示 256 個符號。
Bin(二進制)
|
Oct(八進制) |
Dec(十進制)
|
Hex(十六進制)
|
縮寫/字符
|
解釋
|
0000 0000
|
0
|
0
|
00
|
NUL(null)
|
空字符
|
0000 0001
|
1
|
1
|
01
|
SOH(start of headline)
|
標題開始
|
0000 0010
|
2
|
2
|
02
|
STX (start of text)
|
正文開始
|
0000 0011
|
3
|
3
|
03
|
ETX (end of text)
|
正文結束
|
0000 0100
|
4
|
4
|
04
|
EOT (end of transmission)
|
傳輸結束
|
0000 0101
|
5
|
5
|
05
|
ENQ (enquiry)
|
請求
|
0000 0110
|
6
|
6
|
06
|
ACK (acknowledge)
|
收到通知
|
0000 0111
|
7
|
7
|
07
|
BEL (bell)
|
響鈴
|
0000 1000
|
10
|
8
|
08
|
BS (backspace)
|
退格
|
0000 1001
|
11
|
9
|
09
|
HT (horizontal tab)
|
水平製表符
|
0000 1010
|
12
|
10
|
0A
|
LF (NL line feed, new line)
|
換行鍵
|
0000 1011
|
13
|
11
|
0B
|
VT (vertical tab)
|
垂直製表符
|
0000 1100
|
14
|
12
|
0C
|
FF (NP form feed, new page)
|
換頁鍵
|
0000 1101
|
15
|
13
|
0D
|
CR (carriage return)
|
回車鍵
|
0000 1110
|
16
|
14
|
0E
|
SO (shift out)
|
不用切換
|
0000 1111
|
17
|
15
|
0F
|
SI (shift in)
|
啓用切換
|
0001 0000
|
20
|
16
|
10
|
DLE (data link escape)
|
數據鏈路轉義
|
0001 0001
|
21
|
17
|
11
|
DC1 (device control 1)
|
設備控制1
|
0001 0010
|
22
|
18
|
12
|
DC2 (device control 2)
|
設備控制2
|
0001 0011
|
23
|
19
|
13
|
DC3 (device control 3)
|
設備控制3
|
0001 0100
|
24
|
20
|
14
|
DC4 (device control 4)
|
設備控制4
|
0001 0101
|
25
|
21
|
15
|
NAK (negative acknowledge)
|
拒絕接收
|
0001 0110
|
26
|
22
|
16
|
SYN (synchronous idle)
|
同步空閒
|
0001 0111
|
27
|
23
|
17
|
ETB (end of trans. block)
|
結束傳輸塊
|
0001 1000
|
30
|
24
|
18
|
CAN (cancel)
|
取消
|
0001 1001
|
31
|
25
|
19
|
EM (end of medium)
|
媒介結束
|
0001 1010
|
32
|
26
|
1A
|
SUB (substitute)
|
代替
|
0001 1011
|
33
|
27
|
1B
|
ESC (escape)
|
換碼(溢出)
|
0001 1100
|
34
|
28
|
1C
|
FS (file separator)
|
文件分隔符
|
0001 1101
|
35
|
29
|
1D
|
GS (group separator)
|
分組符
|
0001 1110
|
36
|
30
|
1E
|
RS (record separator)
|
記錄分隔符
|
0001 1111
|
37
|
31
|
1F
|
US (unit separator)
|
單元分隔符
|
0010 0000
|
40
|
32
|
20
|
(space)
|
空格
|
0010 0001
|
41
|
33
|
21
|
!
|
歎號 |
0010 0010
|
42
|
34
|
22
|
"
|
雙引號 |
0010 0011
|
43
|
35
|
23
|
#
|
井號 |
0010 0100
|
44
|
36
|
24
|
$
|
美圓符 |
0010 0101
|
45
|
37
|
25
|
%
|
百分號 |
0010 0110
|
46
|
38
|
26
|
&
|
和號 |
0010 0111
|
47
|
39
|
27
|
'
|
閉單引號 |
0010 1000
|
50
|
40
|
28
|
(
|
開括號
|
0010 1001
|
51
|
41
|
29
|
)
|
閉括號
|
0010 1010
|
52
|
42
|
2A
|
*
|
星號 |
0010 1011
|
53
|
43
|
2B
|
+
|
加號 |
0010 1100
|
54
|
44
|
2C
|
,
|
逗號 |
0010 1101
|
55
|
45
|
2D
|
-
|
減號/破折號 |
0010 1110
|
56
|
46
|
2E
|
.
|
句號 |
00101111
|
57
|
47
|
2F
|
/
|
斜槓 |
00110000
|
60
|
48
|
30
|
0
|
數字0 |
00110001
|
61
|
49
|
31
|
1
|
數字1 |
00110010
|
62
|
50
|
32
|
2
|
數字2 |
00110011
|
63
|
51
|
33
|
3
|
數字3 |
00110100
|
64
|
52
|
34
|
4
|
數字4 |
00110101
|
65
|
53
|
35
|
5
|
數字5 |
00110110
|
66
|
54
|
36
|
6
|
數字6 |
00110111
|
67
|
55
|
37
|
7
|
數字7 |
00111000
|
70
|
56
|
38
|
8
|
數字8 |
00111001
|
71
|
57
|
39
|
9
|
數字9 |
00111010
|
72
|
58
|
3A
|
:
|
冒號 |
00111011
|
73
|
59
|
3B
|
;
|
分號 |
00111100
|
74
|
60
|
3C
|
<
|
小於 |
00111101
|
75
|
61
|
3D
|
=
|
等號 |
00111110
|
76
|
62
|
3E
|
>
|
大於 |
00111111
|
77
|
63
|
3F
|
?
|
問號 |
01000000
|
100
|
64
|
40
|
@
|
電子郵件符號 |
01000001
|
101
|
65
|
41
|
A
|
大寫字母A |
01000010
|
102
|
66
|
42
|
B
|
大寫字母B |
01000011
|
103
|
67
|
43
|
C
|
大寫字母C |
01000100
|
104
|
68
|
44
|
D
|
大寫字母D |
01000101
|
105
|
69
|
45
|
E
|
大寫字母E |
01000110
|
106
|
70
|
46
|
F
|
大寫字母F |
01000111
|
107
|
71
|
47
|
G
|
大寫字母G |
01001000
|
110
|
72
|
48
|
H
|
大寫字母H |
01001001
|
111
|
73
|
49
|
I
|
大寫字母I |
01001010
|
112
|
74
|
4A
|
J
|
大寫字母J |
01001011
|
113
|
75
|
4B
|
K
|
大寫字母K |
01001100
|
114
|
76
|
4C
|
L
|
大寫字母L |
01001101
|
115
|
77
|
4D
|
M
|
大寫字母M |
01001110
|
116
|
78
|
4E
|
N
|
大寫字母N |
01001111
|
117
|
79
|
4F
|
O
|
大寫字母O |
01010000
|
120
|
80
|
50
|
P
|
大寫字母P |
01010001
|
121
|
81
|
51
|
Q
|
大寫字母Q |
01010010
|
122
|
82
|
52
|
R
|
大寫字母R |
01010011
|
123
|
83
|
53
|
S
|
大寫字母S |
01010100
|
124
|
84
|
54
|
T
|
大寫字母T |
01010101
|
125
|
85
|
55
|
U
|
大寫字母U |
01010110
|
126
|
86
|
56
|
V
|
大寫字母V |
01010111
|
127
|
87
|
57
|
W
|
大寫字母W |
01011000
|
130
|
88
|
58
|
X
|
大寫字母X |
01011001
|
131
|
89
|
59
|
Y
|
大寫字母Y |
01011010
|
132
|
90
|
5A
|
Z
|
大寫字母Z |
01011011
|
133
|
91
|
5B
|
[
|
開方括號 |
01011100
|
134
|
92
|
5C
|
\
|
反斜槓 |
01011101
|
135
|
93
|
5D
|
]
|
閉方括號 |
01011110
|
136
|
94
|
5E
|
^
|
脫字符 |
01011111
|
137
|
95
|
5F
|
_
|
下劃線 |
01100000
|
140
|
96
|
60
|
`
|
開單引號 |
01100001
|
141
|
97
|
61
|
a
|
小寫字母a |
01100010
|
142
|
98
|
62
|
b
|
小寫字母b |
01100011
|
143
|
99
|
63
|
c
|
小寫字母c |
01100100
|
144
|
100
|
64
|
d
|
小寫字母d |
01100101
|
145
|
101
|
65
|
e
|
小寫字母e |
01100110
|
146
|
102
|
66
|
f
|
小寫字母f |
01100111
|
147
|
103
|
67
|
g
|
小寫字母g |
01101000
|
150
|
104
|
68
|
h
|
小寫字母h |
01101001
|
151
|
105
|
69
|
i
|
小寫字母i |
01101010
|
152
|
106
|
6A
|
j
|
小寫字母j |
01101011
|
153
|
107
|
6B
|
k
|
小寫字母k |
01101100
|
154
|
108
|
6C
|
l
|
小寫字母l |
01101101
|
155
|
109
|
6D
|
m
|
小寫字母m |
01101110
|
156
|
110
|
6E
|
n
|
小寫字母n |
01101111
|
157
|
111
|
6F
|
o
|
小寫字母o |
01110000
|
160
|
112
|
70
|
p
|
小寫字母p |
01110001
|
161
|
113
|
71
|
q
|
小寫字母q |
01110010
|
162
|
114
|
72
|
r
|
小寫字母r |
01110011
|
163
|
115
|
73
|
s
|
小寫字母s |
01110100
|
164
|
116
|
74
|
t
|
小寫字母t |
01110101
|
165
|
117
|
75
|
u
|
小寫字母u |
01110110
|
166
|
118
|
76
|
v
|
小寫字母v |
01110111
|
167
|
119
|
77
|
w
|
小寫字母w |
01111000
|
170
|
120
|
78
|
x
|
小寫字母x |
01111001
|
171
|
121
|
79
|
y
|
小寫字母y |
01111010
|
172
|
122
|
7A
|
z
|
小寫字母z |
01111011
|
173
|
123
|
7B
|
{
|
開花括號 |
01111100
|
174
|
124
|
7C
|
|
|
垂線 |
01111101
|
175
|
125
|
7D
|
}
|
閉花括號 |
01111110
|
176
|
126
|
7E
|
~
|
波浪號 |
01111111
|
177
|
127
|
7F
|
DEL (delete)
|
顯然ASCII碼沒法將世界上的各類文字和符號所有表示,因此,就須要新出一種能夠表明全部字符和符號的編碼,即:Unicode
Unicode(統一碼、萬國碼、單一碼)是一種在計算機上使用的字符編碼。Unicode 是爲了解決傳統的字符編碼方案的侷限而產生的,它爲每種語言中的每一個字符設定了統一而且惟一的二進制編碼,規定雖有的字符和符號最少由 16 位來表示(2個字節),即:2 **16 = 65536,
注:此處說的的是最少2個字節,可能更多
UTF-8,是對Unicode編碼的壓縮和優化,他再也不使用最少使用2個字節,而是將全部的字符和符號進行分類:ascii碼中的內容用1個字節保存、歐洲的字符用2個字節保存,東亞的字符用3個字節保存...
因此,python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ascill),若是是以下代碼的話:
報錯:ascii碼沒法表示中文
#!/usr/bin/env python print ("你好,世界")
改正:應該顯示的告訴python解釋器,用什麼編碼來執行源代碼,即:
#!/usr/bin/env python # -*- coding: utf-8 -*- print ("你好,世界")
PS:python2默認編碼爲ascill,python3默認utf-8,因此python3運行的時候能夠不須要coding:utf-8
5.四、註釋
當行註釋:# 被註釋內容
多行註釋:'''被註釋內容''',或者"""被註釋內容"""
5.5 變量
變量是什麼? 變量:把程序運行的中間結果臨時的存在內存裏,以便後續的代碼調用
聲明變量:
name = "北京"
上述代碼聲明瞭一個變量,變量名爲: name,變量name的值爲:「北京」
5.5.一、變量定義的規則:
5.5.二、推薦定義方式:
#駝峯體 NameOfHost = "應用服務" NumberOfPort = 80 #下劃線 name_of_host = "應用服務" number_of_port = 80
5.6 輸入、輸出
username = input("輸入你的用戶名:") #將用戶輸入的內容賦值給username print(username) #打印輸入的內容
ps:input的出來的都是字符串
5.7 初識數據類型
整型(int) ps:python3 所有是int
字符串 (str)
布爾值(True、False)
5.8 條件語句(if and while)
5.8.1 if
用戶名密碼認證:
username = input("輸入你的用戶名:") password = input("輸入你的密碼:") if username=='crazyjump' and password == '123': print("welcome crazyjump") else: print("用戶名密碼有誤")
根據用戶名打印出用戶組名稱:
if name == "crazyjump": print "超級管理員" elif name == "joke": print "普通管理員" elif name == "db" or name == "sb": print "業務主管" else: print "普通用戶"
5.8.2 while 循環
基本循環
while 條件: # 循環體 # 若是條件爲真,那麼循環體則執行 # 若是條件爲假,那麼循環體不執行
循環停止語句
若是在循環的過程當中,由於某些緣由,你不想繼續循環了,怎麼把它停止掉呢?這就用到break 或 continue 語句
break例子:
count = 0 while count <= 100 : #只要count<=100就不斷執行下面的代碼 print(count) if count==5: break #若是count等於5就終止循環 count +=1 #每執行一次,就把count+1,由於count開始是0
執行結果:
continue例子:
count = 0 while count <= 100 : #只要count<=100就不斷執行下面的代碼 count += 1 if count>5 and count <96: continue #若是count大於5小於96即中止本次循環 print(count)
執行結果: