生信零基礎(chǔ)學(xué)習(xí)筆記(三)python基礎(chǔ)

python入門有很多教程,習(xí)慣上比較講究快速學(xué)習(xí)的同學(xué),可以選擇廖雪峰的網(wǎng)站和python簡(jiǎn)明教程,小小白上半年偶爾看過一遍廖雪峰的教程,然而……沒有記住,因?yàn)楫?dāng)時(shí)完全沒有實(shí)戰(zhàn),所以說學(xué)習(xí)編程還是要不斷的練習(xí)和分享,以及做筆記啊。因此本次我選擇python簡(jiǎn)明教程并且結(jié)合廖雪峰的網(wǎng)站。


推薦安裝pycharm編輯器,用過都說好。

官網(wǎng)直接下載。解壓,打開bin文件夾,終端運(yùn)行 sh pycharm.sh,出現(xiàn)安裝界面,選擇激活碼。

激活碼參考:blog.csdn.net/lhw413/article/details/72357062

裝在了window電腦的ubuntu虛擬機(jī)卡的喲,簡(jiǎn)直人生無望,果斷重裝window版。

安裝配置有很多教程,不再贅述,參考:wenku.baidu.com/view/81038a877cd184254b35359b.html?


1.基本概念:

python中4種類型的數(shù),整數(shù),長(zhǎng)整數(shù),浮點(diǎn)數(shù)(相當(dāng)于小數(shù)),復(fù)數(shù)(-5+4j)

字符串使用,單引號(hào)雙引號(hào)的一樣,三引號(hào)可以只是多行的字符串,并且可以在其中使用單雙引號(hào)。

想要在字符串中包含單引號(hào)除了三引號(hào)還有\(zhòng),\' 轉(zhuǎn)義符。但\在行尾表示字符串接下一行。

自然字符串:給字符串的前綴加R或者r,特殊字符串失去意義,例如正則表達(dá)式可以使用中這種形式,否則轉(zhuǎn)義符太多。

Unicode字符串:字符串前加上前綴u或者U,簡(jiǎn)單說就是給字符一個(gè)唯一的存儲(chǔ)數(shù)字,跨平臺(tái),跨語言通用。

字符串按照字面意義相鄰放著,自動(dòng)被Python相連。

變量:y=x+1 中的x,y

標(biāo)識(shí)符:字母,下劃線,數(shù)字,注意大小寫。

對(duì)象:在python中任何東西都可以稱為對(duì)象。

縮進(jìn):同一層次的語句必須有相同的縮進(jìn)。每一組稱之為塊。

list 有序的集合可以隨時(shí)添加刪除值【】:

classmates = ['Michael','Bob','Tracy'] ,len()獲得list元素的長(zhǎng)度

.append 在末尾添加元素;.insert (1.值) 在1位插入值;.pop(i)刪除list值

tuple : 元組,一旦初始化不能修改。注:只有一個(gè)字符的元組,在后面加,以免歧義。(1,)

dict: 快速查找存儲(chǔ),但是空間消耗大。{} 通過key直接拿到value. In可以判斷key知否存在,.pop刪除key

set:無序無意義的集合,提供一個(gè)list作為輸入集合 顯示不證明有序,.remove刪除key

不變對(duì)象:調(diào)用自身的任何對(duì)象方法,都不會(huì)改變對(duì)象自身 的內(nèi)容,相反這些對(duì)象會(huì)創(chuàng)建新的對(duì)象并返回,這也就保證了不可變對(duì)象是不可變。

2.控制流(語法)

共三種if,for,while

if

if - else

if (條件判斷):

? ? print1

elif (條件判斷):

? ? print2

else:

? ? print2

從上到下依次執(zhí)行。第一個(gè)判斷條件為true,余下忽略。

循環(huán)語句

for - in循環(huán)

for x in…… 就是把每個(gè)元素代入變量x,然后執(zhí)行縮進(jìn)的塊的語句。

生出整數(shù)序列:range(5)從0開始小于5的整數(shù),提供第三個(gè)數(shù)為步長(zhǎng),比如(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)中終止,任何對(duì)應(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的字符串長(zhǎng)度。

print 'Done'

continue

跳過當(dāng)前的循環(huán)塊的剩余語句,繼續(xù)進(jìn)行下一步循環(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 ,容易進(jìn)入死循環(huán)。

3.函數(shù)

調(diào)用函數(shù)

定義函數(shù)

def 函數(shù)名(參數(shù)):

? ? 函數(shù)內(nèi)容

如:def hello ():

? ? ? ? ? ? ?? print 'hello world'????????

函數(shù)形參?

函數(shù)中的參數(shù)稱之為形參,提供的賦值稱之為實(shí)參。

函數(shù)返還值:從被調(diào)函數(shù)返還到主函數(shù),并且返回一個(gè)計(jì)算的值,也就是說主函數(shù)調(diào)用這個(gè)函數(shù)的時(shí)候得到這個(gè)返還值。

當(dāng)你在函數(shù)定義變量的是后,它與函數(shù)外具有相同名稱的變量沒有關(guān)系,函數(shù)的變量名對(duì)于函數(shù)來說是局部的,這就是變量的作用域、

global 語句

定義在函數(shù)外的變量賦值。使用該語句可以清楚的表明變量是在外面的塊定義。也就是他代表賦值是全局的。

默認(rèn)參數(shù)值

函數(shù)定義的形參后面跟上= 賦值,函數(shù)的形參就有了默認(rèn)的參數(shù)值,不可變。

只有形參表末尾的函數(shù)可以有默認(rèn)參數(shù)值,也就是說聲明函數(shù)的形參的時(shí)候,不能先聲明有默認(rèn)值的形參再聲明沒有默認(rèn)值的形參、也就是必選參數(shù)在前,默認(rèn)參數(shù)在后,當(dāng)函數(shù)有多個(gè)參數(shù)的時(shí)候,變化大的在前,變化小的在后,降低難度。

有多個(gè)默認(rèn)參數(shù)的時(shí)候,可以按照順序提供默認(rèn)參數(shù),也可以不按照順序直接寫參數(shù)值,表示這個(gè)參數(shù)用傳進(jìn)去的值。

可變參數(shù):參數(shù)加*,表示參數(shù)作為可變參數(shù),允許添加0到多個(gè)參數(shù),函數(shù)調(diào)用時(shí)自動(dòng)組成tuple.

也可以在list前加,表示list中的元素作為可變?cè)靥砑印?/p>

def calc(*numbers):

關(guān)鍵參數(shù)

允許傳入0到多個(gè)含有參數(shù)名的參數(shù),自動(dòng)組成dict。通過命名給參數(shù)賦值,稱之為關(guān)鍵函數(shù)。不在乎位置。

**kw kw作為關(guān)鍵參數(shù)

>>> extra = {'city': 'Beijing', 'job': 'Engineer'} ###先組建一個(gè)dict

>>> person('Jack', 24, **extra)###作為關(guān)鍵參數(shù)填進(jìn)去

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ù)需要一個(gè)特殊分隔符*,*后面的參數(shù)被視為命名關(guān)鍵字參數(shù)。

調(diào)用方式如下:

>>> person('Jack', 24, city='Beijing', job='Engineer')

Jack 24 Beijing Engineer

如果函數(shù)定義中已經(jīng)有了一個(gè)可變參數(shù),后面跟著的命名關(guān)鍵字參數(shù)就不再需要一個(gè)特殊分隔符*了:

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ù)

如果一個(gè)函數(shù)在內(nèi)部調(diào)用自身本身,這個(gè)函數(shù)就是遞歸函數(shù)。

函數(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)致棧溢出。解決方法尾遞歸。

4.高級(jí)特性

切片

L[0:3]表示,從索引0開始取,直到索引3為止,但不包括索引3。即索引0,1,2,正好是3個(gè)元素,也可以倒數(shù)切片,倒數(shù)第一個(gè)元素的索引是-1??梢杂糜谧址?/p>

前10個(gè)數(shù),每?jī)蓚€(gè)取一個(gè),

>>> L[:10:2]

[0, 2, 4, 6, 8]

所有數(shù),每5個(gè)取一個(gè):

>>> 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上,還可以作用在其他可迭代對(duì)象上。

默認(rèn)情況下,dict迭代的是key。如果要迭代value,for value in d.values(),如果要同時(shí)迭代key和value,可以用for k, v in d.items()。也可以迭代字符串。

如何判斷一個(gè)對(duì)象是可迭代對(duì)象呢?方法是通過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)中同時(shí)迭代索引和元素本身:

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ù)平方

寫列表生成式時(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']

列表生成式也可以使用兩個(gè)變量來生成list:

>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }

>>> [k + '=' + v for k, v in d.items()]

['y=B', 'x=A', 'z=C']

一個(gè)list中所有的字符串變成小寫:

>>> L = ['Hello', 'World', 'IBM', 'Apple']

>>> [s.lower() for s in L]

['hello', 'world', 'ibm', 'apple']

生成器 generator

為了節(jié)省空間,一遍循環(huán)一邊計(jì)算。

只要把一個(gè)列表生成式的[]改成(),就創(chuàng)建了一個(gè)generator;如果一個(gè)函數(shù)定義中包含yield關(guān)鍵字,是一個(gè)generator

for循環(huán)可迭代。

變成generator的函數(shù),遇到y(tǒng)ield語句返回,再次執(zhí)行時(shí)從上次返回的yield語句處繼續(xù)執(zhí)行。

迭代器:

可以直接作用于for循環(huán)的對(duì)象統(tǒng)稱為可迭代對(duì)象:Iterable

可以被next()函數(shù)調(diào)用并不斷返回下一個(gè)值的對(duì)象稱為迭代器:Iterator。

>>> from collections import Iterator

>>> isinstance((x for x in range(10)), Iterator)

生成器都是Iterator對(duì)象,但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ù)。所以一個(gè)函數(shù)可以接受另一個(gè)函數(shù)作為參數(shù),這就是高階函數(shù)。

map函數(shù)

接收兩個(gè)參數(shù),一個(gè)是函數(shù),一個(gè)是迭代對(duì)象。例如:

>>> 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()包含兩個(gè)參數(shù),第一個(gè)是參數(shù)是一個(gè)函數(shù),第二個(gè)是序列(列表或元組)。其中,函數(shù)(即map的第一個(gè)參數(shù)位置的函數(shù))可以接收一個(gè)或多個(gè)參數(shù)。

reduce()函數(shù):

reduce() 第一個(gè)參數(shù)是函數(shù),第二個(gè)是 序列(列表或元組)。但是,其函數(shù)必須接收兩個(gè)參數(shù)。

②從對(duì)傳進(jìn)去的數(shù)值作用來講:

map()是將傳入的函數(shù)依次作到序列的每個(gè)元素,每個(gè)元素都是獨(dú)自被函數(shù)“作用”一次;(請(qǐng)看下面的栗子)

reduce()是將傳人的函數(shù)作用在序列的第一個(gè)元素得到結(jié)果后,把這個(gè)結(jié)果繼續(xù)與下一個(gè)元素作用(累積計(jì)算),

最終結(jié)果是所有的元素相互作用的結(jié)果。

filter函數(shù)

用于過濾序列,和map()類似,filter()也接收一個(gè)函數(shù)和一個(gè)序列。和map()不同的是,filter()把傳入的函數(shù)依次作用于每個(gè)元素,然后根據(jù)返回值是True還是False決定保留還是丟棄該元素。

sorted函數(shù)

排序算法

可以進(jìn)行數(shù)字與list排序,關(guān)鍵在于建立映射。

返還函數(shù)

把函數(shù)作為結(jié)果值返還。

6.模塊

模塊是包含了所有你定義的函數(shù)和變量的文件,為了在其他程序中重用模塊,py為擴(kuò)展名。

7.面向?qū)ο蟮木幊?/h4>

而面向?qū)ο蟮某绦蛟O(shè)計(jì)把計(jì)算機(jī)程序視為一組對(duì)象的集合,而每個(gè)對(duì)象都可以接收其他對(duì)象發(fā)過來的消息,并處理這些消息。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • http://python.jobbole.com/85231/ 關(guān)于專業(yè)技能寫完項(xiàng)目接著寫寫一名3年工作經(jīng)驗(yàn)的J...
    燕京博士閱讀 7,804評(píng)論 1 118
  • 教程總綱:http://www.runoob.com/python/python-tutorial.html 進(jìn)階...
    健康哥哥閱讀 2,184評(píng)論 1 3
  • 最近在慕課網(wǎng)學(xué)習(xí)廖雪峰老師的Python進(jìn)階課程,做筆記總結(jié)一下重點(diǎn)。 基本變量及其類型 變量 在Python中,...
    victorsungo閱讀 1,940評(píng)論 0 5
  • 內(nèi)置函數(shù)Python解釋器內(nèi)置了許多功能和類型,總是可用的。他們是按字母順序列在這里。 abs(x)返回一個(gè)數(shù)的絕...
    uangianlap閱讀 1,364評(píng)論 0 0
  • 前幾天走在校園的路上,無意間聽到前面兩個(gè)女生的閑聊。其中一個(gè)女生和另一個(gè)女生說:我在南方讀書的朋友她說寫“春雨貴如...
    簡(jiǎn)孟龍閱讀 178評(píng)論 0 0

友情鏈接更多精彩內(nèi)容