Python解釋器分類:
一、CPython:這個解釋器是用C語言開發的,因此叫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,而是經過網絡調用來交互,確保各程序之間的獨立性。python
Python文本編輯器:
在Python的交互式命令行寫程序,好處是一下就能獲得結果,壞處是無法保存,下次還想運行的時候,還得再敲一遍。
因此,實際開發的時候,咱們老是使用一個文本編輯器來寫代碼,寫完了,保存爲一個文件,這樣,程序就能夠反覆運行了。
推薦使用Notepad++,無償使用,有中文界面;
請注意,用哪一個都行,可是絕對不能用Word和Windows自帶的記事本。Word保存的不是純文本文件,而記事本會
自做聰明地在文件開始的地方加上幾個特殊字符(UTF-8 BOM),結果會致使程序運行出現莫名其妙的錯誤。
在Windows上不能直接運行py文件,在Mac和Linux上是能夠的,方法是在.py文件的第一行加上一個特殊的註釋:
#!/usr/bin/env python3,而後,經過chomd命令給py文件以執行權限,就能夠直接運行py文件了。
小結:用文本編輯器寫Python程序能夠保存爲後綴爲.py的文件,就能夠用Python直接運行這個程序了。git
print輸出:
用print()在括號中加上字符串,就能夠向屏幕上輸出指定的文字。
print()函數能夠接受多個字符串,用逗號「,」隔開,打印字符串時,遇到逗號會輸出一個空格,起到拼接的做用
input輸入:
input()可讓用戶輸入字符串,並存放到一個變量裏,能夠起到交互的做用
input()在括號中能夠寫一個字符串來提示用戶輸入
小結:任何計算機程序都是爲了執行一個特定的任務,有了輸入,用戶才能告訴計算機程序所需的信息,
有了輸出,程序運行後才能告訴用戶任務的結果。
輸入是Input,輸出是Output,所以,咱們把輸入輸出統稱爲Input/Output,或者簡寫爲IO。
input()和print()是在命令行下面最基本的輸入和輸出,可是,用戶也能夠經過其餘更高級的圖形界面完成輸入和輸出,
好比,在網頁上的一個文本框輸入本身的名字,點擊「肯定」後在網頁上看到輸出信息api
Python數據類型:
一、整數
二、浮點數(小數)
三、字符串(用單引號或雙引號或三引號括起來的任意文本)
轉義字符\:\n表示換行、\t表示製表符等(r''表示''內部的字符串默認不轉義)
四、布爾值(True、False)
五、列表
六、元祖
七、字典
八、集合
變量:
變量名必須是大小寫英文、數字和下劃線的組合,且不能用數字開頭
小結:Python支持多種數據類型,在計算機內部,能夠把任何數據都當作一個「對象」,
而變量就是在程序中用來指向這些數據對象的,對變量賦值就是把數據和變量給關聯起來。瀏覽器
字符編碼
ASCII編碼是1個字節(支持中文)
Unicode編碼字母中文都是2個字節
UTF-8編碼字母是1個字節,中文是3個字節安全
ord()函數把字符轉換成字符編碼
chr()函數把字符編碼轉換成字符網絡
bytes類型的數據用帶b前綴的單引號或雙引號表示,如x=b'ABC'
encode()函數能夠把str轉換爲bytes,如'ABC'.encode('utf-8')運行結果b'ABC',超過編碼範圍會報錯
decode()函數能夠把bytes轉換爲str,如b'ABC'.decode('utf-8')運行結果'ABC'
若是bytes中包含沒法解碼的字節,decode()方法會報錯
若是bytes中只有一小部分無效的字節,能夠傳入errors='ignore'忽略錯誤的字節,
如b'ABC'.decode('utf-8',errors='ignore')運行結果'ABC'app
Python文件爲防止亂碼,一般在文件開頭寫上這兩行:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
第一行註釋是爲了告訴Linux/OS X系統,這是一個Python可執行程序,Windows系統會忽略這個註釋;
第二行註釋是爲了告訴Python解釋器,按照UTF-8編碼讀取源代碼,不然,你在源代碼中寫的中文輸出可能會有亂碼。編輯器
字符串操做:
str.capitalize():將字符串的第一個字母大寫
str.count():得到字符串中某一子字符串的數目
str.find():得到字符串中某一子字符串的起始位置,無則返回-1
str.isalnum():檢測字符串是否僅包含0-9A-Za-z
str.isalpha():檢測字符串是否僅包含A-Za-z
str.isdigit():檢測字符串是否僅包含數字
str.islower():檢測字符串是否均爲小寫字母
str.isspace():檢測字符串中全部字符是否均爲空白字符
str.istitle():檢測字符串中的首字母是否爲大寫
str.isupper():檢測字符串是否均爲大寫字母
str.join():鏈接字符串
str.lower():將字符串所有轉換爲小寫
str.split():分割字符串
str.swapcase():將字符串中大寫字母轉換爲小寫或小寫字母轉換爲大寫
str.title():將字符串的首個字母轉換爲大寫
len(str):獲取字符串長度
字符串的格式化:
>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'
%運算符就是用來格式化字符串的。在字符串內部,%s表示用字符串替換,%d表示用整數替換,%f表示用浮點數替換,
%x表示用十六進制整數替換,有幾個%?佔位符,後面就跟幾個變量或者值,順序要對應好。若是隻有一個%?,括號能夠省略。
字符串裏的%是一個普通字符,能夠用%%表示一個%
另外一種格式化字符串的方法是使用字符串的format()方法,它會用傳入的參數依次替換字符串內的佔位符{}
如>>> 'Hello, {0}, 成績提高了 {1:.1f}%'.format('小明', 17.125)
'Hello, 小明, 成績提高了 17.1%
小結:當str和bytes互相轉換時,須要指定編碼,最經常使用的編碼是UTF-8。函數
列表(list):
list是一種有序的集合,能夠隨時添加和刪除其中的元素。用len()函數能夠得到list元素的個數
能夠用索引來訪問list中的每個元素,list的索引是從0開始的,當索引超出範圍時,Python會報一個IndexError錯誤
list的最後一個元素的索引能夠用len(classmates) - 1表示,還能夠用-1作索引,直接獲取最後一個元素
list的操做:
list.append(x):列表尾部追加成員x
list.count(x):返回列表中的參數x出現的次數
list.extend(L):向列表中追加另外一個列表L
list.index(x):返回參數x在列表中的序號
list.insert(index,object):向列表中指定位置(index)插入數據(object)
list.pop():刪除列表中尾部的成員並返回刪除的成員,pop(i)能夠刪除指定位置的元素,i是索引位置
list.remove(x):刪除列表中的指定成員(有多個則只刪除第一個)指定成員不存在則報錯
list.reverse():將列表中成員的順序顛倒
list.sort():將列表中成員排序(要求其成員可排序,不然報錯)
>>> alst = [1,2,3,4,5] #創建一個列表
>>> alst.append(1) #列表尾部追加元素1,alst = [1,2,3,4,5,1]
>>> alst.count(1) #統計1在列表中出現的次數,1出現2次
>>>alst.exend([2,'insert']) #列表後追加另外一個列表全部元素,alst = [1,2,3,4,5,1,2,'insert']
>>> alst.index(2) #元素2在列表中首次出現的序號,2出現的序號爲1
>>> alst.insert(3,0) #在序號3處插入元素0,alst = [1,2,3,0,4,5,1,2,'insert']
>>> alst.pop() #刪除並返回列表最後一個元素,刪除並返回'insert',alst = [1,2,3,0,4,5,1,2]
>>> alst.remove(1) #刪除列表中的元素(僅刪除第一個),alst = [2,3,0,4,5,1,2]
>>> alst.sort() #對列表元素進行排序,alst = [0,1,2,2,3,4,5]編碼
元祖(tuple):
tuple是一種有序的集合,tuple一旦初始化就不能修改。用len()函數能夠得到tuple元素的個數
由於tuple不可變,因此代碼更安全,能用tuple代替list就儘可能用tuple
元祖只有一個元素時必須加一個逗號來消除歧義:
>>> t = (1)
>>> t
1
>>> t = (1,)
>>> t
(1,)
「可變的」tuple:
>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])
表面上看,tuple的元素確實變了,但其實變的不是tuple的元素,而是list的元素。tuple一開始指向的list並
沒有改爲別的list,因此,tuple所謂的「不變」是說,tuple的每一個元素,指向永遠不變。即指向'a',就不能
改爲指向'b',指向一個list,就不能改爲指向其餘對象,但指向的這個list自己是可變的!
小結:list和tuple是Python內置的有序集合,一個可變,一個不可變。
字典(dict):
dict全稱dictionary,在其餘語言中也稱爲map,使用鍵-值(key-value)存儲,具備極快的查找速度
爲何dict查找速度這麼快?
由於dict的實現原理和查字典是同樣的。假設字典包含了1萬個漢字,咱們要查某一個字,一個辦法是把字典從第一頁日後翻,
直到找到咱們想要的字爲止,這種方法就是在list中查找元素的方法,list越大,查找越慢。
第二種方法是先在字典的索引表裏(好比部首表)查這個字對應的頁碼,而後直接翻到該頁,找到這個字。不管找哪一個字,
這種查找速度都很是快,不會隨着字典大小的增長而變慢。
key不存在,dict就會報錯,避免key不存在的錯誤的兩種方法:
一是經過in判斷key是否存在
二是經過dict提供的get()方法,若是key不存在,能夠返回None,或者本身指定的value
刪除key的方法:pop(key)
dict的key必須是不可變對象
dict內部存放的順序和key放入的順序是沒有關係的
和list比較,dict有如下幾個特色:
查找和插入的速度極快,不會隨着key的增長而變慢;
須要佔用大量的內存,內存浪費多。
而list相反:
查找和插入的時間隨着元素的增長而增長;
佔用空間小,浪費內存不多
字典操做:
dic.clear():清空字典
dic.copy():複製字典
dic.get(k,[default]):得到鍵k對應的值,不存在則返回default
dic.items():得到由鍵盒值組成的迭代器
dic.keys():得到鍵的迭代器
dic.pop(k):刪除k:v成員對
dic.values():得到值的迭代器
dic.fromkeys(iter,value):以列表或元祖中給定的鍵創建字典,默認值爲value
dic.popitem():從字典中刪除任意k:v項並返回它
dic.setdefault(k,default):若字典中存在key值爲k的,則返回其對應的值;不然,在字典中創建一個k:default字典成員
集合(set):
set是一組無序的、不可重複的集合
重複元素在set中自動被過濾
>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
{1, 2, 3}
經過add(key)方法能夠添加元素到set中,能夠重複添加,但不會有效果
>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.add(4)
>>> s
{1, 2, 3, 4}
經過remove(key)方法能夠刪除元素
>>> s.remove(4)
>>> s
{1, 2, 3}
set能夠作數學意義上的交集、並集等操做
>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
{2, 3}
>>> s1 | s2
{1, 2, 3, 4}
序列:
序列表示索引爲非負整數的有序對象的集合,包括前面所介紹的字符串、列表和元祖。
字符串是字符的序列,列表和元祖則是任意Python數據類型或對象的序列。
元祖是不可變的,字符串也是不能夠變的(修改字符串就是從新建立一個字符串)。
序列的切片方法:
abc =[0,1,2,3,4,5,6,7]
abc[:] #取所有成員數據項,abc =[0,1,2,3,4,5,6,7]
abc[0:] #取所有成員數據項,abc =[0,1,2,3,4,5,6,7]
abc[:-1] #取除最後一個成員以外的全部成員數據項,abc =[0,1,2,3,4,5,6,]
abc[2:5] #取到[2,3,4]
abc[::2] #每隔一個取一個成員,取到[0,2,4,6]
abc[0:5:2] #從0至4每隔一個取一個成員,取到[0,2,4]
abc[::-1] #從右至左取所有成員,abc =[7,6,5,4,3,2,1,0]
abc[5:0:-2] #從5至0(不包括0)從右至左每隔一個取一個成員,取到[5,3,1]
序列的內置操做:
len(s):返回s的元素數(長度)
min(s):返回s中的最小值
max(s):返回s中的最大值
sum(s):返回s中各項的和
all(s):s中全部項爲真,則返回真,不然返回假
any(s):s中有一項爲真,則返回真,不然返回假
條件判斷:
if <條件判斷1>:
<執行1>
elif <條件判斷2>:
<執行2>
elif <條件判斷3>:
<執行3>
else:
<執行4>
條件判斷從上向下匹配,當知足條件時執行對應的塊內語句,後續的elif和else都再也不執行
循環:Python的循環有兩種一種是for...in循環,依次把可迭代對象中的每一個元素迭代出來for循環的內置函數:enumerate(seq):編號迭代sorted(seq):排序迭代reversed(seq):翻轉迭代zip(seq1,seq2,...):並行迭代>>>for i,item in enumerate('abc'):>>>print('第%d個字符是:%s'%(i,item))弟0個字符是:a弟1個字符是:b弟2個字符是:c>>>for i in sorted([3,1,6]):>>>print(i)136>>>a = (1,2)>>>c = (3,4)>>>a = (5,6,7)>>>for i,j,k in zip(a,b,c):>>>print('%d:%d:%d'%(i,j,k))1:3:52:4:6並行迭代函數中序列值的長度不一致時,只遍歷到最短的序列的長度第二種循環是while循環,只要條件知足,就不斷循環,條件不知足時退出循環在循環中,break語句能夠提早退出整個循環,continue語句能夠跳過當前的此次循環,直接開始下一次循環,這兩個語句一般都必須配合if語句使用。要特別注意,不要濫用break和continue語句。break和continue會形成代碼執行邏輯分叉過多,容易出錯。大多數循環並不須要用到break和continue語句,上面的兩個例子,均可以經過改寫循環條件或者修改循環邏輯,去掉break和continue語句。有些時候,若是代碼寫得有問題,會讓程序陷入「死循環」,也就是永遠循環下去。這時能夠用Ctrl+C退出程序,或者強制結束Python進程。