教程地址:python入門 - 慕課網(wǎng)
安裝python 執(zhí)行腳本
安裝程序筐高,并將python.exe加入系統(tǒng)環(huán)境變量列另。
記得配置完環(huán)境變量后要重新打開一個(gè)cmd,不然不起作用啊镊叁,好氣
配置下sublime可以直接執(zhí)行python腳本吧洽洁。
Sublime text工具-編譯系統(tǒng)-自動(dòng)就好了ctrl+b執(zhí)行腳本
數(shù)據(jù)類型
1.整數(shù)
? ? a)200,-10偷霉,0
? ? b)二進(jìn)制(1010)迄委,八進(jìn)制(0777),十進(jìn)制(444)类少,十六進(jìn)制(0x45af)這些叙身。
? ? c)八進(jìn)制表示數(shù)字前必須加上0(零),十六進(jìn)制表示數(shù)字前必須加上0x.
2.浮點(diǎn)數(shù)
? ? a)0.7 ?-0.56 ?0.0004
? ? b)科學(xué)計(jì)數(shù)法1.23*10^9 => 1.23e9 ?0.000012 => 1.2e-5
3.字符串
? ? a)‘a(chǎn)bc’ ? ? ?“abc”
? ? b)‘a(chǎn)b”c’ ? ? ? “ab’c” ? ? ?“ab\”c”(\為轉(zhuǎn)義符)
4.布爾值
? ? a)Ture (真)
? ? b)False (假)
? ? c)布爾值可以用and硫狞、or和not運(yùn)算曲梗。其實(shí)就是與或非
5.空值
? ? a)空值是Python里一個(gè)特殊的值,用None表示妓忍。None不能理解為0,因?yàn)?是有意義的愧旦,而None是一個(gè)特殊的空值世剖。
? ? b)print(0==None) #False
Print語句
在3.6中print語句要使用()包起來,而2.7則不需要笤虫。
都可以使用,(逗號(hào))分隔旁瘫,打印多個(gè)結(jié)果
print('100 + 200 =', 100 + 200)
注釋#
Python的注釋以#開頭,后面的文字直到行尾都算注釋
#我是一行注釋....
變量
Python的聲明變量與php聲明變量一樣簡單琼蚯,都不用指定變量的數(shù)據(jù)類型酬凳,而且不需要php的$符號(hào)
和大多數(shù)語言一樣,變量名由字母數(shù)字下劃線組成遭庶,且不能以數(shù)字開頭
例子
a = 'ABC'
b = a ??#這里的賦值是值傳遞
a = 'XYZ'
print (b,'\n') #ABC
對(duì)比php中則存在通過加&符引用傳遞
raw字符串
使用r開頭宁仔,表示這是一個(gè)raw字符串,里面的字符不需要轉(zhuǎn)義
r'\(~_~)/ \(~_~)/'
多行字符串‘’’...’’’?
'''Line 1
Line 2
Line 3'''
python中的整形和浮點(diǎn)型
在2.7版本中峦睡,整數(shù)之間相除為整數(shù)翎苫,不會(huì)保留小數(shù)點(diǎn),只取整榨了。11/4 = 2
在我使用的3.6版本中就不存在這個(gè)問題煎谍。11/4 = 2.75
python中的布爾類型
Python把0、空字符串''和None看成False龙屉,其他數(shù)值和非空字符串都看成True
Python中的and,or,not就是對(duì)應(yīng)php中的&&,||,!呐粘,且存在短路原則。
a = True
print(a and 'a=T' or 'a=F') ??#a=T
列表list
List是一種有序的集合转捕,使用[]作岖,將元素括起來,沒有元素就表示一個(gè)空list
創(chuàng)建list :L = ['Adam', 'Lisa', 'Bart']
與大多數(shù)語言一樣五芝,列表list的索引是從0開始的鳍咱,可以通過 變量[索引] 來訪問list中的元素
通過索引訪問list : ?print(L[1]) ? #Lisa
訪問不存在的索引就會(huì)報(bào)錯(cuò)
倒序訪問list : ?print(L[-1]) ?#Bart
倒序訪問list : ?print(L[-2]) ?#Lisa
一樣越界會(huì)報(bào)錯(cuò): ?print(L[-4]) ?#報(bào)錯(cuò)
往list列表添加新元素
append()方法 ?將新元素追加到list末尾
L.append('Paul')
print(L) ? #['Adam', 'Lisa', 'Bart', 'Paul']
Insert()方法,它接受兩個(gè)參數(shù)与柑,第一個(gè)參數(shù)是索引號(hào)谤辜,第二個(gè)參數(shù)是待添加的新元素
當(dāng)參數(shù)1索引存在的時(shí)候蓄坏,新元素被插入到指定位置,且這個(gè)索引后的元素丑念,索引向后推一位涡戳。
當(dāng)參數(shù)1索引不存在的時(shí)候,新元素就是追加在list末尾脯倚,自動(dòng)分配索引
同樣的渔彰,也接受負(fù)數(shù)作為倒序的索引
L.insert(100,'Paul')
L.insert(4,'test')
L.insert(-4,'test111')
print(L) ?#['Adam', 'test111', 'Lisa', 'Bart', 'Paul', 'test']
從list列表刪除元素
使用pop()方法,當(dāng)不給pop方法傳遞索引時(shí)推正,默認(rèn)刪除list中的最后一個(gè)元素(其實(shí)就是默認(rèn)-1)
傳入索引恍涂,則根據(jù)索引查找,并刪除
pop()方法會(huì)返回被刪除掉的元素
L = ['Adam', 'Lisa', 'Bart', 'Paul']
print(L.pop()) #Paul
print(L) #['Adam', 'Lisa', 'Bart']
print(L.pop(0)) #Adam
print(L) #['Lisa', 'Bart']
print(L.pop(-2)) #Lisa
print(L) #['Bart']
索引越界會(huì)直接報(bào)錯(cuò)植榕。pop()刪除空list里面元素的時(shí)候同樣會(huì)報(bào)錯(cuò)
替換list中的元素
其實(shí)就是給指定的索引賦值再沧,越界報(bào)錯(cuò),可以使用負(fù)數(shù)索引
L[-1] = 'Paul'
元組tuple
tuple是另一種有序的列表,tuple使用()把元素括起來尊残。tuple 和 list 非常類似炒瘸,但是,tuple一旦創(chuàng)建完畢寝衫,就不能修改了顷扩。
創(chuàng)建tuple :t=('Adam', 'Lisa', 'Bart')
Tuple與list一樣,可以通過索引訪問:
t = ('Adam', 'Lisa', 'Bart')
print(t) #('Adam', 'Lisa', 'Bart')
print(t[1]) #Lisa
print(t[-3]) #Adam
創(chuàng)建單個(gè)元素的tuple
因?yàn)?)既可以表示tuple慰毅,也可以表示運(yùn)算時(shí)的優(yōu)先級(jí)隘截,所以類似這樣的時(shí)候存在歧義。
t = ('string') ?#string
t = (10086) #10086
正是因?yàn)橛?)定義單元素的tuple有歧義汹胃,所以 Python 規(guī)定技俐,單元素 tuple 要多加一個(gè)逗號(hào)“,”,這樣就避免了歧義:
t = ('string',)
print(t) #('string',)
“可變”的tuple
t = ('a', 'b', ['A', 'B'])
L = t[2]
L[0] = 'X'
L[1] = 'Y'
print(t) #('a', 'b', ['X', 'Y'])
指向不變:tuple一開始指向的list并沒有改成別的list统台,所以雕擂,tuple所謂的“不變”是說,tuple的每個(gè)元素贱勃,指向永遠(yuǎn)不變井赌。即指向'a',就不能改成指向'b'贵扰,指向一個(gè)list仇穗,就不能改成指向其他對(duì)象,但指向的這個(gè)list本身是可變的戚绕!
Python代碼的縮進(jìn)
具有相同縮進(jìn)的連續(xù)代碼行被視為代碼塊纹坐。沒有像php那種{}
Python的習(xí)慣寫法:4個(gè)空格,不要使用Tab舞丛,更不要混合Tab和空格
If語句
if條件:
? ? 代碼塊
If-else
if條件:
? ? 代碼塊
else:
? ? 代碼塊
If-elif-else
if條件:
? ? 代碼塊
elif :
? ? 代碼塊
else :
? ? 代碼塊
#這個(gè)elif就是指else if的意思耘子。
總體上if else這些和其他語言一樣果漾,就是注意沒有{}括號(hào),而已相同的連續(xù)縮進(jìn)為代碼行為代碼庫谷誓,以:開始代碼庫標(biāo)識(shí)绒障,還有else if簡寫為elif就是了。
for循環(huán)
list或tuple可以表示一個(gè)有序集合捍歪』瑁可以使用for循環(huán)依次訪問一個(gè)其中的每一個(gè)元素
L = ('Adam', 'Lisa', 'Bart')
for name in L:
? ? print(name)
L = [75, 92, 59, 68]
sum = 0.0
for score in L:
? ? sum += score
print(sum / 4)
while循環(huán)
和其他主流語言一樣,都是當(dāng)滿足條件糙臼,執(zhí)行while代碼塊庐镐。否則跳槽循環(huán)。
N = 10
x = 0
while x < N:
? ? print(x)
? ? x = x + 1
用 for 循環(huán)或者 while 循環(huán)時(shí)变逃,如果要在循環(huán)體內(nèi)直接退出循環(huán)必逆,可以使用 break 語句。
在循環(huán)過程中韧献,可以用 break 退出當(dāng)前循環(huán),還可以用 continue 跳過后續(xù)循環(huán)代碼研叫,繼續(xù)下一次循環(huán)锤窑。
嵌套循環(huán)
在循環(huán)內(nèi)部,嵌套循環(huán)嚷炉。這種開發(fā)過程中是很常見的渊啰。
for x in [1,2,3,4,5,6,7,8,9]:
? ? for y in [0,1,2,3,4,5,6,7,8,9]:
? ? ? ? if x<y:
? ? ? ? ? ? print(x*10 + y)
字典dict
Dict是key-value的鍵值對(duì)集合,使用大括號(hào){}包裹申屹。
創(chuàng)建一個(gè)dict字典绘证,賦值給變量d:
d = {
? ? 'Adam': 95,
? ? 'Lisa': 85,
? ? 'Bart': 59
}
定義的時(shí)候,重復(fù)的key會(huì)取代上一個(gè)哗讥。還有關(guān)于這個(gè)key可以是整形嚷那,浮點(diǎn)型,字符串都行的杆煞。
d = {
? ? 'Adam': 95,
? ? 'Lisa': 85,
? ? 'Bart': 59,
? ? 1.5:50,
? ? 1.5:51,
? ? '<"\'>':11
}
print(d) #{'Adam': 95, 'Lisa': 85, 'Bart': 59, 1.5: 51, '<"\'>': 11}
與list和tuple不同的是魏宽,dict通過key來訪問其中的元素。
d['Adam'] ?#95
當(dāng)key存在時(shí)决乎,返回其對(duì)應(yīng)的value队询,否則報(bào)keError錯(cuò)誤
要避免KeyError 發(fā)生,有兩個(gè)辦法:
一是先判斷一下key 是否存在构诚,用 in 操作符:
if 'Paul' in d:
? ? print(d['Paul'])
二是使用dict本身提供的一個(gè) get 方法蚌斩,在Key不存在的時(shí)候,返回None:
print(d.get('Bart')) #59
print(d.get('Paul')) #None
len()函數(shù)可以計(jì)算任意集合的大小范嘱,包括list,tuple,dict,字符串也行
len([1,2,3]) ? #3
字典dict的特點(diǎn)
dict是無序的送膳。
dict中做為key的元素是不可變的员魏,其中字符串,整數(shù)肠缨,浮點(diǎn)數(shù)都是不可變的逆趋,list不行,每個(gè)元素都是不可變對(duì)象的tuple也是不可變的晒奕,可以作為key闻书。
{('a','b'):1} ??#可以
{('a','b',['c']):1} #不行,存在list
更新字典dict
dict是可變的脑慧,可以隨時(shí)往dict中添加新的key-value
使用dict[key]=value的語法魄眉,存在則替換,不存在則添加闷袒。
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59}
d['a']='dada';
d['Bart']=100;
print(d) ?# {'Adam': 95, 'Lisa': 85, 'Bart': 100, 'a': 'dada'}
遍歷字典dict
使用for in遍歷
for key in d:
? ? print(key,':',d[key])
#拿到key之后使用dict[key]取其對(duì)應(yīng)的value
set數(shù)據(jù)類型
dict的作用是建立一組 key 和一組 value 的映射關(guān)系坑律,dict的key是不能重復(fù)的。
只想要dict 的 key囊骤,不關(guān)心 key 對(duì)應(yīng)的 value晃择,目的就是保證這個(gè)集合的元素不會(huì)重復(fù),set就是符合這種需求也物。
set 持有一系列元素宫屠,這一點(diǎn)和 list 很像,但是set的元素沒有重復(fù)滑蚯,而且是無序的浪蹂,這點(diǎn)和 dict 的 key很像。
創(chuàng)建set方法:調(diào)用set()并傳入一個(gè)list,list的元素將作為set的元素
s = set(['A', 'B', 'C'])
print(s) ?#{'A', 'C', 'B'} 元素的順序和初始傳入的不同告材,set是無序的坤次,隨機(jī)的
也可以直接這樣:
s={'A', 'C', 'B'}
Set不能包含重復(fù)的元素,傳入的重復(fù)元素會(huì)被自動(dòng)去重斥赋。
訪問set
由于set存儲(chǔ)的是無序集合缰猴,所以我們沒法通過索引來訪問。
訪問set中的某個(gè)元素實(shí)際上就是判斷一個(gè)元素是否在set中疤剑。
使用in操作符判斷
s={'A', 'C', 'B','B'}
print('A' in s) ? #True
print('a' in s) ? #False
更新set
使用add()方法添加元素洛波,依然是自動(dòng)去重
使用remove(key)去除key元素,key不存在時(shí)會(huì)報(bào)錯(cuò)骚露。
s={'A', 'C', 'B'}
s.add('D')
s.add('A')
s.remove('C')
print(s) #{'A', 'D', 'B'}
函數(shù)
在Python中蹬挤,定義一個(gè)函數(shù)要使用def語句,依次寫出函數(shù)名棘幸、括號(hào)焰扳、括號(hào)中的參數(shù)和冒號(hào):,然后,在縮進(jìn)塊中編寫函數(shù)體吨悍,函數(shù)的返回值用return語句返回扫茅。
return None可以簡寫為return
def my_sum(x,y):
? ? return x+y
print(my_sum(3,5)) ?#8
函數(shù)返回多值(實(shí)際上就是返回一個(gè)tuple)
def my_sum(x,y):
? ? return x,y,x+y
print(my_sum(3,5)) ?#(3, 5, 8)
python之遞歸函數(shù)
在函數(shù)內(nèi)部,可以調(diào)用其他函數(shù)育瓜。如果一個(gè)函數(shù)在內(nèi)部調(diào)用自身本身葫隙,這個(gè)函數(shù)就是遞歸函數(shù)。
要找到規(guī)律躏仇,然后注意結(jié)束遞歸的條件恋脚。
def my_def(n):
? ? n = int(n);
? ? if n<=0:
? ? ? ? return
? ? if n==1:
? ? ? ? return 1
? ? else:
? ? ? ? return n*my_def(n-1)
print(my_def(3)) # 3*2*1 = 6
使用遞歸函數(shù)需要注意防止棧溢出。在計(jì)算機(jī)中焰手,函數(shù)調(diào)用是通過棧(stack)這種數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)的糟描,每當(dāng)進(jìn)入一個(gè)函數(shù)調(diào)用,棧就會(huì)加一層棧幀书妻,每當(dāng)函數(shù)返回船响,棧就會(huì)減一層棧幀。由于棧的大小不是無限的躲履,所以见间,遞歸調(diào)用的次數(shù)過多,會(huì)導(dǎo)致棧溢出工猜。
函數(shù)的默認(rèn)參數(shù)
函數(shù)的參數(shù)可以設(shè)置默認(rèn)參數(shù)米诉,放在參數(shù)列表后面。比如def hanshu(x,y=2,z=3)這種
與php中一樣域慷。
Python中的int()函數(shù)的第二個(gè)參數(shù)荒辕,就是參數(shù)一對(duì)應(yīng)的進(jìn)制汗销,默認(rèn)10進(jìn)制犹褒。
不合法會(huì)報(bào)錯(cuò),最終返回十進(jìn)制整數(shù)弛针。
print(int('123'))#123
print(int('123',8)) #83
print(int('1010',2)) #10
可變參數(shù)
如果想讓一個(gè)函數(shù)能接受任意個(gè)參數(shù)叠骑,我們就可以定義一個(gè)可變參數(shù):
Python解釋器會(huì)把傳入的一組參數(shù)組裝成一個(gè)tuple傳遞給可變參數(shù),因此削茁,在函數(shù)內(nèi)部宙枷,直接把變量args看成一個(gè)tuple就好了。
Args只是個(gè)變量名茧跋,你愛用a,b,c什么都行慰丛。
對(duì)list和tuple進(jìn)行切片
切片Slice操作符。以list為例瘾杭,tuple也是一樣的诅病,就是切片完的返回值為元組tuple就是了
L = ['Adam', 'Lisa', 'Bart', 'Paul']
print(L[0:3]) ? #切片,從索引0開始切3個(gè)元素['Adam', 'Lisa', 'Bart']
print(L[:2]) ? # ['Adam', 'Lisa']如果第一個(gè)索引是0,可以省略
print(L[:]) ? # ['Adam', 'Lisa', 'Bart', 'Paul']只用一個(gè):贤笆,表示從頭到尾
print(L[::2]) ? # ['Adam', 'Bart']還可以給第三個(gè)參數(shù)蝇棉,表示每N個(gè)取第一個(gè)
調(diào)用方法:變量名[參數(shù)]
可填3個(gè)參數(shù),參數(shù)使用:間隔芥永。
我的理解:第一個(gè)起始索引默認(rèn)0篡殷,第二個(gè)切分的個(gè)數(shù)默認(rèn)為len(變量)就是切到末尾,第三個(gè)參數(shù)默認(rèn)為1埋涧。至少需要一個(gè):
倒序切片板辽,切片同樣支持負(fù)數(shù)索引:
print(L[-3:2]) ? # ['Lisa']
print(L[-4:-1:3]) ? # ['Adam']
記住倒數(shù)第一個(gè)元素的索引是-1。
切片包含起始索引飞袋,不包含結(jié)束索引戳气。
字符串也可以切片:字符串的索引同樣從0開始,且支持負(fù)索引巧鸭。
然后切片只能正著切瓶您,不能逆著切。
print('ABCDEFG'[-3:-1]) #EF
print('ABCDEFG'[-3:2]) #空 因?yàn)樗饕?的位置比索引-3的位置靠前纲仍。
print('ABCDEFG'[-3:4]) #空 位置重疊也是不行的呀袱。
Python中的集合
集合是指包含一組元素的數(shù)據(jù)結(jié)構(gòu),目前接觸到的包括:
1.有序集合:list郑叠,tuple夜赵,字符串;
2.無序集合:set
3.無序集合并且具有key-value 對(duì):dict
索引迭代
Python中乡革,迭代永遠(yuǎn)是取出元素本身寇僧,而非元素的索引。
對(duì)于有序集合沸版,元素確實(shí)是有索引的嘁傀。有的時(shí)候,我們確實(shí)想在for 循環(huán)中拿到索引视粮。
方法是使用enumerate() 函數(shù):enumerate(枚舉)
L = ['Adam', 'Lisa', 'Bart', 'Paul']
for index, name in enumerate(L):
? ? print(index, '-', name)
#index即為索引细办,name為其值
生成列表
使用range()函數(shù)
>>> range(1, 11)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Python還有一種特有的語法糖:列表生成式
例:生成[1x1, 2x2, 3x3, ..., 10x10]的列表
[x * x ?for ?x ?in ?range(1, 11)]
多寫寫應(yīng)該就熟悉了。
range(1, 100, 2) 可以生成list [1, 3, 5, 7, 9,...,99]
格式化字符串
字符串可以通過%進(jìn)行格式化蕾殴,用指定的參數(shù)替代%s笑撞。字符串的join()方法可以把一個(gè)list 拼接成一個(gè)字符串。
def generate_tr(name, score):
? ? return '我是:%s钓觉,我考了%s分' % (name, score)
print(generate_tr('菜鳥',98)) #我是:菜鳥茴肥,我考了98分
列表生成式中還可以加入條件過濾
在for 循環(huán)后面還可以加上 if 判斷
>>>[x * x ?for ?x ?in ?range(1, 11) ?if ?x ?% 2 == 0]
[4, 16, 36, 64, 100]
多層表達(dá)式
for循環(huán)可以嵌套,因此荡灾,在列表生成式中瓤狐,也可以用多層for循環(huán)來生成列表堕虹。
對(duì)于字符串'ABC' 和 '123',可以使用兩層循環(huán)芬首,生成全排列:
>>> [m + n ?for ?m ?in ?'ABC' ? for ?n ?in ? '123']
['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']
翻譯成循環(huán)代碼就像下面這樣:
L = []
for m in 'ABC':
? ? for n in '123':
? ? ? ? L.append(m + n)
python中列表生成式使用的經(jīng)典例子
一行代碼實(shí)現(xiàn)乘法口訣表:
print ('\n'.join([' '.join(['%s*%s=%-2s' % (y,x,x*y) for y in range(1,x+1)]) for x in range(1,10)]))