Python语言学习笔记
獲得人生中的成功需要的專注與堅(jiān)持不懈多過天才與機(jī)會(huì)。? ——C.W. Wendte
Python將很快成為你最喜歡的編程語言!
Qt庫? ?PyQt ?Perl-Qt
?
簡單易學(xué),功能強(qiáng)大,高效率的高層數(shù)據(jù)結(jié)構(gòu),簡單而有效地實(shí)現(xiàn)面向?qū)ο缶幊獭?/p>
Python簡潔的語法和對(duì)動(dòng)態(tài)輸入的支持,再加上解釋性語言的本質(zhì),使得它在大多數(shù)平臺(tái)上的許多領(lǐng)域都是一個(gè)理想的腳本語言,特別適用于快速的應(yīng)用程序開發(fā)。
注重的是如何解決問題而不是編程語言的語法和結(jié)構(gòu)。
wxPython,Twisted,Boa Constructor
?
?
特色:
簡單、易學(xué)
免費(fèi)、開源:Python是FLOSS(自由/開放源碼軟件)之一。
高層語言:不必糾結(jié)管理程序使用內(nèi)存等底層的東西
可移植性:
如果你小心地避免使用依賴于系統(tǒng)的特性,那么你的所有Python程序無需修改就可以在下述任何平臺(tái)上面運(yùn)行。
Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE甚至還有PocketPC!這是因?yàn)樽鳛榻忉屍鞯膒ython有各種系統(tǒng)所對(duì)應(yīng)的版本。
解釋性:一個(gè)用編譯性語言比如C或C++寫的程序可以從源文件(即C或C++語言)轉(zhuǎn)換到一個(gè)你的計(jì)算機(jī)使用的語言(二進(jìn)制代碼,即0和1)。這個(gè)過程通過編譯器和不同的標(biāo)記、選項(xiàng)完成。當(dāng)你運(yùn)行你的程序的時(shí)候,連接/轉(zhuǎn)載器軟件把你的程序從硬盤復(fù)制到內(nèi)存中并且運(yùn)行。
而Python語言寫的程序不需要編譯成二進(jìn)制代碼。你可以直接從源代碼運(yùn)行程序。在計(jì)算機(jī)內(nèi)部,Python解釋器把源代碼轉(zhuǎn)換成稱為字節(jié)碼的中間形式,然后再把它翻譯成計(jì)算機(jī)使用的機(jī)器語言并運(yùn)行。事實(shí)上,由于你不再需要擔(dān)心如何編譯程序,如何確保連接轉(zhuǎn)載正確的庫等等,所有這一切使得使用Python更加簡單。由于你只需要把你的Python程序拷貝到另外一臺(tái)計(jì)算機(jī)上,它就可以工作了,這也使得你的Python程序更加易于移植。
只要運(yùn)行程序的計(jì)算機(jī)上裝有Python及程序所用的相關(guān)的庫,那么就可運(yùn)行。因?yàn)樗墙忉屝驼Z言,將大部分工作都交由工具環(huán)境來解決,所以程序本身移植性很強(qiáng)。
面向?qū)ο?Python支持面向過程的編程也支持面向?qū)ο蟮木幊獭?/p>
面向過程:程序是由過程或可重用代碼的函數(shù)構(gòu)建起來的。面向?qū)ο?#xff1a;程序是由數(shù)據(jù)和功能組合而成的對(duì)象構(gòu)建而成的。
?
可擴(kuò)展性:如果你需要你的一段關(guān)鍵代碼運(yùn)行得更快或者希望某些算法不公開,可以把你的部分程序用C或C++編寫,然后在你的Python中使用。
可嵌入性:可以把Python嵌入C/C++程序,從而向你的程序用戶提供腳本功能。
腳本功能?
豐富的庫:Python標(biāo)準(zhǔn)庫確實(shí)很龐大。它可以幫助你處理各種工作,包括正則表達(dá)式、文檔生成、單元測試、線程、數(shù)據(jù)庫、網(wǎng)頁瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV文件、密碼系統(tǒng)、GUI(圖形用戶界面)、Tk和其他與系統(tǒng)有關(guān)的操作。記住,只要安裝了Python,所有這些功能都是可用的。這被稱作Python的“功能齊全”理念。
除了標(biāo)準(zhǔn)庫以外,還有許多其他高質(zhì)量的庫,如wxPython、Twisted和Python圖像庫等等。
?
關(guān)于Perl
Perl是另外一種極其流行的開源解釋性編程語言。Perl編寫大型程序時(shí)顯示出其不方便。
Perl唯一也是十分重要的優(yōu)勢是它龐大的CPAN庫——綜合Perl存檔網(wǎng)絡(luò)。就如同這個(gè)名字所指的意思一樣,這是一個(gè)巨大的Perl模塊集,它大得讓人難以置信——你幾乎用這些模塊在計(jì)算機(jī)上做任何事情。
新的Parrot虛擬機(jī)按設(shè)計(jì)可以運(yùn)行完全重新設(shè)計(jì)的Perl 6也可以運(yùn)行Python和其他解釋性語言如Ruby、PHP和Tcl等等。這意味著你將來或許可以在Python上使用所有Perl的模塊。這將成為兩全其美的事——強(qiáng)大的CPAN庫與強(qiáng)大的Python語言結(jié)合在一起。
其他解釋性語言如Ruby、PHP和Tcl等等。
OpenSource.org和UserLinux項(xiàng)目
?
Linux、BSD下安裝Python,Windows下安裝Python。
shell程序?什么是shell、cmd等等
在計(jì)算機(jī)科學(xué)中,Shell俗稱殼(用來區(qū)別于核),是指“提供使用者使用界面”的軟件(命令解析器)。它類似于DOS下的command和后來的cmd.exe。它接收用戶命令,然后調(diào)用相應(yīng)的應(yīng)用程序。
?
網(wǎng)上的Python安裝包,指的是什么?
該軟件包含編程所需要的模組和編譯調(diào)試所需要的基本工具。
?
IDLE程序
IDLE是開發(fā)python程序的基本IDE(集成開發(fā)環(huán)境),具備基本的IDE的功能,是非商業(yè)Python開發(fā)的不錯(cuò)的選擇。當(dāng)安裝好python以后,IDLE就自動(dòng)安裝好了,不需要另外去找。是用python+tkinter寫的。該環(huán)境當(dāng)然支持編輯功能,網(wǎng)上很多人將IDEL簡單地認(rèn)為是編輯器。
C:\Python27\Lib\idlelib 可找到IDLE運(yùn)行。
python的編譯器就是pythonw.exe,解釋器就是python.exe(交互式shell)
python.exe和pythonw.exe區(qū)別?
在Windows命令行中使用Python?
從CMD命令行中啟動(dòng)python解釋器,需要在windows中設(shè)置環(huán)境變量,如果安裝的是python(x,y),那么應(yīng)會(huì)自動(dòng)寫進(jìn)了環(huán)境變量。
如何退出?window下Ctrl-z,Linux下Ctrl-d
?
window命令行指什么?如何使用??? 環(huán)境變量?
Linux的包管理軟件
?
編輯器:基本要求有語法高亮,文本縮進(jìn)?
Notepad 即記事本,沒有自動(dòng)文本縮進(jìn)功能
可用IDLE環(huán)境的編輯器?? VIM,Emacs(Linux)代碼編輯器
Python編輯器列表 支持Python的IDE列表
一旦開始編寫大型Python程序,IDE確實(shí)很有用
?
?
Hello World,它是編程之神的傳統(tǒng)咒語,可以幫助你更好的學(xué)習(xí)語言。
cmd和系統(tǒng)命令行?
CMD常用命令
lnk 文件是用于指向其他文件(如,程序)的一種文件。這些文件通常稱為快捷方式文件。通常它以快捷方式放在桌面上。以方便使用者快速的調(diào)用,其擴(kuò)展名為.lnk。
Python是大小寫敏感的
注釋 ——任何在#符號(hào)右面的內(nèi)容都是注釋
#!/usr/bin/python?? 這是條特殊的注釋,后面跟著一個(gè)程序。這行告訴你的Linux/Unix系統(tǒng)當(dāng)執(zhí)行你的程序的時(shí)候,它應(yīng)該運(yùn)行哪個(gè)解釋器。(python解釋器有幾種?)
對(duì)于Python來說,程序、腳本或者軟件都是指同一個(gè)東西。
?
PATH變量?
如果你希望你的程序能夠從各個(gè)位置運(yùn)行呢?那樣的話,你可以把你的程序保存在PATH環(huán)境變量中的目錄之一。每當(dāng)你運(yùn)行任何程序,系統(tǒng)會(huì)查找列在PATH環(huán)境變量中的各個(gè)目錄。然后運(yùn)行那個(gè)程序。你只要簡單地把這個(gè)源文件復(fù)制到PATH所列目錄之一就可以使你的程序在任何位置都可用了。
這里指的運(yùn)行是指在命令行直接輸入程序名運(yùn)行。(如果遇到重名可怎么辦)?
help() 括號(hào)中填對(duì)象 按q可退出幫助
?
在Python中有4種類型的數(shù)
整數(shù)、長整數(shù)、浮點(diǎn)數(shù)、復(fù)數(shù)??? 2、3.23E-4、2.3+5j
變量不必要進(jìn)行聲明。
?
字符串? 單引號(hào)、雙引號(hào)(在其中可自由使用單引號(hào))??
啥區(qū)別?
三引號(hào):指示多行的字符串,在其中可自由使用單雙引號(hào)
轉(zhuǎn)義符:\’?? \’’? \\?
行末的單獨(dú)一個(gè)反斜杠表示字符串在下一行繼續(xù),而不是開始一個(gè)新的行。
自然字符串? r"Newlines are indicated by \n"? 字符串為字面本身,轉(zhuǎn)義字符失效
一定要用自然字符串處理正則表達(dá)式
?
Unicode字符串:Unicode是書寫國際文本的標(biāo)準(zhǔn)方法。如果你想要用你的母語如北印度語或阿拉伯語寫文本,那么你需要有一個(gè)支持Unicode的編輯器。類似地,Python允許你處理Unicode文本——你只需要在字符串前加上前綴u或U。例如,u"This is a Unicode string."。
如果你把兩個(gè)字符串按字面意義相鄰放著,他們會(huì)被Python自動(dòng)級(jí)連。
語句如下? print “what is your ” “name”
在Python中沒有專門的char數(shù)據(jù)類型。
?
標(biāo)示符規(guī)則,字母下劃線數(shù)字組成,數(shù)字不可開頭
使用變量時(shí)只需要給它們賦一個(gè)值。不需要聲明或定義數(shù)據(jù)類型。(會(huì)根據(jù)輸入自動(dòng)區(qū)分是哪種類型的數(shù)據(jù),這點(diǎn)確實(shí)比C要好玩,與Matlab語句一樣)
在一個(gè)物理行中寫多個(gè)邏輯行:用分號(hào);實(shí)現(xiàn)
多個(gè)物理行寫一個(gè)邏輯行:即語句分行 用’’’或者\(yùn)實(shí)現(xiàn)或者圓括號(hào)、方括號(hào)、波形括號(hào)
強(qiáng)烈建議堅(jiān)持在每個(gè)物理行只寫一句邏輯行,少用分號(hào)
有時(shí)候,有一種暗示的假設(shè),可以使你不需要使用反斜杠。這種情況出現(xiàn)在邏輯行中使用了圓括號(hào)、方括號(hào)或波形括號(hào)的時(shí)候。這被稱為暗示的行連接。
print ‘the value is’,i
?
空白在Python中是重要的。事實(shí)上行首的空白是重要的。它稱為縮進(jìn)。在邏輯行首的空白(空格和制表符)用來決定邏輯行的縮進(jìn)層次,從而用來決定語句的分組。
這意味著同一層次的語句必須有相同的縮進(jìn)。每一組這樣的語句稱為一個(gè)塊。
如何縮進(jìn)
不要混合使用制表符和空格來縮進(jìn),因?yàn)檫@在跨越不同的平臺(tái)的時(shí)候,無法正常工作。我強(qiáng)烈建議你在每個(gè)縮進(jìn)層次使用單個(gè)制表符或兩個(gè)或四個(gè)空格 。
選擇這三種縮進(jìn)風(fēng)格之一。更加重要的是,選擇一種風(fēng)格,然后一貫地使用它,即只使用這一種風(fēng)格。
?
就每一個(gè)東西包括數(shù)、字符串甚至函數(shù)都是對(duì)象這一點(diǎn)來說,Python是極其完全地面向?qū)ο蟮摹?/p>
運(yùn)算符
**? 冪 返回x的y次冪
//? 取整除
<< 位左移? >> 位右移?? 注意,此處不是循環(huán)移位
& 按位與? |按位或? ^ 按位異或 ~ 按位翻轉(zhuǎn)?? ???如 3&3=3
邏輯運(yùn)算符?? 兩個(gè)布爾常量? True(1)? Fasle
<? >? <=? >=? !=? ==? not 布爾非 and布爾與? or布爾或
運(yùn)算符的優(yōu)先級(jí)? 有個(gè)表格!
'la' * 3得到'lalala'? 'a' + 'b'得到'ab'
4/3得到1(整數(shù)的除法得到整數(shù)結(jié)果)。4.0/3或4/3.0得到1.3333333333333333
4 // 3.0得到1.0
x的按位翻轉(zhuǎn)是-(x+1) ~5得到-6???? 求反后再+1? 得到的則是相反數(shù)
比較可以被任意連接:3 < 5 < 7返回True。
?
x = False; y = True; x and y,由于x是False,返回False。在這里,Python不會(huì)計(jì)算y,因?yàn)樗肋@個(gè)表達(dá)式的值肯定是False(因?yàn)閤是False)。這個(gè)現(xiàn)象稱為短路計(jì)算。
?
三種控制流語句
if語句
if? 邏輯表達(dá)式:
? ?塊語句
elif 邏輯表達(dá)式:
?? 塊語句
else:
塊語句
冒號(hào)表示后面跟一個(gè)語句塊
guess=int(raw_input())函數(shù)取得用戶猜測的數(shù)字。函數(shù)只是重用的程序段。
輸入對(duì)于raw_input函數(shù)來說是一個(gè)字符串。我們通過int把這個(gè)字符串轉(zhuǎn)換為整數(shù),并把它存儲(chǔ)在變量guess中。
事實(shí)上,int是一個(gè)類,不過你想在對(duì)它所需了解的只是它把一個(gè)字符串轉(zhuǎn)換為一個(gè)整數(shù)(假設(shè)這個(gè)字符串含有一個(gè)有效的整數(shù)文本信息)。
在Python中沒有switch語句。你可以使用if..elif..else語句來完成同樣的工作(在某些場合,使用字典會(huì)更加快捷。)
?
while 循環(huán)
while 邏輯表達(dá)式:
???? 循環(huán)體
else:
???? 語句塊
?
當(dāng)循環(huán)跳出時(shí)會(huì)到else處,else其實(shí)是多余的,但若循環(huán)中有break語句,那么加與不加就有點(diǎn)區(qū)別了。
?
for循環(huán)
for i in range(1,5):
print i
else:
print ‘The for loop is over’
?
range(a,b,c)? 用于產(chǎn)生a到b之間的序列,步進(jìn)為c,默認(rèn)為1。并且不包括b。
廣義來說,我們可以使用任何種類的由任何對(duì)象組成的序列!
?
break語句
len(str)函數(shù)? 獲得字符串長度
如果你從for或while循環(huán)中終止,任何對(duì)應(yīng)的循環(huán)else塊將不執(zhí)行
?
continue語句
函數(shù)即可重用的程序段。 用def關(guān)鍵字定義。
已經(jīng)使用了許多內(nèi)建的函數(shù),比如len和range。
def sayhello():
?? print ‘Hello World!’
def 函數(shù)名(形參列表):
語句塊
?
局部變量:在一個(gè)塊語句內(nèi)定義,作用域和生命期都在該語句塊內(nèi)。在里面操作,外面的重名變量不受影響。
?
全局變量 global語句?? global x,y,z
global語句被用來聲明x是全局的——因此,當(dāng)我們?cè)诤瘮?shù)內(nèi)把值賦給x的時(shí)候,這個(gè)變化也反映在我們?cè)谥鲏K中使用x的值的時(shí)候。
在函數(shù)內(nèi)使用global,說明該變量是在函數(shù)外部定義的。
如果你想要為一個(gè)定義在函數(shù)外的變量賦值,那么你就得告訴Python這個(gè)變量名不是局部的,而是全局的。我們使用global語句完成這一功能。沒有g(shù)lobal語句,是不可能為定義在函數(shù)外的變量賦值的。
默認(rèn)參數(shù)值的設(shè)置
def say(message,times=1):
print message*times???? #竟然還可以用這種手段
有默認(rèn)參數(shù)值的形參必須放在后面? say(‘hello’)? 才能判別參數(shù)是給第一個(gè)形參的
只有在形參表末尾的那些參數(shù)可以有默認(rèn)參數(shù)值,即你不能在聲明函數(shù)形參的時(shí)候,先聲明有默認(rèn)值的形參而后聲明沒有默認(rèn)值的形參。這是因?yàn)橘x給形參的值是根據(jù)位置而賦值的。
?
關(guān)鍵參數(shù):我們使用名字(關(guān)鍵字)而不是位置(我們前面所一直使用的方法)來給函數(shù)指定實(shí)參。func(c=50,a=100)?? #用這種方式來調(diào)用可以罔顧賦參順序
更自由地賦參
def func(a, b=5, c=10):
??? print 'a is', a, 'and b is', b, 'and c is', c
func(3, 7)
func(25, c=24)
func(c=50, a=100)
?
return 語句 于函數(shù)中返回函數(shù)中內(nèi)部的局部值
= =b Python里還真看不到分號(hào)啊
注意,沒有返回值的return語句等價(jià)于return None。None是Python中表示沒有任何東西的特殊類型。例如,如果一個(gè)變量的值為None,可以表示它沒有值。
除非你提供你自己的return語句,每個(gè)函數(shù)都在結(jié)尾暗含有return None語句。
x=None
print x??? #什么都沒輸出
pass語句在Python中表示一個(gè)空的語句塊。
?
DocStrings 文檔字符串
在函數(shù)中用
‘’’----------------------
--------空一行----------
-------------------------‘’’????? 來說明這個(gè)函數(shù)的使用方法
使程序更易讀,且可在運(yùn)行時(shí),查看函數(shù)文檔字符串屬性。
print printMax._doc_ ??????函數(shù)在Python中也被看做一個(gè)對(duì)象! . 操作符
?
強(qiáng)烈建議:對(duì)你所寫的任何正式函數(shù)編寫文檔字符串
隨你的Python發(fā)行版附帶的pydoc命令,與help()類似地使用DocStrings。
?
為什么程序運(yùn)行時(shí)要指定命令行參數(shù)? 如,main()函數(shù)的形參就有個(gè)命令行,是用于指定什么的?
?
Python標(biāo)準(zhǔn)庫? 標(biāo)準(zhǔn)庫都有哪些?
模塊是什么?模塊基本上就是一個(gè)包含了所有你定義的函數(shù)和變量的文件。
模塊的文件名必須以.py為擴(kuò)展名。
import sys??? sys模塊包含了與Python解釋器和它的環(huán)境有關(guān)的函數(shù)。
sys模塊的具體介紹?
當(dāng)我們執(zhí)行python using_sys.py we are arguments的時(shí)候,我們使用python命令運(yùn)行using_sys.py模塊,后面跟著的內(nèi)容被作為參數(shù)傳遞給程序。Python為我們把它存儲(chǔ)在sys.argv變量中。
sys.argv? ?sys.path
字節(jié)編譯的.pyc文件? 這種文件采用字節(jié)碼了? 輸入這種模塊 速度會(huì)比較快
from 模塊名 import 某個(gè)變量?? 那么就不用 模塊名.變量名來調(diào)用過來 直接使用變量就可以了? from ..import*? 指吸納所有變量名
一般說來,應(yīng)該避免使用from..import而使用import語句,因?yàn)檫@樣可以使你的程序更加易讀,也可以避免名稱的沖突。
?
模塊的_name_
假如我們只想在程序本身被使用的時(shí)候運(yùn)行主塊,而在它被別的模塊輸入的時(shí)候不運(yùn)行主塊,我們?cè)撛趺醋瞿?#xff1f;
每個(gè)Python模塊都有它的__name__,如果它是'__main__',這說明這個(gè)模塊被用戶單獨(dú)運(yùn)行,我們可以進(jìn)行相應(yīng)的恰當(dāng)操作。
if __name__ == '__main__':
??? print 'This program is being run by itself'
else:
print 'I am being imported from another module'
?
模塊的制作和調(diào)用??? Python附帶的標(biāo)準(zhǔn)庫就是這樣一組模塊的例子
模塊應(yīng)該被放置在我們輸入它的程序的同一個(gè)目錄中,或者在sys.path所列目錄之一。每安裝完一個(gè)庫,應(yīng)該會(huì)自動(dòng)寫入sys.path中吧!我應(yīng)該也可以手動(dòng)增添路徑。
?
dir()函數(shù):使用內(nèi)建的dir函數(shù)來列出模塊定義的標(biāo)識(shí)符。標(biāo)識(shí)符有函數(shù)、類和變量。
當(dāng)你為dir()提供一個(gè)模塊名的時(shí)候,它返回該模塊定義的名稱列表。如果不提供參數(shù),它返回當(dāng)前模塊中定義的名稱列表。輸入的模塊同樣是列表的一部分。
del a?? 刪除變量/名稱
?
?
數(shù)據(jù)結(jié)構(gòu)
列表
列表中元素可以是任何種類的對(duì)象(不同類混雜) 包括數(shù)(也是對(duì)象)甚至其它列表
list=[,,,,,]?? len(list)? for item in list: print i
list.append(‘’) 在末尾增加對(duì)象list.sort() 重排列表 索引對(duì)象 list[]
del list[] 刪除某個(gè)對(duì)象?? Python從0開始計(jì)數(shù)
>>> print range(5)
[0, 1, 2, 3, 4]
>>> print xrange(5)
xrange(5)??
range將返回一個(gè)普通列表,但是xrange將返回一個(gè)特殊目的對(duì)象,將顯示為其自身的特殊方式。? 使用xrange節(jié)省for循環(huán)內(nèi)存開銷,for i in xrange(5): 語句塊
我們?cè)趐rint語句的結(jié)尾使用了一個(gè)逗號(hào)來消除每個(gè)print語句自動(dòng)打印的換行符
元組? 與列表相似,但又有區(qū)別?
元組和列表十分類似,只不過元組和字符串一樣是不可變的即你不能修改元組。
元組通常用在使語句或用戶定義的函數(shù)能夠安全地采用一組值的時(shí)候,即被使用的元組的值不會(huì)改變。
你必須在第一個(gè)(唯一一個(gè))項(xiàng)目后跟一個(gè)逗號(hào),這樣Python才能區(qū)分元組和表達(dá)式中一個(gè)帶圓括號(hào)的對(duì)象。
即如果你想要的是一個(gè)包含項(xiàng)目2的元組的時(shí)候,你應(yīng)該指明singleton = (2 , )。
zoo=(,,,,,)? len(zoo)? newzoo=(,,,zoo)?? 列表和元組中的對(duì)象不一定都必須是同一類的
元組之內(nèi)的元組還是元組,被充當(dāng)成元組中的一個(gè)對(duì)象。同樣元組中的元組,或列表中的元組,或元組中的列表等等都是如此。
索引 zoo[]??? zoo[2][]? 如果第三個(gè)元素是元組或列表的話
zoo=()? zoo=(1,)? 必須加逗號(hào)? 為了區(qū)分 zoo=(1) 也可理解為 zoo=1
print '%s is %d years old' % (name, age)?? 使用元組print格式化輸出
在大多數(shù)時(shí)候,你可以只使用%s定制,而讓Python來提你處理剩余的事情。這種方法對(duì)數(shù)同樣奏效。然而,你可能希望使用正確的定制,從而可以避免多一層的檢驗(yàn)程序是否正確。
?
字典 索引靠的是自己指定的鍵
只能使用不可變的對(duì)象(比如字符串)來作為字典的鍵,但是你可以用不可變或可變的任何對(duì)象作為字典的值。
鍵/值對(duì)用冒號(hào)分割,而各個(gè)對(duì)用逗號(hào)分割,所有這些都包括在花括號(hào)中。
字典是dict類的實(shí)例/對(duì)象。
ab = {?????? 'Swaroop'?? : 'swaroopch@byteofpython.info',
???????????? 'Larry'???? : 'larry@wall.org',
???????????? 'Matsumoto' : 'matz@ruby-lang.org',
???????????? 'Spammer'?? : 'spammer@hotmail.com'
???? }
ab[‘Larry’]? 按鍵索引 ab[‘Bravo’]=’jdfjj’? 增加? del ab[‘bravo’]?? len(ab)
for name,address in ab.items():
print ‘contact %s at %s ’ % (name,address)
if ‘Guido’ in ab:??? # ab.has_key(‘Guido’)
? print …………
item方法:返回一個(gè)元組的列表,其中每個(gè)元組都包含一對(duì)項(xiàng)目——鍵與對(duì)應(yīng)的值
可以使用help(dict)來查看dict類的完整方法列表。
?
列表、元組和字符串都是序列,說它們是序列,因?yàn)樾蛄械膬蓚€(gè)主要特點(diǎn)是索引操作符和切片操作符。他們都可如此操作。
list[N] 0開頭? list[-N]? 倒數(shù)第N個(gè)
list[A:B]? 切片操作符中的第一個(gè)數(shù)(冒號(hào)之前)表示切片開始的位置,第二個(gè)數(shù)(冒號(hào)之后)表示切片到哪里結(jié)束。不包括最后一個(gè)。如果不指定第一個(gè)數(shù),Python就從序列首開始。如果沒有指定第二個(gè)數(shù),則Python會(huì)停止在序列尾。注意,返回的序列從開始位置開始,剛好在結(jié)束位置之前結(jié)束。即開始位置是包含在序列切片中的,而結(jié)束位置被排斥在切片外。shoplist[:]返回整個(gè)序列的拷貝。
注意,列表,元組,字符串都可以使用[]來索引
序列的神奇之處在于你可以用相同的方法訪問元組、列表和字符串。
參考 ?mylist = shoplist ?此句表示? 兩者指向同一實(shí)體 一個(gè)改變另一個(gè)也改變 這個(gè)情況存在與列表和字典中,元組(不可改變)
mylist = shoplist[:] ?如此才是正確的拷貝
如果想要復(fù)制一個(gè)列表或者類似的序列或者其他復(fù)雜的對(duì)象(不是如整數(shù)那樣的簡單 對(duì)象 ),那么你必須使用切片操作符來取得拷貝。
?
字符串的一些方法
str.startwith(‘’) ????是否以某字符串開頭 返回0或1
if ‘a(chǎn)’ in str:
if str.find(‘’)!=-1:? ??????#尋找是否含有某字符串,返回-1或位置
delimiter.join(mylist)?? mylist為列表,delimiter為要嵌入分隔的字符串
以上為Python內(nèi)建的數(shù)據(jù)結(jié)構(gòu)。
?
編寫一個(gè)Python腳本
字符串可以相加? os time 模塊
time.strftime('%Y%m%d%H%M%S')?? 這些定制與用于print語句的定制(%后跟一個(gè)元組)類似(但不完全相同)
zip_command = "zip -qr '%s' %s" % (target, ' '.join(source))?
使用os.system函數(shù)運(yùn)行命令,利用這個(gè)函數(shù)就好像在系統(tǒng)中運(yùn)行命令一樣。即在shell中運(yùn)行命令——如果命令成功運(yùn)行,它返回0,否則它返回錯(cuò)誤號(hào)。
C:\Documents\......? 在Linux下 目錄分隔是/? 所以 指代 目錄的字符串 windows下 最好加上r,以區(qū)別于轉(zhuǎn)義字符
?
not os.path.exists(today)? 檢查是否有這樣的路徑,not是求反
os.mkdir(today)? 創(chuàng)建文件夾
注意os.sep變量的用法——這會(huì)根據(jù)你的操作系統(tǒng)給出目錄分隔符,即在Linux、Unix下它是'/',在Windows下它是'\\',而在Mac OS下它是':'。使用os.sep而非直接使用字符,會(huì)使我們的程序具有移植性,可以在上述這些系統(tǒng)下工作。
?
comment=raw_input(‘提示語句’)
comment.replace(‘某某,’某’)? 將串中的某某用某替代
?
最理想的創(chuàng)建這些歸檔的方法是分別使用zipfile和tarfile。它們是Python標(biāo)準(zhǔn)庫的一部分,可以供你使用。使用這些庫就避免了使用os.system這個(gè)不推薦使用的函數(shù),它容易引發(fā)嚴(yán)重的錯(cuò)誤。
?
軟件是長出來的,而不是建造的。軟件的編寫是逐步,漸進(jìn)式的。
什么(分析)
如何(設(shè)計(jì))
編寫(實(shí)施)
測試(測試與調(diào)試)
使用(實(shí)施或開發(fā))
維護(hù)(優(yōu)化)
面向?qū)ο蟮木幊?/p>
在Python中沒有數(shù)據(jù)類型概念,所有都是類,都是對(duì)象。
在Python中即便是整數(shù)也被作為對(duì)象(屬于int類)。這和C++、Java(1.5版之前)把整數(shù)純粹作為類型是不同的。
屬于一個(gè)對(duì)象或類的變量被稱為域。域和方法可以合稱為類的屬性。
域有兩種類型——屬于每個(gè)實(shí)例/類的對(duì)象或?qū)儆陬惐旧怼K鼈兎謩e被稱為實(shí)例變量和類變量。
類方法的self參數(shù)。
類的方法都必須有第一個(gè)的self形參,self指代對(duì)象本身。? #相當(dāng)于C++中的this
MyObject.method(arg1, arg2)= MyClass.method(MyObject, arg1, arg2)
即方法中的第一個(gè)形參位置已經(jīng)是被占用的了,你只需要給它一個(gè)名字,使用方法時(shí),就當(dāng)它不存在。
pass ???# An empty block
類名后跟一對(duì)圓括號(hào)可創(chuàng)建一個(gè)對(duì)象/實(shí)例?? p=person()
_init_方法 對(duì)象一被建立,自動(dòng)運(yùn)行的方法 初始化?? (類似構(gòu)造函數(shù))
class Person:
??? def __init__(self, name):
??????? self.name = name
??? def sayHi(self):
??????? print 'Hello, my name is', self.name
p = Person('Swaroop')
p.sayHi()
?
在創(chuàng)建一個(gè)類的新實(shí)例的時(shí)候,把參數(shù)包括在圓括號(hào)內(nèi)跟在類名后面,從而傳遞給__init__方法。__init__方法在類的一個(gè)對(duì)象被建立時(shí),馬上運(yùn)行。這個(gè)方法可以用來對(duì)你的對(duì)象做一些你希望的初始化。
?
類的變量(域):由一個(gè)類的所有對(duì)象(實(shí)例)共享使用。某一對(duì)象對(duì)它進(jìn)行修改,則所有的對(duì)象都發(fā)生變化。
對(duì)象的變量:由類的每個(gè)對(duì)象/實(shí)例擁有。不共享
?
類定義中沒self點(diǎn)綴的都是屬于類變量。
只能使用self變量來參考同一個(gè)對(duì)象的變量和方法。
這被稱為屬性參考。 self.fangfa? self.duixiangbianliang
docstring對(duì)于類和方法同樣有用。我們可以在運(yùn)行時(shí)使用Person.__doc__和Person.sayHi.__doc__來分別訪問類與方法的文檔字符串。
在類語句塊的開頭或者方法的開頭加上’’’ …….‘’’這個(gè)就是文檔字符串了。
__del__方法,它在對(duì)象消逝的時(shí)候被調(diào)用。可使用del語句刪除一個(gè)對(duì)象。
當(dāng)對(duì)象不再被使用時(shí),__del__方法運(yùn)行,但是很難保證這個(gè)方法究竟在什么時(shí)候運(yùn)行。如果你想要指明它的運(yùn)行,你就得使用del語句,就如同我們?cè)谝郧暗睦又惺褂玫哪菢印?/p>
注意:----__為雙下劃線
如果你使用的數(shù)據(jù)成員名稱以雙下劃線前綴比如__privatevar,Python的名稱管理體系會(huì)有效地把它作為私有變量。? (相當(dāng)于private類型)
私有變量的特征?
?
SchoolMember類被稱為基本類或超類。而Teacher和Student類被稱為導(dǎo)出類或子類。
一個(gè)子類型在任何需要父類型的場合可以被替換成父類型,即對(duì)象可以被視作是父類的實(shí)例,這種現(xiàn)象被稱為多態(tài)現(xiàn)象。
Python不會(huì)自動(dòng)調(diào)用基本類的constructor,你得親自專門調(diào)用它。
如果在繼承元組中列了一個(gè)以上的類,那么它就被稱作多重繼承。
?
使用rjust方法來得到一個(gè)按一定寬度右對(duì)齊的字符串。str.rjust(10,’*’);
?
通過創(chuàng)建一個(gè)file類的對(duì)象來打開一個(gè)文件,分別使用file類的read、readline或write方法來恰當(dāng)?shù)刈x寫文件。對(duì)文件的讀寫能力依賴于你在打開文件時(shí)指定的模式。模式大概有讀模式('r')、寫模式('w')或追加模式('a')。如果我們沒有指定模式,讀模式會(huì)作為默認(rèn)的模式。最后,當(dāng)你完成對(duì)文件的操作的時(shí)候,你調(diào)用close方法來告訴Python我們完成了對(duì)文件的使用。
?
Python提供一個(gè)標(biāo)準(zhǔn)的模塊,稱為pickle。使用它你可以在一個(gè)文件中儲(chǔ)存任何Python對(duì)象,之后你又可以把它完整無缺地取出來。這被稱為持久地儲(chǔ)存對(duì)象。
還有另一個(gè)模塊稱為cPickle,它的功能和pickle模塊完全相同,只不過它是用C語言編寫的,因此要快得多(比pickle快1000倍)。你可以使用它們中的任一個(gè),而我們?cè)谶@里將使用cPickle模塊。記住,我們把這兩個(gè)模塊都簡稱為pickle模塊。
?
只要是一些非法操作或者運(yùn)行中出現(xiàn)的錯(cuò)誤,程序就會(huì)中斷并拋出異常。要有意識(shí)地去處理可能發(fā)生異常的代碼塊。
try:
???????? 語句
except 異常符號(hào)/(異常符號(hào)元組):
???????? 語句
except:???? #所有情況
???????? 語句
else:
???????? 語句??? #可選,沒有異常時(shí)發(fā)生
?
raise 新定義的異常
?
可以使用raise語句引發(fā)異常。還得指明錯(cuò)誤/異常的名稱和伴隨異常觸發(fā)的異常對(duì)象。你可以引發(fā)的錯(cuò)誤或異常應(yīng)該分別是一個(gè)Error或Exception類的直接或間接導(dǎo)出類。
except ShortInputException, x:?? 指定一個(gè)異常情況并跟隨其異常對(duì)象
在except從句中,我們提供了錯(cuò)誤類和用來表示錯(cuò)誤/異常對(duì)象的變量。
?
try:
finally:
?
在程序運(yùn)行的時(shí)候,可按Ctrl-c中斷/取消程序。(產(chǎn)生異常)KeyboardInterrupt異常被觸發(fā),程序退出。
?
f=file('open.txt','w')? 如果沒加’w’的話,默認(rèn)為’r’,那么如果此時(shí)文件夾中不存在open.tx
t,會(huì)拋出IOError
?
可以在Python附帶安裝的文檔的“庫參考”一節(jié)中了解Python標(biāo)準(zhǔn)庫中所有模塊的完整內(nèi)容。
?
類中的特殊方法
__init__(self,…)? __del__(self)? __str__(self) ?對(duì)對(duì)象使用 print或str()時(shí)調(diào)用
__lt__(self,other) 使用<運(yùn)算符時(shí)調(diào)用
__getitem__(self,key) 使用x[key]索引時(shí)調(diào)用
__len__(self)? 對(duì)對(duì)象使用len()時(shí)調(diào)用
?
列表綜合
listone = [2, 3, 4]
listtwo = [2*i for i in listone if i > 2]
print listtwo
在很多時(shí)候,我們都是使用循環(huán)來處理列表中的每一個(gè)元素,而使用列表綜合可以用一種更加精確、簡潔、清楚的方法完成相同的工作。
?
當(dāng)要使函數(shù)接收元組或字典形式的參數(shù)的時(shí)候,有一種特殊的方法,它分別使用*和**前綴。這種方法在函數(shù)需要獲取可變數(shù)量的參數(shù)的時(shí)候特別有用。
def powersum(power, *args):
??? '''Return the sum of each argument raised to specified power.'''
?? total = 0
???? for i in args:
????????? total += pow(i, power)
???? return total
由于在args變量前有*前綴,所有多余的函數(shù)參數(shù)都會(huì)作為一個(gè)元組存儲(chǔ)在args中。如果使用的是**前綴,多余的參數(shù)則會(huì)被認(rèn)為是一個(gè)字典的鍵/值對(duì)。
?
lambda:這是Python支持一種有趣的語法,它允許你快速定義單行的最小函數(shù),類似與C語言中的宏,這些叫做lambda的函數(shù),是從LISP借用來的,可以用在任何需要函數(shù)的地方:
>>> g = lambda x: x * 2
>>> g(3)
6
本質(zhì)上,lambda需要一個(gè)參數(shù),后面僅跟單個(gè)表達(dá)式作為函數(shù)體,而表達(dá)式的值被這個(gè)新建的函數(shù)返回。注意,即便是print語句也不能用在lambda形式中,只能使用表達(dá)式。
?
exec語句用來執(zhí)行儲(chǔ)存在字符串或文件中的Python語句。eval語句用來計(jì)算存儲(chǔ)在字符串中的有效Python表達(dá)式。
exec “print ‘Hello World’”
eval ‘5+5’
?
?
assert語句用來聲明某個(gè)條件是真的。
當(dāng)assert語句失敗的時(shí)候,會(huì)引發(fā)一個(gè)AssertionError。
assert 判斷語句
?
repr()函數(shù)和` `用來獲得對(duì)象的規(guī)范字符串表示。可以通過定義類的__repr__方法來控制你的對(duì)象在被repr()調(diào)用的時(shí)候返回的內(nèi)容。
eval(repr(對(duì)象))==對(duì)象
?
有許多可供選擇的使用Python的GUI:
PyQt 這是Qt工具包的Python綁定。Qt工具包是構(gòu)建KDE的基石。
PyGTK 這是GTK+工具包的Python綁定。GTK+工具包是構(gòu)建GNOME的基石。
wxPython 這是wxWidgets工具包的Python綁定。
TkInter 這是現(xiàn)存最老的GUI工具包之一。如果你使用過IDLE,它就是一個(gè)TkInter程序。TkInter是標(biāo)準(zhǔn)Python發(fā)行版的一部分。
Python標(biāo)準(zhǔn)庫是一個(gè)豐富的庫,在大多數(shù)時(shí)候,你可以在這個(gè)庫中找到你所需的東西。
Python.org
?
Jython是用Java語言實(shí)現(xiàn)的Python解釋器。這意味著你可以用Python語言編寫程序而同時(shí)使用Java庫!
IronPython是用C#語言實(shí)現(xiàn)的Python解釋器,可以運(yùn)行在.NET、Mono和DotGNU平臺(tái)上。這意味著你可以用Python語言編寫程序而使用.NET庫以及其他由這三種平臺(tái)提供的庫!
使你的計(jì)算機(jī)自動(dòng)地完成許多先前無法想象的工作或者編寫你自己的游戲,以及更多別的什么東西。
?
?
關(guān)于字節(jié)流及其轉(zhuǎn)換的問題?
Python中返回多個(gè)值的方法!? 利用元組tuple??? return (x,y,z)? 寫成返回元組的形式
在調(diào)用時(shí),用元組去接收即可
關(guān)于切片運(yùn)算符? 很多需要再說明下
y[::-1]?? 就是倒序
?
序列,元組索引都跟C中的數(shù)組一樣,a[0]即為第一個(gè)元素
a[0:N]? 會(huì)顯示 a[0]到a[N-1]個(gè)元素
a[0:-1]? -1指倒退 即a[0:N-1]? 所以顯示 a[0]到a[N-2]這些元素
序列,元組的特點(diǎn)??? a[-1] 即是 a[N-1]
?
rfft、irfft與fft、ifft的區(qū)別和應(yīng)用?
利用rfft對(duì)來做統(tǒng)計(jì)相關(guān)不太可行
fft(x)?? x為是實(shí)信號(hào),則第一點(diǎn)的虛部必為0,若x為偶數(shù)點(diǎn),則第N/2+1個(gè)點(diǎn)虛部也為0
x.shape[axis]? 首先,x是一個(gè)矩陣,shape返回一個(gè)元組,說明每個(gè)維度的元素個(gè)數(shù)。
如果是一維數(shù)組,返回的是一個(gè)(N,)的元組?
?
set() 去掉重復(fù)元素
sorted()? 重排
對(duì)于序列l(wèi)ist???? list.index()用于返回序列中指定值的序號(hào)
?
#s.split([sep, [maxsplit]]) 以sep是分隔符,把s分割成一個(gè)list。sep默認(rèn)為空格。maxsplit是分割的次數(shù),默認(rèn)是對(duì)整個(gè)s進(jìn)行分割
#s.rsplit([sep, [maxsplit]]) 和split()的區(qū)別是它是從s的串尾往前進(jìn)行分割
?
#s.splitlines([keepends]) 把s按照行分隔符分成一個(gè)list。如果keepends為True則list的每個(gè)元素保留行分割符,如果為False則不保留分隔符
#s.join(seq) 用s把seq序列串聯(lián)起來
轉(zhuǎn)載于:https://www.cnblogs.com/boowin/p/4525143.html
總結(jié)
以上是生活随笔為你收集整理的Python语言学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: log4net 小记
- 下一篇: Python深入05 装饰器