python入門有很多教程,習(xí)慣上比較講究快速學(xué)習(xí)的同學(xué),可以選擇廖雪峰的網(wǎng)站和python簡明教程,小小白上半年偶爾看過一遍廖雪峰的教程,然而……沒有記住,因為當(dāng)時完全沒有實戰(zhàn),所以說學(xué)習(xí)編程還是要不斷的練習(xí)和分享,以及做筆記啊。因此本次我選擇python簡明教程并且結(jié)合廖雪峰的網(wǎng)站。
推薦安裝pycharm編輯器,用過都說好。
官網(wǎng)直接下載。解壓,打開bin文件夾,終端運行 sh pycharm.sh,出現(xiàn)安裝界面,選擇激活碼。
激活碼參考:blog.csdn.net/lhw413/article/details/72357062 。
裝在了window電腦的ubuntu虛擬機卡的喲,簡直人生無望,果斷重裝window版。
安裝配置有很多教程,不再贅述,參考:wenku.baidu.com/view/81038a877cd184254b35359b.html?
1.基本概念:
python中4種類型的數(shù),整數(shù),長整數(shù),浮點數(shù)(相當(dāng)于小數(shù)),復(fù)數(shù)(-5+4j)
字符串使用,單引號雙引號的一樣,三引號可以只是多行的字符串,并且可以在其中使用單雙引號。
想要在字符串中包含單引號除了三引號還有\(zhòng),\' 轉(zhuǎn)義符。但\在行尾表示字符串接下一行。
自然字符串:給字符串的前綴加R或者r,特殊字符串失去意義,例如正則表達式可以使用中這種形式,否則轉(zhuǎn)義符太多。
Unicode字符串:字符串前加上前綴u或者U,簡單說就是給字符一個唯一的存儲數(shù)字,跨平臺,跨語言通用。
字符串按照字面意義相鄰放著,自動被Python相連。
變量:y=x+1 中的x,y
標(biāo)識符:字母,下劃線,數(shù)字,注意大小寫。
對象:在python中任何東西都可以稱為對象。
縮進:同一層次的語句必須有相同的縮進。每一組稱之為塊。
list 有序的集合可以隨時添加刪除值【】:
classmates = ['Michael','Bob','Tracy'] ,len()獲得list元素的長度
.append 在末尾添加元素;.insert (1.值) 在1位插入值;.pop(i)刪除list值
tuple : 元組,一旦初始化不能修改。注:只有一個字符的元組,在后面加,以免歧義。(1,)
dict: 快速查找存儲,但是空間消耗大。{} 通過key直接拿到value. In可以判斷key知否存在,.pop刪除key
set:無序無意義的集合,提供一個list作為輸入集合 顯示不證明有序,.remove刪除key
不變對象:調(diào)用自身的任何對象方法,都不會改變對象自身 的內(nèi)容,相反這些對象會創(chuàng)建新的對象并返回,這也就保證了不可變對象是不可變。
2.控制流(語法)
共三種if,for,while
if
if - else
if (條件判斷):
? ? print1
elif (條件判斷):
? ? print2
else:
? ? print2
從上到下依次執(zhí)行。第一個判斷條件為true,余下忽略。
循環(huán)語句
for - in循環(huán)
for x in…… 就是把每個元素代入變量x,然后執(zhí)行縮進的塊的語句。
生出整數(shù)序列:range(5)從0開始小于5的整數(shù),提供第三個數(shù)為步長,比如(1,5,2)再用list()轉(zhuǎn)換為list,輸出為1,3
例如:
sum =0
for x in range(101):
????sum = sum + x
print (sum)
while
條件滿足,不斷循環(huán),條件不滿足,退出循環(huán)。
sum =0
n =99
while n >0:
????sum = sum + n
????n = n-2
print (sum)
break
用來終止循環(huán)語句。無論結(jié)果是否為true,或者序列有沒有完全被遞歸。也就是說從for過著while循環(huán)中終止,任何對應(yīng)的循環(huán)的else塊將不執(zhí)行。
while True:
????s = raw_input ('Enter something:') ### raw_input 將輸入的都表示為字符串。
????if s == 'quit':
????????break ? ? ### 程序終止 ,輸出done
????print 'length of the string is',len(s) ###否則輸出s的字符串長度。
print 'Done'
continue
跳過當(dāng)前的循環(huán)塊的剩余語句,繼續(xù)進行下一步循環(huán)。
while True:
????s = raw_input ('Enter something:')
????if s == 'quit':
????????break
????if len(s) < 3:
????????continue
????print 'Input is of sufficient length'
print 'Done'
盡量避免continue 和 break ,容易進入死循環(huán)。
3.函數(shù)
調(diào)用函數(shù)
定義函數(shù)
def 函數(shù)名(參數(shù)):
? ? 函數(shù)內(nèi)容
如:def hello ():
? ? ? ? ? ? ?? print 'hello world'????????
函數(shù)形參?
函數(shù)中的參數(shù)稱之為形參,提供的賦值稱之為實參。
函數(shù)返還值:從被調(diào)函數(shù)返還到主函數(shù),并且返回一個計算的值,也就是說主函數(shù)調(diào)用這個函數(shù)的時候得到這個返還值。
當(dāng)你在函數(shù)定義變量的是后,它與函數(shù)外具有相同名稱的變量沒有關(guān)系,函數(shù)的變量名對于函數(shù)來說是局部的,這就是變量的作用域、
global 語句
定義在函數(shù)外的變量賦值。使用該語句可以清楚的表明變量是在外面的塊定義。也就是他代表賦值是全局的。
默認(rèn)參數(shù)值
函數(shù)定義的形參后面跟上= 賦值,函數(shù)的形參就有了默認(rèn)的參數(shù)值,不可變。
只有形參表末尾的函數(shù)可以有默認(rèn)參數(shù)值,也就是說聲明函數(shù)的形參的時候,不能先聲明有默認(rèn)值的形參再聲明沒有默認(rèn)值的形參、也就是必選參數(shù)在前,默認(rèn)參數(shù)在后,當(dāng)函數(shù)有多個參數(shù)的時候,變化大的在前,變化小的在后,降低難度。
有多個默認(rèn)參數(shù)的時候,可以按照順序提供默認(rèn)參數(shù),也可以不按照順序直接寫參數(shù)值,表示這個參數(shù)用傳進去的值。
可變參數(shù):參數(shù)加*,表示參數(shù)作為可變參數(shù),允許添加0到多個參數(shù),函數(shù)調(diào)用時自動組成tuple.
也可以在list前加,表示list中的元素作為可變元素添加。
def calc(*numbers):
關(guān)鍵參數(shù)
允許傳入0到多個含有參數(shù)名的參數(shù),自動組成dict。通過命名給參數(shù)賦值,稱之為關(guān)鍵函數(shù)。不在乎位置。
**kw kw作為關(guān)鍵參數(shù)
>>> extra = {'city': 'Beijing', 'job': 'Engineer'} ###先組建一個dict
>>> person('Jack', 24, **extra)###作為關(guān)鍵參數(shù)填進去
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
命名關(guān)鍵參數(shù):
如果要限制關(guān)鍵字參數(shù)的名字,就可以用命名關(guān)鍵字參數(shù),例如,只接收city和job作為關(guān)鍵字參數(shù)。這種方式定義的函數(shù)如下:
def person(name, age, *, city, job):
print(name, age, city, job)
命名關(guān)鍵字參數(shù)需要一個特殊分隔符*,*后面的參數(shù)被視為命名關(guān)鍵字參數(shù)。
調(diào)用方式如下:
>>> person('Jack', 24, city='Beijing', job='Engineer')
Jack 24 Beijing Engineer
如果函數(shù)定義中已經(jīng)有了一個可變參數(shù),后面跟著的命名關(guān)鍵字參數(shù)就不再需要一個特殊分隔符*了:
def person(name, age, *args, city, job):
print(name, age, args, city, job)
參數(shù)組合
參數(shù)定義的順序必須是:必選參數(shù)、默認(rèn)參數(shù)、可變參數(shù)、命名關(guān)鍵字參數(shù)和關(guān)鍵字參數(shù)。
遞歸函數(shù)
如果一個函數(shù)在內(nèi)部調(diào)用自身本身,這個函數(shù)就是遞歸函數(shù)。
函數(shù)調(diào)用是通過棧(stack)這種數(shù)據(jù)結(jié)構(gòu)實現(xiàn)的,每當(dāng)進入一個函數(shù)調(diào)用,棧就會加一層棧幀,每當(dāng)函數(shù)返回,棧就會減一層棧幀。由于棧的大小不是無限的,所以,遞歸調(diào)用的次數(shù)過多,會導(dǎo)致棧溢出。解決方法尾遞歸。
4.高級特性
切片
L[0:3]表示,從索引0開始取,直到索引3為止,但不包括索引3。即索引0,1,2,正好是3個元素,也可以倒數(shù)切片,倒數(shù)第一個元素的索引是-1。可以用于字符串。
前10個數(shù),每兩個取一個,
>>> L[:10:2]
[0, 2, 4, 6, 8]
所有數(shù),每5個取一個:
>>> L[::5]
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
迭代
在Python中,迭代是通過for ... in來完成,不僅可以用在list或tuple上,還可以作用在其他可迭代對象上。
默認(rèn)情況下,dict迭代的是key。如果要迭代value,for value in d.values(),如果要同時迭代key和value,可以用for k, v in d.items()。也可以迭代字符串。
如何判斷一個對象是可迭代對象呢?方法是通過collections模塊的Iterable類型判斷:
>>> from collections import Iterable
>>> isinstance('abc', Iterable) # str是否可迭代
True
>>> isinstance([1,2,3], Iterable) # list是否可迭代
True
>>> isinstance(123, Iterable) # 整數(shù)是否可迭代
False
在for循環(huán)中同時迭代索引和元素本身:
for i, value in enumerate(['A', 'B', 'C']):
...? ? print(i, value)
列表生成式
創(chuàng)建list
[1x1, 2x2, 3x3, ..., 10x10]:
>>> [x * x for x in range(1, 11)];>>> [x * x for x in range(1, 11) if x % 2 == 0]###偶數(shù)平方
寫列表生成式時,把要生成的元素x * x放到前面,后面跟for循環(huán),就可以把list創(chuàng)建出來。
兩層循環(huán),可以生成全排列:
>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
列表生成式也可以使用兩個變量來生成list:
>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>> [k + '=' + v for k, v in d.items()]
['y=B', 'x=A', 'z=C']
一個list中所有的字符串變成小寫:
>>> L = ['Hello', 'World', 'IBM', 'Apple']
>>> [s.lower() for s in L]
['hello', 'world', 'ibm', 'apple']
生成器 generator
為了節(jié)省空間,一遍循環(huán)一邊計算。
只要把一個列表生成式的[]改成(),就創(chuàng)建了一個generator;如果一個函數(shù)定義中包含yield關(guān)鍵字,是一個generator
for循環(huán)可迭代。
變成generator的函數(shù),遇到y(tǒng)ield語句返回,再次執(zhí)行時從上次返回的yield語句處繼續(xù)執(zhí)行。
迭代器:
可以直接作用于for循環(huán)的對象統(tǒng)稱為可迭代對象:Iterable
可以被next()函數(shù)調(diào)用并不斷返回下一個值的對象稱為迭代器:Iterator。
>>> from collections import Iterator
>>> isinstance((x for x in range(10)), Iterator)
生成器都是Iterator對象,但list、dict、str雖然是Iterable,卻不是Iterator。
把list、dict、str等Iterable變成Iterator可以使用iter()函數(shù),
>>> isinstance(iter([ ]), Iterator):
True
5.函數(shù)式編程、
高階函數(shù)
函數(shù)本身可以賦值給變量,調(diào)用變量可以調(diào)用函數(shù)。所以一個函數(shù)可以接受另一個函數(shù)作為參數(shù),這就是高階函數(shù)。
map函數(shù)
接收兩個參數(shù),一個是函數(shù),一個是迭代對象。例如:
>>> list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
['1', '2', '3', '4', '5', '6', '7', '8', '9']
reduce函數(shù)
與map函數(shù)的區(qū)別:
①從參數(shù)方面來講:
map()函數(shù):
map()包含兩個參數(shù),第一個是參數(shù)是一個函數(shù),第二個是序列(列表或元組)。其中,函數(shù)(即map的第一個參數(shù)位置的函數(shù))可以接收一個或多個參數(shù)。
reduce()函數(shù):
reduce() 第一個參數(shù)是函數(shù),第二個是 序列(列表或元組)。但是,其函數(shù)必須接收兩個參數(shù)。
②從對傳進去的數(shù)值作用來講:
map()是將傳入的函數(shù)依次作到序列的每個元素,每個元素都是獨自被函數(shù)“作用”一次;(請看下面的栗子)
reduce()是將傳人的函數(shù)作用在序列的第一個元素得到結(jié)果后,把這個結(jié)果繼續(xù)與下一個元素作用(累積計算),
最終結(jié)果是所有的元素相互作用的結(jié)果。
filter函數(shù)
用于過濾序列,和map()類似,filter()也接收一個函數(shù)和一個序列。和map()不同的是,filter()把傳入的函數(shù)依次作用于每個元素,然后根據(jù)返回值是True還是False決定保留還是丟棄該元素。
sorted函數(shù)
排序算法
可以進行數(shù)字與list排序,關(guān)鍵在于建立映射。
返還函數(shù)
把函數(shù)作為結(jié)果值返還。
6.模塊
模塊是包含了所有你定義的函數(shù)和變量的文件,為了在其他程序中重用模塊,py為擴展名。
7.面向?qū)ο蟮木幊?/h4>
而面向?qū)ο蟮某绦蛟O(shè)計把計算機程序視為一組對象的集合,而每個對象都可以接收其他對象發(fā)過來的消息,并處理這些消息。