python 基礎(chǔ) :數(shù)值,鏈表每辟,字符串
很多網(wǎng)站上都有python教程,不一而足剑辫,本篇教程會結(jié)合我在實際開發(fā)過程中遇到的問題,總結(jié)出很多有意思的小tricks渠欺。我會把你當(dāng)做python小白來看待妹蔽,所以不要心急和擔(dān)心,一步步的討教一下python的招式。
數(shù)值
python是一門動態(tài)語言胳岂,它可以在運行時聲明和使用變量编整,同時它也是一種強類型的語言,這一點有別于PHP乳丰,python會提供強制類型轉(zhuǎn)換的方法掌测,與java類似,但是PHP的話編譯器會自動識別你所運用的變量到底是哪種類型产园。
注意:‘123’可以通過int()來轉(zhuǎn)化成123汞斧,但是別的非數(shù)字字符串就不可
更準(zhǔn)確來說,它也滿足遇強則強的類型強制轉(zhuǎn)換規(guī)則什燕,最明顯的就是在兩個數(shù)相除的時候粘勒。
同時python也是支持復(fù)數(shù)運算的一門語言,虛部由一個后綴"j"或者"J"來表示屎即。帶有非零實部的復(fù)數(shù)記為"real+imagj"庙睡,或者通過complex(real, img)
函數(shù)創(chuàng)建。記得以前c++中最經(jīng)典的一些題目就是重載+運算符剑勾,使其可以支持復(fù)數(shù)運算埃撵。來看幾個例子:
>>> 1j * 1J
(-1+0j)
>>> 1j * complex(0,1)
(-1+0j)
>>> 3+1j*3
(3+3j)
>>> (3+1j)*3
(9+3j)
>>> (1+2j)/(1+1j)
(1.5+0.5j)
假設(shè)復(fù)數(shù)為z赵颅,那么它的實部就為z.real 虛部就為z.imag
>>> a=1.5+0.5j
>>> a.real
1.5
>>> a.imag
0.5
注意
不能將復(fù)數(shù)轉(zhuǎn)化成常用的變量類型虽另。你可以用abs函數(shù)取模。
trick:
在shell交互模式下饺谬,最近一次的計算結(jié)果保存在變量_(下劃線)中捂刺,這樣就可以很方便的進行運算操作。
字符串
python里面有一個string的module募寨,我們先從最基本的開始講起族展。
想必你對轉(zhuǎn)義字符并不陌生,在python中也保留了這一轉(zhuǎn)義傳統(tǒng)拔鹰,加入你在字符后面打上\仪缸,說明接下來的字符串是\之前的邏輯后綴:
>>>hello = "This is a rather long string containing\n \several lines of text just as you would do in C.\n\
Note that whitespace at the beginning of the line is
\significant."
print hello
將得到
This is a rather long string containing
several lines of text just as you would do in C.
Note that whitespace at the beginning of the line is significant.
那么很明顯,‘\n’就是我們熟悉的換行列肢,\是邏輯繼續(xù)符號恰画。具體的輸出格式你需要根據(jù)自己的shell跑跑看。
trick:
如果我們創(chuàng)建一個“行”("raw")字符串瓷马,\ n序列就不會轉(zhuǎn)為換行拴还,源碼中的反斜杠和換行符n都會做為字符串中的數(shù)據(jù)處理
hello = r"This is a rather long string containing\n\
several lines of text much as you would do in C."
print hello
你將得到:
This is a rather long string containing\n\
several lines of text much as you would do in C.
但是:
r allow \t to be interpreted as the two characters \ and t
也就是說:r‘\t’得到的是\\t
如果你還是嫌太麻煩,那么就用三引號(""")來包裹字符串欧聘,這樣的話兩個三引號之間不需要進行行尾換行處理片林。
同時,就像你想的那樣,字符串可以相加可以乘以一個數(shù)字進行成倍的復(fù)制费封,更令人吃驚的時兩個字符串的值可以自動的粘黏在一起:
>>>'str''ing'
>>>'string'
但是這個功能僅僅針對字符串常量焕妙。
接下來要講到的一個字符串的功能跟python中的數(shù)組有莫大的關(guān)聯(lián),其實這句話是廢話孝偎,一般而言字符串也不過就是一個儲存在內(nèi)存中的字符數(shù)組访敌,但是我這句話的本意是想表達(dá),python的數(shù)組衣盾,更嚴(yán)格來講是list寺旺,有一個很強大的功能,那就是切片
势决。
初學(xué)者可能還無法領(lǐng)會切片使用的奧義阻塑,那么我們來舉幾個例子你就能體會為什么這個功能是很多人選擇python的理由。
+---+---+---+---+---+
| H | e | l | p | A |
+---+---+---+---+---+
0 1 2 3 4 5
-5 -4 -3 -2 -1
上圖展示了python列表下標(biāo)的情況果复,python的list可以進行負(fù)索引操作:
>>> word[-1] # The last character
'A'
>>> word[-2] # The last-but-one character
'p'
>>> word[-2:] # The last two characters
'pA'
>>> word[:-2] # Everything except the last two
'Hel'
切片操作有一個很有用的不變性:
>>> word[:2] + word[2:]
'HelpA'
>>> word[:3] + word[3:]
'HelpA'
所以現(xiàn)在你回頭看看你以前熟悉的那些硬語言陈莽,沒有哪一種是可以像這樣操作數(shù)組或者列表的,這樣就給數(shù)據(jù)結(jié)構(gòu)和算法提供的莫大的方便虽抄。鏈表的操作跟上述的操作道理是一樣的走搁。這里不贅述了。
下面我們來看看string module
在介紹python中的核心概念module之前迈窟,相比你們都嘗試過import這個功能私植,沒錯,python的強大之處就在于它的第三方包车酣,這些包在python簡潔的基礎(chǔ)之上又進行了整理曲稼,使得語法更加的簡單明了,更加地人性化湖员。這里我們以string這個module為例子贫悄,介紹一下有關(guān)module的使用,希望大家可以舉一反三娘摔。
無論對于哪一種語言來講窄坦,字符串的操作是重中之重,為此大部分語言都將其作為一個單獨的類或者包列出來凳寺,提供對字符串操作的方法鸭津。python也不例外。
首先打開你的終端(linux用戶读第,windows就cmd吧)曙博,分別輸入以下命令:
1 python
2 import stirng
3 dir(string)
會出現(xiàn)以下一大坨:
['Formatter', 'Template', '_TemplateMetaclass', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '_float', '_idmap', '_idmapL', '_int', '_long', '_multimap', '_re', 'ascii_letters', 'ascii_lowercase', 'ascii_uppercase', 'atof', 'atof_error', 'atoi', 'atoi_error', 'atol', 'atol_error', 'capitalize', 'capwords', 'center', 'count', 'digits', 'expandtabs', 'find', 'hexdigits', 'index', 'index_error', 'join', 'joinfields', 'letters', 'ljust', 'lower', 'lowercase', 'lstrip', 'maketrans', 'octdigits', 'printable', 'punctuation', 'replace', 'rfind', 'rindex', 'rjust', 'rsplit', 'rstrip', 'split', 'splitfields', 'strip', 'swapcase', 'translate', 'upper', 'uppercase', 'whitespace', 'zfill']
這些就是string這個module里面所包含的默認(rèn)屬性以及方法(屬于類以級別,可按照java中的類方法理解)怜瞒,那些奇奇怪怪的下劃線看不懂不要緊父泳,下一篇文章我會解釋般哼。如果想知道其中某個函數(shù)比如find的用法,請在終端這么做:help(string.find)
惠窄,那么就會出現(xiàn):
Help on function find in module string:
find(s, *args)
find(s, sub [,start [,end]]) -> in
Return the lowest index in s where substring sub is found,
such that sub is contained within s[start,end]. Optional
arguments start and end are interpreted as in slice notation.
Return -1 on failure.
(END)
它會給你一個抽象方法和一個具體方法蒸眠,如上,星號看不懂也沒有關(guān)系杆融,下章會講楞卡,僅僅先當(dāng)做參數(shù)。
注意:
在終端中脾歇,(END)是高亮的蒋腮,你閱讀完了以后,直接按'q'藕各,就會返回到>>>提示符池摧,可以繼續(xù)操作。不然這個既不想vim也不像emacs的東西會搞得你頭大激况。
那么string中常見的幾個函數(shù)用法給大家列一下作彤,具體情況具體help
string.atof(s)# Convert to float
string.atoi(s)# Convert to integer
string.atol(s)# Convert to long
string.count(s,pattern)# Count occurrences of pattern in s
string.find(s,pattern)# Find pattern in s
string.split(s, sep)# String a string
string.join(strlist, sep) # Join a list of string
string.replace(s,old,new) # Replace occurrences of old with new
高度預(yù)警:
函數(shù)'atoi'可以把string類型變量轉(zhuǎn)化為int類型變量,但是僅限于轉(zhuǎn)數(shù)字字符串類型
s='string'
s=string.atoi(s)#錯誤
s = '123'
s=string.atoi(s)#正確
那么第一章就以string module結(jié)尾乌逐。
未完待續(xù)竭讳,求打臉,求評論浙踢,求口水绢慢。