Python是什么
一門編程語言萌衬,或者掉瞳,簡化了的英語毕源。
Python的作者,Guido von Rossum陕习,確實是荷蘭人霎褐。1982年,Guido從阿姆斯特丹大學(xué)(University of Amsterdam)獲得了數(shù)學(xué)和計算機(jī)碩士學(xué)位该镣。然而冻璃,盡管他算得上是一位數(shù)學(xué)家,但他更加享受計算機(jī)帶來的樂趣拌牲。就像數(shù)學(xué)家的追求一樣俱饿,Python優(yōu)美歌粥、清晰塌忽、簡單。
Guido希望有一種語言失驶,這種語言能夠像C語言那樣土居,能夠全面調(diào)用計算機(jī)的功能接口,又可以像shell那樣,可以輕松的編程擦耀。ABC語言讓Guido看到希望棉圈。ABC是由荷蘭的CWI (Centrum Wiskunde & Informatica, 數(shù)學(xué)和計算機(jī)研究所)開發(fā)的。Guido在CWI工作眷蜓,并參與到ABC語言的開發(fā)分瘾。ABC語言以教學(xué)為目的。與當(dāng)時的大部分語言不同吁系,ABC語言的目標(biāo)是“讓用戶感覺更好”德召。ABC語言希望讓語言變得容易閱讀,容易使用汽纤,容易記憶上岗,容易學(xué)習(xí),并以此來激發(fā)人們學(xué)習(xí)編程的興趣蕴坪。
據(jù)說肴掷,1989年圣誕節(jié),Guido 在阿姆斯特丹為了打發(fā)時間背传,決定開發(fā)一種新的腳本解釋語言呆瞻,之所以選擇Python(大mangshe)作為程序的名字,是因為他是一個大mangshe飛行馬戲團(tuán)(Monty Python)的愛好者径玖。他的愛好很是廣泛栋烤,看起來像無所事事的樣子,前段時間還參與了996的討論挺狰。
1991年明郭,第一個Python編譯器(同時也是解釋器)誕生。它是用C語言實現(xiàn)的丰泊,并能夠調(diào)用C庫(.so文件)薯定。從一出生,Python已經(jīng)具有了:類(class)瞳购,函數(shù)(function)话侄,異常處理(exception),包括表(list)和詞典(dictionary)在內(nèi)的核心數(shù)據(jù)類型学赛,以及模塊(module)為基礎(chǔ)的拓展系統(tǒng)年堆。借助社區(qū)優(yōu)勢的Python越來越強(qiáng)大,更新也很及時盏浇,像許多九零后一樣变丧,開始奔三了:最新版為3.7.3.
一門有zhuti的語言:
Python之禪 by Tim Peters
優(yōu)美勝于丑陋(Python 以編寫優(yōu)美的代碼為目標(biāo))
明了勝于晦澀(優(yōu)美的代碼應(yīng)當(dāng)是明了的,命名規(guī)范绢掰,風(fēng)格相似)
簡潔勝于復(fù)雜(優(yōu)美的代碼應(yīng)當(dāng)是簡潔的痒蓬,不要有復(fù)雜的內(nèi)部實現(xiàn))
復(fù)雜勝于凌亂(如果復(fù)雜不可避免童擎,那代碼間也不能有難懂的關(guān)系,要保持接口簡潔)
扁平勝于嵌套(優(yōu)美的代碼應(yīng)當(dāng)是扁平的攻晒,不能有太多的嵌套)
間隔勝于緊湊(優(yōu)美的代碼有適當(dāng)?shù)拈g隔顾复,不要奢望一行代碼解決問題)
可讀性很重要(優(yōu)美的代碼是可讀的)
即便假借特例的實用性之名,也不可違背這些規(guī)則(這些規(guī)則至高無上)
不要包容所有錯誤鲁捏,除非你確定需要這樣做(精準(zhǔn)地捕獲異常芯砸,不寫 except:pass 風(fēng)格的代碼)
當(dāng)存在多種可能,不要嘗試去猜測
而是盡量找一種给梅,最好是唯一一種明顯的解決方案(如果不確定乙嘀,就用窮舉法)
雖然這并不容易,因為你不是 Python 之父(這里的 Dutch 是指 Guido )
做也許好過不做破喻,但不假思索就動手還不如不做(動手之前要細(xì)思量)
如果你無法向人描述你的方案虎谢,那肯定不是一個好方案;反之亦然(方案測評標(biāo)準(zhǔn))
命名空間是一種絕妙的理念曹质,我們應(yīng)當(dāng)多加利用(倡導(dǎo)與號召)
為什么用Python
來自知乎網(wǎng)友的回答:因為用它可以優(yōu)雅快速表達(dá)自己的邏輯婴噩。
現(xiàn)實是,Python意味著一套思維邏輯羽德,更好的工作效率几莽,更多的就業(yè)機(jī)會,以及更多的樂趣宅静。
學(xué)習(xí)任何一項技能都是需要原因的章蚣,因為這要花很長的時間,有時候比一段婚姻還要長姨夹。如果沒有yikaishi的強(qiáng)烈認(rèn)同纤垂,從入門到放棄這段旅程將會非常快磷账。學(xué)習(xí)Python最好的時間是十年前峭沦,其次是現(xiàn)在。它像一個善解人意的賢內(nèi)助(目前還是大眾情人)逃糟,能做很多你也許都沒想到的溫暖情吼鱼。
- 因為它能做很多事,所以很流行绰咽。
我們常見的網(wǎng)站中菇肃,涉及python做web開發(fā)的有: 等等Reddit ,豆瓣網(wǎng)取募,知乎琐谤,Quora,Google矛辕。
- 快速學(xué)習(xí)曲線和縮短開發(fā)時間笑跛。
Python來自一門ABC語言叉瘩,這門語言的初衷就是讓不懂編程的人快速成為程序猿完箩,ABC就是很簡單的意思。然后Python比ABC還要簡單肃廓,所以入門者甚眾翻屈。
Python比大多數(shù)其他流行的面向?qū)ο缶幊陶Z言(如Java)更容易學(xué)習(xí)陈哑。與其他語言相比,Python中的語法和語義更加干凈整潔伸眶,代碼也更具可讀性惊窖。需要用Python編寫代碼行來解決特定問題,在大多數(shù)情況下厘贼,這將比其他流行語言所需的代碼少得多界酒。 Python中的模塊化體系結(jié)構(gòu)使得導(dǎo)入和使用模塊變得容易。
- 自動執(zhí)行日常重復(fù)性任務(wù) .
由于分工越來越細(xì)嘴秸,工作大部分也都是重復(fù)性質(zhì)的毁欣。發(fā)郵件,測試報告等岳掐,為什么不寫一個腳本自動化處理呢凭疮?也許你會說,自己不是程序猿串述,不是程序猿就該過苦日子嗎执解?
此處省略一份資料。
- 數(shù)據(jù)科學(xué)與分析的熱門選擇
Python是數(shù)據(jù)科學(xué)和分析領(lǐng)域中最受歡迎的編程語言之一纲酗。Python具有成熟且功能豐富的模塊衰腌,因此更容易以高效的方式支持?jǐn)?shù)據(jù)分析。用于不同目的分析堆棧中的一些流行模塊如下所述觅赊,供你參考:
NumPy:該模塊提供了龐大的數(shù)學(xué)函數(shù)庫以及對多維數(shù)組的支持桶唐,這對數(shù)據(jù)科學(xué)至關(guān)重要。該模塊提供數(shù)值數(shù)組和矩陣數(shù)據(jù)類型和函數(shù)茉兰,以便對該數(shù)據(jù)進(jìn)行操作尤泽。
SciPy:此實用程序提供了一組算法,可用于不同的域特定數(shù)據(jù)處理规脸。這包括統(tǒng)計算法坯约,數(shù)字信號處理算法等。有關(guān)更多詳細(xì)信息和官方文檔莫鸭,請參閱SciPy的官方網(wǎng)站闹丐。
matplotlib:這是一個流行的繪圖包,可用于2D和基本3D繪圖被因。這個包非常重要卿拴,因為數(shù)據(jù)可視化在數(shù)據(jù)科學(xué)中非常重要衫仑。
pandas:這是一個開源且易于使用的庫,提供高性能的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析工具堕花。
- 人工智能與機(jī)器學(xué)習(xí)的未來
機(jī)器學(xué)習(xí)無處不在文狱,從自動駕駛汽車到深入學(xué)習(xí)人工智能,可以擊敗復(fù)雜戰(zhàn)略游戲中最優(yōu)秀的人類玩家缘挽。新的可能性幾乎無窮無盡瞄崇。你開發(fā)的機(jī)器學(xué)習(xí)算法可能會徹底改變某些行業(yè)。Python是機(jī)器學(xué)習(xí)項目和AI相關(guān)項目的首選語言壕曼,包括谷歌在內(nèi)的許多大型科技公司都將Python用于機(jī)器學(xué)習(xí)項目苏研。以下是一些流行的機(jī)器學(xué)習(xí)模塊和框架:
Tensorflow:這是一個用于編程神經(jīng)網(wǎng)絡(luò)架構(gòu)的神經(jīng)網(wǎng)絡(luò)庫。它由Google開發(fā)腮郊,目前正被許多從事機(jī)器學(xué)習(xí)項目的開發(fā)人員使用摹蘑。 Tensorflow提供高級功能,因此你無需重新發(fā)明輪子轧飞。它具有靈活的架構(gòu)衅鹿,可以讓你創(chuàng)建有意義的解決方案。
Scikit-learn:這也是一個基于NumPy和SciPy構(gòu)建的流行ML庫踪少,開發(fā)人員廣泛使用它塘安。這是一個相對較低級別的庫,用于開發(fā)其他流行的高級庫援奢。
以上參考《4 Reasons You Should Learn Python》
作者:Arani Chatterjee
譯者:lemon
怎樣使用Python
其實解決了Python是什么 以及 為什么用Python兩個問題剩下的就很簡單了呢:時間兼犯,重復(fù),Google集漾。
其實這已經(jīng)夠了切黔。
但是作為Python教程如果一行代碼都不出現(xiàn)是不是不太好呢?顯然是的具篇。學(xué)習(xí)一門語言要知道它基本:
- 編程環(huán)境
- 語法
- 數(shù)據(jù)類型
- 控制結(jié)構(gòu)
- 文檔管理
- 函數(shù)與模塊
在基礎(chǔ)階段纬霞,這里推薦的一份資料是《笨辦法學(xué)Python》它不僅提供學(xué)習(xí)Python的方法,其他語言也可以觸類旁通驱显,重要的是:你會在里面看到自己當(dāng)年學(xué)習(xí)英語的樣子诗芜,比如制作卡片,背單詞埃疫,閱讀理解等等伏恐。
此處省略一份資料。
- 編程環(huán)境
Python是跨平臺的栓霜,它可以運(yùn)行在Windows翠桦、Mac和各種Linux/Unix系統(tǒng)上。在Windows上寫Python程序胳蛮,放到Linux上也是能夠運(yùn)行的销凑。
要開始學(xué)習(xí)Python編程丛晌,首先就得把Python安裝到你的電腦里。安裝后斗幼,你會得到Python解釋器(就是負(fù)責(zé)運(yùn)行Python程序的)澎蛛,一個命令行交互環(huán)境,還有一個簡單的集成開發(fā)環(huán)境孟岛。
從官網(wǎng)https://www.python.org/下載安裝文件瓶竭。下載安裝后督勺,配置環(huán)境變量渠羞,即可運(yùn)行在命令行Python。
Anacondahttps://www.anaconda.com/安裝與管理Python包智哀。
如交互環(huán)境如下:
python
Python 2.7.14 (default, Oct 24 2017, 17:40:36)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-18)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print"welcome to python!"
welcome to python!
>>>
Python 的學(xué)習(xí)過程少不了 IDE 或者代碼編輯器次询,或者集成的開發(fā)編輯器(IDE)。這些 Python 開發(fā)工具幫助開發(fā)者加快使用 Python 開發(fā)的速度瓷叫,提高效率屯吊。高效的代碼編輯器或者 IDE 應(yīng)該會提供插件,工具等能幫助開發(fā)者高效開發(fā)的特性摹菠。
推薦10 款最好的 Python IDE
作為練習(xí)也可以免去配置環(huán)節(jié)盒卸,用在線環(huán)境,如https://c.runoob.com/compile/6
- 語法
語言的結(jié)構(gòu)規(guī)則:https://www.runoob.com/python/python-basic-syntax.html
Python 標(biāo)識符
在 Python 里次氨,標(biāo)識符由字母蔽介、數(shù)字、下劃線組成煮寡。
在 Python 中虹蓄,所有標(biāo)識符可以包括英文、數(shù)字以及下劃線(_)幸撕,但不能以數(shù)字開頭薇组。
Python 中的標(biāo)識符是區(qū)分大小寫的。
以下劃線開頭的標(biāo)識符是有特殊意義的坐儿。以單下劃線開頭 _foo 的代表不能直接訪問的類屬性律胀,需通過類提供的接口進(jìn)行訪問,不能用 from xxx import * 而導(dǎo)入貌矿。
以雙下劃線開頭的 __foo 代表類的私有成員炭菌,以雙下劃線開頭和結(jié)尾的 foo 代表 Python 里特殊方法專用的標(biāo)識,如 init() 代表類的構(gòu)造函數(shù)站叼。
Python 可以同一行顯示多條語句娃兽,方法是用分號 ; 分開,如:
>>> print 'hello';print 'runoob';
hello
runoob
一些保留字不能用作常數(shù)或變數(shù)尽楔,或任何其他標(biāo)識符名稱投储。所有 Python 的關(guān)鍵字只包含小寫字母第练。
and exec not
assert finally or
break for pass
class from print
continue global raise
def if return
del import try
elif in while
else is with
except lambda yield
行和縮進(jìn)
學(xué)習(xí) Python 與其他語言最大的區(qū)別就是,Python 的代碼塊不使用大括號 {} 來控制類玛荞,函數(shù)以及其他邏輯判斷娇掏。python 最具特色的就是用縮進(jìn)來寫模塊。
縮進(jìn)的空白數(shù)量是可變的勋眯,但是所有代碼塊語句必須包含相同的縮進(jìn)空白數(shù)量婴梧,這個必須嚴(yán)格執(zhí)行。
>>> if True:
... print"True"
...
True
>>> if True:
... print"True"
File "<stdin>", line 2
print"True"
^
IndentationError: expected an indented block
Python 可以使用引號( ' )客蹋、雙引號( " )塞蹭、三引號( ''' 或 """ ) 來表示字符串,引號的開始與結(jié)束必須的相同類型的讶坯。其中三引號可以由多行組成番电,編寫多行文本的快捷語法,常用于文檔字符串辆琅,在文件的特定地點(diǎn)漱办,被當(dāng)做注釋。python中單行注釋采用 # 開頭婉烟。
函數(shù)之間或類的方法之間用空行分隔娩井,表示一段新的代碼的開始。類和函數(shù)入口之間也用一行空行分隔似袁,以突出函數(shù)入口的開始洞辣。空行與代碼縮進(jìn)不同叔营,空行并不是Python語法的一部分屋彪。書寫時不插入空行,Python解釋器運(yùn)行也不會出錯绒尊。但是空行的作用在于分隔兩段不同功能或含義的代碼畜挥,便于日后代碼的維護(hù)或重構(gòu)。
記子て住:空行也是程序代碼的一部分蟹但。
- 數(shù)據(jù)類型
數(shù)據(jù)類型在數(shù)據(jù)結(jié)構(gòu)中的定義是一組性質(zhì)相同的值的集合以及定義在這個值集合上的一組操作的總稱。 變量是用來存儲值的所在處谭羔,它們有名字和數(shù)據(jù)類型华糖。
變量類型 | 操作符 | 說明 |
---|---|---|
字符串 | str | 字符串是用來表示文本的數(shù)據(jù)類型。不同于C語言瘟裸,python中單引號和雙引號定義的字符串等價客叉。 |
數(shù)值 | int & float | 類似其它大多數(shù)編程語言,python也將數(shù)值類型分為整型(int)和浮點(diǎn)型(float)。整數(shù)與數(shù)學(xué)上的定義相同兼搏,浮點(diǎn)數(shù)指數(shù)學(xué)上的小數(shù)卵慰。 |
列表 | list | 列表是我們在python中很常用的一種數(shù)據(jù)類型。它是一種有序佛呻,可增減元素的數(shù)據(jù)集裳朋。 |
字典 | dict | 字典是一種鍵和值對應(yīng)的一種數(shù)據(jù)類型,以鍵索引值吓著。當(dāng)你需要構(gòu)建一一對應(yīng)關(guān)系的時候鲤嫡,需要 |
元組 | tuple | 元組是有序的數(shù)據(jù)集, 無法增加和刪除元素绑莺。 |
集合 | set | 集合暖眼,無序,無重復(fù)元素紊撕。支持?jǐn)?shù)學(xué)上概念的罢荡,交集赡突,并集对扶,差集等。 |
布爾型 | boolean | 布爾值是一個邏輯值. 只有 True 和 False (真和假)兩個值惭缰。 |
數(shù)值浪南,運(yùn)算符號同小學(xué)數(shù)學(xué)。
>>> # 初始化int型
... num1 = int()
>>> print num1
0
>>> # 初始化float型
... num1 = float()
>>> print num1
0.0
>>> # 其他類型轉(zhuǎn)化
... num1 = float("1.1")
>>> print num1
1.1
>>> num1 = num1 + 12
>>> print num1
13.1
>>> num1 += 1
>>> print num1
14.1
>>> # 冪次漱受,**
... num1 = 5.3**2
>>> print num1
28.09
>>> # 取余络凿,%
... 3 % 2
1
>>> # 整除,//
... 5 // 2
2
字符串昂羡,數(shù)值操作函數(shù)和math模塊
print abs(-2) #絕對值
print pow(3,2) #冪運(yùn)算絮记,相關(guān)于3**2
import math
print math.pi #圓周率
print math.e #常量自然數(shù)
print math.log(10) #取自然對數(shù)
print math.log10(10) #以10對底的對數(shù)
2
9
3.14159265359
2.71828182846
2.30258509299
1.0
字符串 (str)與正則表達(dá)式
初始化字符串
# 定義空字符串
str1 = str()
str1 = ""
str1 = ''
# 定義非空字符串
str1 = "I'm fine"
str1 = 'I\'m fine'
# 其它類型轉(zhuǎn)化
str1 = str(3.1415926)
可以對字符串進(jìn)行拼接,分割虐先,匹配等操作怨愤。
# 字符串拼接
print "a" + "b"
# 字符串復(fù)制
print "a" * 3
# 字符串格式化
print "a%sa"%("b")
print "a%da"%(1)
ab
aaa
aba
a1a
對字符串操作的函數(shù)
# 獲取str長度
str1 = "bca"
print len("abc")
# 序列化
print list(str1)
print set(str1)
print tuple(str1)
print sorted(str1)
3
['b', 'c', 'a']
set(['a', 'c', 'b'])
('b', 'c', 'a')
['a', 'b', 'c']
字符串具有的屬性
# 替換元素: replace
print "abcdaf".replace("a","123")
# 定位元素: find; index
print "abcdaf".find("b")
print "abcdaf".index("b")
# 統(tǒng)計元素數(shù)量: count;
print "abcdaf".count("a")
# 起始終止: startswith; endswith;
print "abcdaf".startswith("ab")
print "abcdaf".startswith("ax")
# 分隔字符: split
print "abcdaf".split("bc")
# 剪切: strip; lstrip; rstrip;
# 大小寫: upper; lower; capitalize;
print "aaa".upper() #小寫變大寫
print "AAA".lower() #大寫變小寫
print "aaa".capitalize() #將字符串的第一個字母變成大寫,其他字母變小寫
123bcd123f
1
1
2
True
False
['a', 'daf']
AAA
aaa
Aaa
正則表達(dá)式https://www.runoob.com/python/python-reg-expressions.html
正則表達(dá)式是一個特殊的字符序列,它能幫助你方便的檢查一個字符串是否與某種模式匹配蛹批。Python 自1.5版本起增加了re 模塊撰洗,它提供 Perl 風(fēng)格的正則表達(dá)式模式。
re 模塊使 Python 語言擁有全部的正則表達(dá)式功能腐芍。
compile 函數(shù)根據(jù)一個模式字符串和可選的標(biāo)志參數(shù)生成一個正則表達(dá)式對象差导。該對象擁有一系列方法用于正則表達(dá)式匹配和替換。
re 模塊也提供了與這些方法功能完全一致的函數(shù)猪勇,這些函數(shù)使用一個模式字符串做為它們的第一個參數(shù)设褐。
literal | 匹配字符串的值 | novogood |
---|---|---|
re1|re2 | 匹配表達(dá)式re1或re2 | novo|gene |
. | 匹配任何字符(換行符除外) | . |
^ | 匹配字符串的開始 | ^Novo |
$ | 匹配字符串的結(jié)尾 | Novo$ |
* | 匹配前面出現(xiàn)的正則表達(dá)式零次或多次 | .* |
+ | 匹配前面出現(xiàn)的正則表達(dá)式一次或多次 | .+ |
? | 匹配前面出現(xiàn)的正則表達(dá)式零次或一次 | .? |
{n} | 匹配前面重復(fù)n次的正則表達(dá)式 | a{3} |
{m,n} | 匹配前面重復(fù)m次到n次的正則表達(dá)式 | a{m,n} |
[…] | 匹配字符組里出現(xiàn)的任意一個字符 | [abcd] |
[x-y] | 匹配從字符x到字符y中的任意一個字符 | [A-Za-z] |
[^…] | 不匹配字符集中出現(xiàn)的任一字符 | [^abcd] |
標(biāo)識 | 意義 |
---|---|
\d | 匹配任意數(shù)字,和[0-9]一樣 |
\D | 與\d反義助析,匹配任意非數(shù)字字符 |
\w | 匹配任意數(shù)字字母字符裁替,和[A-Za-z0-9]一樣 |
\W | 和\w反義 |
\s | 匹配任何空白符,和[\n\t\r\v\f]一樣 |
\S | 與\s反義 |
\ | 轉(zhuǎn)移字符 |
import re
pattern = 'this'
text = 'Does this text match the pattern?'
match = re.search(pattern, text)
s = match.start()
e = match.end()
print('Found "{}"\nin "{}"\nfrom {} to {} ("{}")'.format(
match.re.pattern, match.string, s, e, text[s:e]))
Found "this"
in "Does this text match the pattern?"
from 5 to 9 ("this")
import re
print(re.match('www', 'www.runoob.com').span()) # 在起始位置匹配
print(re.match('com', 'www.runoob.com')) # 不在起始位置匹配
(0, 3)
None
re.match只匹配字符串的開始貌笨,如果字符串開始不符合正則表達(dá)式弱判,則匹配失敗,函數(shù)返回None锥惋;而re.search匹配整個字符串昌腰,直到找到一個匹配。
檢索和替換
import re
phone = "2004-959-559 # 這是一個國外電話號碼"
# 刪除字符串中的 Python注釋
num = re.sub(r'#.*$', "", phone)
print "電話號碼是: ", num
# 刪除非數(shù)字(-)的字符串
num = re.sub(r'\D', "", phone)
print "電話號碼是 : ", num
import re
pattern = re.compile(r'\d+') # 查找數(shù)字
result1 = pattern.findall('runoob 123 google 456')
result2 = pattern.findall('run88oob123google456', 0, 10)
print(result1)
print(result2)
['123', '456']
['88', '12']
- 列表 (list)
python的列表個跟清單的道理是一樣的膀跌,特點(diǎn)就是:可重復(fù)遭商,類型可不同。類型不同也是跟數(shù)組最本質(zhì)的區(qū)別了捅伤。
初始化列表
空list定義: list() , []
非空list定義: [1,2,3]
其它類型轉(zhuǎn)化
list1=['a','b','c']
print list1[0] #第一個元素
print list1[-2] #倒數(shù)第二個元素
print list1[::-1][1] #倒數(shù)第二個元素
#print list1[::-1]
#print list1[::]
#切片
print list1[0:2] #第1到2個
print list1[:] #0到最后
print('1' in list1)
print len(list1) #獲取list長度
print max(list1) #獲得list最大值
print min(list1) #獲得list最小值
# del 刪除元素
del list1[0] #刪除第一個元素
print sorted(list1) #對列表進(jìn)行排序
print ("".join(list1) )#列表合并成字符串
a
b
b
['a', 'b']
['a', 'b', 'c']
False
3
c
a
['b', 'c']
bc
列表具有的屬性
list1 = [1,3,2]
# 添加元素
list1.append(5) #在列表后面插入數(shù)值5
print list1
list1.extend([6,5]) #在列表后面插入列表[6,5]
print list1
list1.insert(1,8) #在第一個位置之后插入數(shù)值8
print list1
# remove: 移除列表中的某個值的第一個匹配項
list1.remove(2)
print list1
# list.pop([index=-1])
# obj -- 可選參數(shù)劫流,要移除列表元素的索引值击纬,不能超過列表總長度尺借,默認(rèn)為 index=-1择诈,刪除最后一個列表值岖沛。
list1.pop()
print list1
[1, 3, 2, 5]
[1, 3, 2, 5, 6, 5]
[1, 8, 3, 2, 5, 6, 5]
[1, 8, 3, 5, 6, 5]
[1, 8, 3, 5, 6]
print "#------我是分割線"
# 是否包含元素: __contains__. (類似于 in)
print list1.__contains__(1)
print list1.__contains__(8)
# 索引元素: __getitem__. (list1[0])
print list1.__getitem__(0) #類似于 list1[0]
# 獲得元素索引值: index.
print list1.index(8)
# 某元素個數(shù): count.
print [1,2,1,1].count(1)
# 排序: sort. (sorted(list1))
list1.sort()
print list1
# 逆序: reverse, (list1[::-1])
list1.reverse()
print list1
#------我是分割線
True
True
1
1
3
[1, 3, 5, 6, 8]
[8, 6, 5, 3, 1]
字典是另一種可變?nèi)萜髂P玩⑼荆铱纱鎯θ我忸愋蛯ο蟆?/p>
字典的每個鍵值 key=>value 對用冒號 : 分割笨忌,每個鍵值對之間用逗號 , 分割睛驳,整個字典包括在花括號 {} 中 ,格式如下所示:
d = {key1 : value1, key2 : value2 }
# 空字典:
dict1 = {}
dict1 = dict()
# 非空字典
dict1 = {"a": 1, 2: [1,2]}
print dict1
dict1 = dict.fromkeys("ab", 1)
print dict1
dict1 = dict.fromkeys([1,2,3],1)
print dict1
# 其它類型轉(zhuǎn)化
dict1 = dict(([1,2],(3,4),"ab"))
print dict1
dict1 = dict.fromkeys("ab",1)
# 鍵和值的映射
print dict1["a"]
# 添加/修改映射
dict1["d"] = (1,2)
print dict1
# 刪除映射
del dict1["a"]
print dict1
print "".join(dict1)
print "".join(dict1.keys())
{'a': 1, 2: [1, 2]}
{'a': 1, 'b': 1}
{1: 1, 2: 1, 3: 1}
{'a': 'b', 1: 2, 3: 4}
1
{'a': 1, 'b': 1, 'd': (1, 2)}
{'b': 1, 'd': (1, 2)}
bd
bd
可以對字典操作的函數(shù)
len弟塞,獲取dict長度
max, 獲得dict的鍵的最大值
min凰浮,獲得dict的鍵的最小值
sorted, 對字典的鍵排序
字典具有的屬性
獲得字典所有的鍵: dict1.keys()
獲得字典所有的值: dict1.values()
合并字典: update
鍵是否存在: has_key
刪除一對映射:
dict1 = {'b': 1, 'd': (1, 2)}
# pop 刪除鍵對應(yīng)的對象
dict1.pop('b') # 類似于 del dict1["b"]
print dict1
# popitem() 方法隨機(jī)返回并刪除字典中的一對鍵和值(一般刪除末尾對)
dict1.popitem()
print dict1
{'d': (1, 2)}
{}
列表解析&字典解析
在需要改變列表而不是需要新建某列表時我抠,可以使用列表解析。列表解析表達(dá)式為:
[expr for iter_var in iterable]
首先迭代iterable里所有內(nèi)容袜茧,每一次迭代菜拓,都把iterable里相應(yīng)內(nèi)容放到iter_var中,再在表達(dá)式中應(yīng)用該iter_var的內(nèi)容笛厦,最后用表達(dá)式的計算值生成一個列表纳鼎。
[expr for iter_var in iterable if cond_expr]
加入了判斷語句,只有滿足條件的內(nèi)容才把iterable里相應(yīng)內(nèi)容放到iter_var中递递,再在表達(dá)式中應(yīng)用該iter_var的內(nèi)容喷橙,最后用表達(dá)式的計算值生成一個列表。
mydna= "ACTGCTCTAGCTAAGCA"
redna=''
for each in mydna:
if each =='A':
redna='T'+redna
elif each =='T':
redna='A'+redna
elif each =='C':
redna='G'+redna
elif each =='G':
redna='C'+redna
else:
redna='N'+redna
print redna
TGCTTAGCTAGAGCAGT
mydna= "ACTGCTCTAGCTAAGCA"
rule = {'A':'T','T':'A','G':'C','C':'G','N':'N'}
print ''.join([rule[n] for n in mydna[::-1]])
TGCTTAGCTAGAGCAGT
mydna= "ACTGCTCTAGCTAAGCA"
print ''.join(["ATCG"["TAGC".index(n)] for n in mydna[::-1]])
TGCTTAGCTAGAGCAGT
Python的集合(set)和其他語言類似, 是一個無序不重復(fù)元素集, 基本功能包括關(guān)系測試和消除重復(fù)元素. 集合對象還支持union(聯(lián)合), intersection(交), difference(差)和sysmmetric difference(對稱差集)等數(shù)學(xué)運(yùn)算.由于集合是無序的,所以登舞,sets 不支持 索引, 分片, 或其它類序列(sequence-like)的操作贰逾。
# 使用 set 函數(shù)創(chuàng)建集合
list1 = [6, 7, 7, 8, 8, 9]
set2 = set(list1)
set2.add(10) # 添加新元素
print set2 # set([8, 9, 10, 6, 7]) 去掉重復(fù)內(nèi)容,而且是無序的
set3 = frozenset(list1)
#set3.add(10) # 固定集合不能添加元素,會報錯AttributeError: 'frozenset' object has no attribute 'add'
### 集合有并集菠秒,交集疙剑,求差操作
### a & b 并集:intersection() 方法返回一個新集合氯迂,包含在兩個集合中同時出現(xiàn)的所有元素。
### a | b 交集:union() 方法返回一個新集合言缤,包含在兩個 集合中出現(xiàn)的元素嚼蚀。
### a - b 差集:difference() 方法返回的新集合中,包含所有在 集合A出現(xiàn)但未在集合B中的元素管挟。
### a ^ b 對稱差集:symmetric_difference() 方法返回一個新集合轿曙,包含所有只在其中一個集合中出現(xiàn)的元素。
# 刪除元素
set2.discard(6) # 當(dāng)元素不存在時,不會引發(fā)異常
set2.remove(6) # 與discard的區(qū)別在于僻孝,如果沒有要刪除的元素导帝,remove會引發(fā)一個異常
set2.pop() # 因為set是無序的,所以pop會隨機(jī)的從set中刪除一個元素
元組(Tuple)
元組和列表在結(jié)構(gòu)上沒有什么區(qū)別穿铆,唯一的差異在于元組是只讀的您单,不能修改。元組用“()”表示
tuple1 = tuple("abc")
tuple1 = ("a","b","c")
tuple1 = ("a","b")+("c")
tuple類型的特性
同列表類似荞雏,也是有序的
但不可直接更改一級子元素
可用作dict的鍵: dict1 = {(‘a(chǎn)’,’b’): 2}
獲取某元素數(shù)量: tuple1.count(“a”)
獲取某元素索引: tuple1.index(“a”)
Python中的布爾類型有兩個常量True和False表示虐秦。
在Python中所有的對象都可以進(jìn)行真值測試,下面羅列一下判斷為假的情況:
None
False
數(shù)值中的零凤优,包括0悦陋,0.0,0j(虛數(shù))
空序列别洪,包括空字符串(”)叨恨,空元組(()),空列表([])
空的字典{}
自定義的對象的實例挖垛,該對象的__bool__方法返回False或者_(dá)_len__方法返回0
除了以上的情況外,所有的對象在if或者while語句中的表現(xiàn)都為真秉颗。
在Python中布爾值可以進(jìn)行或痢毒、且、否三種操作蚕甥,與很多語言不同的是哪替,Python中不是用符號,而是用英文單詞來表示菇怀,分別是or凭舶、and和not。
需要注意的是or和and都支持短路操作爱沟,如果or的左邊返回True帅霜,則右邊就不會判斷;同理如果and左邊返回False呼伸,右邊也不會進(jìn)行判斷身冀。
not的優(yōu)先級很低,not a == b表示的是not (a == b),而表達(dá)式a == not b會直接報錯搂根,需要加括號a == (not b)珍促。
bool1 = bool()
print bool1
bool2 = True
print bool2
# 或運(yùn)算
print bool1 or bool2
# 和運(yùn)算
print bool1 and bool2
# 非運(yùn)算
print not bool1
False
True
True
False
True
print isinstance(1,int)
print isinstance({"a":'1'},list)
True
False
print type(1)
print type({'a':11})
<type 'int'>
<type 'dict'>
- 控制結(jié)構(gòu)
無論在哪種高級語言中,都有3大程序結(jié)構(gòu)剩愧,分別是順序猪叙、選擇、循壞結(jié)構(gòu)仁卷。這三種結(jié)構(gòu)可以用描述需要重復(fù)執(zhí)行或者進(jìn)行決策的需求沐悦。
一.順序結(jié)構(gòu)
這種是最簡單的結(jié)構(gòu),也是最普遍的結(jié)構(gòu)。因為根據(jù)馮諾依曼的設(shè)計原理五督,程序是如果不改變程序執(zhí)行順序的話藏否,默認(rèn)順序向下執(zhí)行。
二.選擇分支結(jié)構(gòu)
當(dāng)對一或多個條件進(jìn)行判別時,通常需要使用該結(jié)構(gòu)充包。
Python條件語句是通過一條或多條語句的執(zhí)行結(jié)果(True或者False)來決定執(zhí)行的代碼塊副签。
可以通過下圖來簡單了解條件語句的執(zhí)行過程:
Python程序語言指定任何非0和非空(null)值為true,0 或者 null為false基矮。
Python 編程中 if 語句用于控制程序的執(zhí)行淆储,基本形式為:
if 判斷條件:
執(zhí)行語句……
else:
執(zhí)行語句……
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 例1:if 基本用法
flag = False
name = 'luren'
if name == 'python': # 判斷變量是否為 python
flag = True # 條件成立時設(shè)置標(biāo)志為真
print 'welcome boss' # 并輸出歡迎信息
else:
print name # 條件不成立時輸出變量名稱
循環(huán)語句允許我們執(zhí)行一個語句或語句組多次,Python提供了for循環(huán)和while循環(huán)家浇,下面是在大多數(shù)編程語言中的循環(huán)語句的一般形式:
i = 1
while i < 10:
i += 1
if i%2 > 0: # 非雙數(shù)時跳過輸出
continue
print i # 輸出雙數(shù)2本砰、4、6钢悲、8点额、10
i = 1
while 1: # 循環(huán)條件為1必定成立
print i # 輸出1~10
i += 1
if i > 10: # 當(dāng)i大于10時跳出循環(huán)
break
#!/usr/bin/python
# -*- coding: UTF-8 -*-
fruits = ['banana', 'apple', 'mango']
for index in range(len(fruits)):
print '當(dāng)前水果 :', fruits[index]
print "Good bye!"
當(dāng)前水果 : banana
當(dāng)前水果 : apple
當(dāng)前水果 : mango
Good bye!
python提供了兩個非常重要的功能來處理python程序在運(yùn)行中出現(xiàn)的異常和錯誤。你可以使用該功能來調(diào)試python程序莺琳。
什么是異常还棱?
異常即是一個事件,該事件會在程序執(zhí)行過程中發(fā)生惭等,影響了程序的正常執(zhí)行珍手。一般情況下,在Python無法正常處理程序時就會發(fā)生一個異常.辞做。異常是Python對象琳要,表示一個錯誤。當(dāng)Python腳本發(fā)生異常時我們需要捕獲處理它秤茅,否則程序會終止執(zhí)行稚补。
異常處理
捕捉異常可以使用try/except語句嫂伞。try/except語句用來檢測try語句塊中的錯誤孔厉,從而讓except語句捕獲異常信息并處理拯钻。如果你不想在異常發(fā)生時結(jié)束你的程序,只需在try里捕獲它撰豺。
以下為簡單的try....except...else的語法:
try:
<語句> #運(yùn)行別的代碼
except <名字>:
<語句> #如果在try部份引發(fā)了'name'異常
except <名字>粪般,<數(shù)據(jù)>:
<語句> #如果引發(fā)了'name'異常,獲得附加的數(shù)據(jù)
else:
<語句> #如果沒有異常發(fā)生
#!/usr/bin/python
# -*- coding: UTF-8 -*-
try:
fh = open("testfile", "w")
fh.write("這是一個測試文件污桦,用于測試異常!!")
except IOError:
print "Error: 沒有找到文件或讀取文件失敗"
else:
print "內(nèi)容寫入文件成功"
fh.close()
$ python test.py
Error: 沒有找到文件或讀取文件失敗
Python代碼書寫建議
4個空格縮進(jìn)
單行長度79內(nèi)
注釋獨(dú)占1行
函數(shù)文檔字符串
操作符兩側(cè)空格
類亩歹,函數(shù),變量命名規(guī)范
參數(shù)凡橱、解包小作、變量
在運(yùn)行程序時,可能需要根據(jù)不同的條件稼钩,輸入不同的命令行選項來實現(xiàn)不同的功能顾稀。就需要給程序傳遞不同的輸入,參數(shù)是外部的變量坝撑。<笨辦法學(xué)Python>中給出了很好的解釋:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
from sys import argv
script, first, second, third = argv
print "The script is called:", script
print "Your first variable is:", first
print "Your second variable is:", second
print "Your third variable is:", third
第一行代碼中静秆,我們用到一個import語句,這是將Python的功能模塊加入你自己腳本的方法巡李。Python 不會一下子將它所有的功能提供給你抚笔,而是讓你需要什么就調(diào)用什么。這樣可以讓你的程序更加精簡侨拦,而后面的程序員看到你的代碼的時候殊橙,這些“import”語句可以作為提示,讓他們明白你的代碼用到了哪些功能狱从。
argv就是所謂的“參數(shù)變量(argument variable)”膨蛮,它是一個非常標(biāo)準(zhǔn)的編程術(shù)語。在其他的編程語言里你也可以看到它矫夯。這個變量包含了你傳遞給 Python 的參數(shù)鸽疾。通過后面的練習(xí)你將對它有更多的了解。
代碼的第3行將 argv進(jìn)行“解包(unpack)”训貌,與其將所有參數(shù)放到同一個變量下面,我們將每個參數(shù)賦予一個變量名: script, first, second, 以及 third冒窍。這也許看上去有些奇怪,不過”解包”可能是最好的描述方式了递沪。它的含義很簡單:“把 argv 中的東西解包,將所有的參數(shù)依次賦予左邊的變量名”综液。
$ python ex13.py stuff things that
The script is called: ex13.py
Your first variable is: stuff
Your second variable is: things
Your third variable is: that
對一段程序(函數(shù)也好)參數(shù)可以理解為Windows軟件的一個個按鈕款慨,通過運(yùn)行前的指定來控制程序內(nèi)部的運(yùn)行,已達(dá)到我們需要的輸出要求谬莹。
函數(shù)
說到函數(shù)檩奠,不一樣的人會對它有不一樣的理解和使用方法桩了,不過我只會教你現(xiàn)在能用到的最簡單的使用方式。
函數(shù)可以做三樣事情:
它們給代碼片段命名埠戳,就跟“變量”給字符串和數(shù)字命名一樣井誉。
它們可以接受參數(shù),就跟你的腳本接受argv一樣整胃。
通過使用 #1 和 #2颗圣,它們可以讓你創(chuàng)建“微型腳本”或者“小命令”。
python中你可以使用def新建函數(shù)屁使。
# -*- coding: UTF-8 -*-
mydna= "ACTGCTCTAGCTAAGCA"
def DNA_complement(sequence):
sequence = sequence.upper()
sequence = sequence.replace('A', 't')
sequence = sequence.replace('T', 'a')
sequence = sequence.replace('C', 'g')
sequence = sequence.replace('G', 'c')
return sequence.upper()
def DNA_reverse(sequence):
sequence = sequence.upper()
return sequence[::-1]
print DNA_complement(mydna)
print DNA_reverse(DNA_complement(mydna)) #反向互補(bǔ)序列
TGACGAGATCGATTCGT
TGCTTAGCTAGAGCAGT
文件讀寫
讀寫文件就是請求操作系統(tǒng)打開一個文件對象(文件描述符)在岂,然后通過操作系統(tǒng)提供的接口從這個文件對象中讀寫文件。Python 提供了必要的函數(shù)和方法進(jìn)行默認(rèn)情況下的文件基本操作蛮寂。你可以用 file 對象做大部分的文件操作蔽午。
file object = open(file_name [, access_mode][, buffering])
- file_name:file_name變量是一個包含了你要訪問的文件名稱的字符串值。
- access_mode:access_mode決定了打開文件的模式:只讀酬蹋,寫入及老,追加等。所有可取值見如下的完全列表除嘹。這個參數(shù)是非強(qiáng)制的写半,默認(rèn)文件訪問模式為只讀(r)。
- buffering:如果buffering的值被設(shè)為0尉咕,就不會有寄存叠蝇。如果buffering的值取1,訪問文件時會寄存行年缎。如果將buffering的值設(shè)為大于1的整數(shù)悔捶,表明了這就是的寄存區(qū)的緩沖大小。如果取負(fù)值单芜,寄存區(qū)的緩沖大小則為系統(tǒng)默認(rèn)蜕该。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 打開一個文件
fo = open("foo.txt", "w")
fo.write( "www.runoob.com!\nVery good site!\n")
# 關(guān)閉打開的文件
fo.close()
try:
with open("1.log", "r") as f:
print(f.read())
except:
print("打開文件異常")
當(dāng)我們寫文件時,系統(tǒng)往往不會立即寫入洲鸠,而是先放到內(nèi)存里緩存起來堂淡,空閑時慢慢寫入。只有調(diào)用close()方法時扒腕,操作系統(tǒng)才能立即寫入绢淀。為了防止忘記調(diào)用close(),所以用with語句比較保險
os文件管理
在 Linux 中瘾腰,操作系統(tǒng)提供了很多的命令(例如:ls皆的、cd),用于文件和目錄管理蹋盆。在 Python 中费薄,有一個 os 模塊硝全,也提供了許多便利的方法來管理文件和目錄。
os:語義為操作系統(tǒng)楞抡。所以伟众,os 模塊提供的肯定是操作系統(tǒng)相關(guān)的功能了(與具體的平臺無關(guān))。
如果用 dir() 查看 os拌倍,會發(fā)現(xiàn)內(nèi)容相當(dāng)多赂鲤。下面,只列出文件和目錄的相關(guān)方法:
目的 | 方法 |
---|---|
得到當(dāng)前工作目錄柱恤,即當(dāng)前Python腳本工作的目錄路徑: | os.getcwd() |
返回指定目錄下的所有文件和目錄名: | os.listdir() |
刪除一個文件: | os.remove() |
刪除多個目錄: | os.removedirs() |
檢驗給出的路徑是否是一個文件: | os.path.isfile() |
檢驗給出的路徑是否是一個目錄: | os.path.isdir() |
判斷是否是絕對路徑: | os.path.isabs() |
檢驗給出的路徑是否真的存在: | os.path.exists() |
返回一個路徑的目錄名和文件名: | os.path.split() |
分離擴(kuò)展名: | os.path.splitext() |
獲取路徑名: | os.path.dirname() |
獲取文件名: | os.path.basename() |
運(yùn)行shell命令: | os.system() |
讀取和設(shè)置環(huán)境變量: | os.getenv() |
給出當(dāng)前平臺使用的行終止符: | os.linesep(Windows使用'\r\n'数初,Linux使用'\n'而Mac使用'\r') |
指示你正在使用的平臺: | os.name |
重命名: | os.rename(old, |
創(chuàng)建多級目錄: | os.makedirs() |
創(chuàng)建單個目錄: | os.mkdir() |
獲取文件屬性: | os.stat(file) |
修改文件權(quán)限與時間戳: | os.chmod(file) |
終止當(dāng)前進(jìn)程: | os.exit() |
獲取文件大小: | os.path.getsize() |
轉(zhuǎn)換path的大小寫和斜杠: | os.path.normcase(path) |
規(guī)范path字符串形式: | os.path.normpath(path) |
返回path的真實路徑: | os.path.realpath(path) |
從start開始計算相對路徑: | os.path.relpath(path[,start]) |
切換目錄: | os.chdir("path") |
如何用Python解決我們的問題
知道基本的數(shù)據(jù)類型以及語法結(jié)構(gòu)梗顺,遇到問題就可以考慮用Python來解決了泡孩。那么如何用程序來解決問題呢?
我想給你介紹一個使用python創(chuàng)建某類東西的過程寺谤,也就是“面向?qū)ο缶幊獭保∣OP)仑鸥。我把它叫做一個過程,是因為我將給出一系列按順序進(jìn)行的步驟变屁,但是你也不應(yīng)該死板的遵循這個步驟眼俊,企圖用它解決所有難題。它們對于許多編程問題只是一個良好的開頭粟关,而不應(yīng)該被認(rèn)為是解決這些問題的唯一方法疮胖。這個過程只是一個你可以遵循的方法:
寫出或畫出你的問題
從1中提煉關(guān)鍵問題并搜索相關(guān)資料
為2中的問題創(chuàng)建一個有層次結(jié)構(gòu)的類和對象映射
編寫類和測試代碼,并保證他們運(yùn)行
重復(fù)并精煉
按照這個順序執(zhí)行流程闷板,叫做“自頂向下”的方式澎灸,意思是說,它從非常抽象寬松的想法開始遮晚,然后慢慢提煉性昭,直到想法是堅實的東西,然后你再開始編碼县遣。
首先我只是寫出這個問題糜颠,并試圖想出任何我想要的東西就可以了。也許我會畫一兩個圖表萧求,或者某種可能的地圖括蝠,甚至給自己寫了一系列的電子郵件描述這個問題。這給了我表達(dá)了問題的關(guān)鍵概念的方法饭聚,并探測出我對于這個游戲有什么具體的想法和了解。
接下來搁拙,我瀏覽這些筆記秒梳,圖表以及描述法绵,通過這些記錄我找到我需要的關(guān)鍵問題點(diǎn)。有一個簡單的技巧:
簡單地列出你的筆記和圖表中所有的名詞和動詞,然后寫出他們是如何相關(guān)的酪碘。
這一步其實也我為我下一步要寫的類朋譬、對象、以及函數(shù)等提供了命名列表兴垦。我利用這個概念列表徙赢,研究任何我不明白的地方,如果我需要探越,我還可以進(jìn)一步完善它們狡赐。
一旦我完成這個列表,我可以創(chuàng)建的一個簡單的輪廓/樹用來說明這些概念之間的關(guān)系钦幔。你還可以對著你的名詞列表并詢問“這個名詞和其他的是一個概念嗎枕屉?或者它們有一個通用的父類嗎,那它們的父類是什么鲤氢?”持續(xù)檢查搀擂,直到你得到一個有層次結(jié)構(gòu)的類,它應(yīng)該像一棵簡單的樹或者圖表卷玉。然后檢查你的動詞列表哨颂,看它們是否可以作為函數(shù)的名字添加到你的類樹種。
隨著這棵類樹的生成相种,我坐下來寫一些基本的框架代碼威恼,代碼中只包括剛才提到的類,類中包含的函數(shù)。然后我再寫一個測試用例窍育,用來檢驗我剛才寫的類是正確的沙咏。有時候我可能只需要在開始寫一段測試代碼,但是更多的時候蒂破,我需要寫一段測試,再寫一段代碼别渔,再寫一段測試...直到整個項目完成附迷。
代碼是測試出來的。
Python庫:電池
python內(nèi)置了眾多預(yù)編譯并可移植的功能模塊哎媚,涵蓋了從字符模式到網(wǎng)絡(luò)編程等一系列應(yīng)用級編程任務(wù)喇伯;此外,python可通過自行開發(fā)的庫和眾多的第三方庫簡化編程拨与,第三方庫包括網(wǎng)站開發(fā)稻据、數(shù)值計算、串口編寫买喧、游戲開發(fā)等各個應(yīng)用場景捻悯。
往往一個庫是針對某一個問題的一套解決方案匆赃,如office辦公自動化,web開發(fā)等今缚。沿著一個庫來系統(tǒng)學(xué)習(xí)某一領(lǐng)域算柳,也是一個不錯的選擇。
學(xué)習(xí) python 文檔的原則就是:熟悉常用庫的大部分常用API姓言。
string:包含各種簡單的字符串處理方法瞬项,對于簡單的字符串處理操作使用這里面的方法即可,不要動不動就寫個正則表達(dá)式何荚。
re:字符處理終極模塊囱淋。好好掌握正則表達(dá)式語法,掌握里面的幾個匹配方法兽泣,掌握 Match Object 的用法绎橘,捕獲組的用法等。需要指出的是如果能用 string 模塊處理的就盡量不用正則表達(dá)式唠倦,殺雞不用牛刀称鳞。
datetime,calender:我對于涉及時間處理的情況倒不多稠鼻,一般就是獲取一下當(dāng)前時間冈止,根據(jù)時間的字符串構(gòu)造 datetime 對象,格式化時間輸出等候齿,因此掌握其常用的幾個對象和方法即可熙暴。
math,random慌盯,statistics:非專門的數(shù)學(xué)程序偶爾也會涉及一點(diǎn)數(shù)學(xué)運(yùn)算周霉,這幾個模塊提供了最基本的數(shù)學(xué)運(yùn)算方法。當(dāng)然專門的數(shù)學(xué)計算我會使用 numpy亚皂,pandas 等俱箱。然而掌握標(biāo)準(zhǔn)庫的基本模塊同樣很重要,你不會想為了一個簡單的需求而不得不去安裝一個 numpy灭必。
怎樣學(xué)習(xí)任何一種編程語言
- 找到關(guān)于這種語言的介紹性讀物
- 通讀這讀物狞谱,把里邊的代碼寫下來并運(yùn)行起來。
- 一邊讀書一邊寫代碼禁漓,同時做好筆記
- 使用這種語言實現(xiàn)一些你用另一種熟悉的語言做過的程序組件跟衅。
- 閱讀別人使用這種語言寫的代碼,試著仿照他們的方式寫代碼播歼。
https://www.python.org/
Python簡史
《Python之禪》的翻譯和解釋
你為什么用 Python伶跷?
為什么要學(xué)習(xí)Python?這10個理由足夠了!
學(xué)習(xí)Python的4個原因
https://www.oschina.net/news/106438/tiobe-index-201905
理解Python中列表撩穿,元組磷支,字典,集合的區(qū)別
練習(xí)13.參數(shù), 解包, 變量
Python實現(xiàn)DNA序列互補(bǔ)食寡、反向、反向互補(bǔ)
https://realpython.com/what-can-i-do-with-python/
https://plot.ly/
怎么成為python的調(diào)包俠廓潜?
43:基本的面向?qū)ο蟮姆治龊驮O(shè)計
https://www.zhihu.com/question/22100190