Python語言學習筆記

得到人生中的成功須要的專一與堅持不懈多過天才與機會。  ——C.W. Wendtepython

Python將很快成爲你最喜歡的編程語言!正則表達式

Qt庫?  PyQt  Perl-Qt算法

 

簡單易學,功能強大,高效率的高層數據結構,簡單而有效地實現面向對象編程。shell

Python簡潔的語法和對動態輸入的支持,再加上解釋性語言的本質,使得它在大多數平臺上的許多領域都是一個理想的腳本語言,特別適用於快速的應用程序開發。數據庫

注重的是如何解決問題而不是編程語言的語法和結構。編程

wxPython,Twisted,Boa Constructorwindows

 

 

特點:數組

簡單、易學瀏覽器

免費、開源:Python是FLOSS(自由/開放源碼軟件)之一。安全

高層語言:沒必要糾結管理程序使用內存等底層的東西

可移植性:

若是你當心地避免使用依賴於系統的特性,那麼你的全部Python程序無需修改就能夠在下述任何平臺上面運行。

Linux、Windows、FreeBSD、Macintosh、Solaris、OS/二、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE甚至還有PocketPC!這是由於做爲解釋器的python有各類系統所對應的版本。

解釋性:一個用編譯性語言好比C或C++寫的程序能夠從源文件(即C或C++語言)轉換到一個你的計算機使用的語言(二進制代碼,即0和1)。這個過程經過編譯器和不一樣的標記、選項完成。當你運行你的程序的時候,鏈接/轉載器軟件把你的程序從硬盤複製到內存中而且運行。

而Python語言寫的程序不須要編譯成二進制代碼。你能夠直接從源代碼運行程序。在計算機內部,Python解釋器把源代碼轉換成稱爲字節碼的中間形式,而後再把它翻譯成計算機使用的機器語言並運行。事實上,因爲你再也不須要擔憂如何編譯程序,如何確保鏈接轉載正確的庫等等,全部這一切使得使用Python更加簡單。因爲你只須要把你的Python程序拷貝到另一臺計算機上,它就能夠工做了,這也使得你的Python程序更加易於移植。

只要運行程序的計算機上裝有Python及程序所用的相關的庫,那麼就可運行。由於它是解釋型語言,將大部分工做都交由工具環境來解決,因此程序自己移植性很強。

面向對象:Python支持面向過程的編程也支持面向對象的編程。

面向過程:程序是由過程或可重用代碼的函數構建起來的。面向對象:程序是由數據和功能組合而成的對象構建而成的。

 

可擴展性:若是你須要你的一段關鍵代碼運行得更快或者但願某些算法不公開,能夠把你的部分程序用C或C++編寫,而後在你的Python中使用。

可嵌入性:能夠把Python嵌入C/C++程序,從而向你的程序用戶提供腳本功能。

腳本功能?

豐富的庫:Python標準庫確實很龐大。它能夠幫助你處理各類工做,包括正則表達式、文檔生成、單元測試、線程、數據庫、網頁瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV文件、密碼系統、GUI(圖形用戶界面)、Tk和其餘與系統有關的操做。記住,只要安裝了Python,全部這些功能都是可用的。這被稱做Python的「功能齊全」理念。

除了標準庫之外,還有許多其餘高質量的庫,如wxPython、Twisted和Python圖像庫等等。

 

關於Perl

Perl是另一種極其流行的開源解釋性編程語言。Perl編寫大型程序時顯示出其不方便。

Perl惟一也是十分重要的優點是它龐大的CPAN庫——綜合Perl存檔網絡。就如同這個名字所指的意思同樣,這是一個巨大的Perl模塊集,它大得讓人難以置信——你幾乎用這些模塊在計算機上作任何事情。

新的Parrot虛擬機按設計能夠運行徹底從新設計的Perl 6也能夠運行Python和其餘解釋性語言如Ruby、PHP和Tcl等等。這意味着你未來或許能夠在Python上使用全部Perl的模塊。這將成爲一箭雙鵰的事——強大的CPAN庫與強大的Python語言結合在一塊兒。

其餘解釋性語言如Ruby、PHP和Tcl等等。

OpenSource.org和UserLinux項目

 

Linux、BSD下安裝Python,Windows下安裝Python。

shell程序?什麼是shell、cmd等等

在計算機科學中,Shell俗稱殼(用來區別於核),是指「提供使用者使用界面」的軟件(命令解析器)。它相似於DOS下的command和後來的cmd.exe。它接收用戶命令,而後調用相應的應用程序。

 

網上的Python安裝包,指的是什麼?

該軟件包含編程所須要的模組和編譯調試所須要的基本工具。

 

IDLE程序

IDLE是開發python程序的基本IDE(集成開發環境),具有基本的IDE的功能,是非商業Python開發的不錯的選擇。當安裝好python之後,IDLE就自動安裝好了,不須要另外去找。是用python+tkinter寫的。該環境固然支持編輯功能,網上不少人將IDEL簡單地認爲是編輯器。

C:\Python27\Lib\idlelib 可找到IDLE運行。

python的編譯器就是pythonw.exe,解釋器就是python.exe(交互式shell)

python.exe和pythonw.exe區別?

在Windows命令行中使用Python?

從CMD命令行中啓動python解釋器,須要在windows中設置環境變量,若是安裝的是python(x,y),那麼應會自動寫進了環境變量。

如何退出?window下Ctrl-z,Linux下Ctrl-d

 

window命令行指什麼?如何使用?   環境變量?

Linux的包管理軟件

 

編輯器:基本要求有語法高亮,文本縮進?

Notepad 即記事本,沒有自動文本縮進功能

可用IDLE環境的編輯器   VIM,Emacs(Linux)代碼編輯器

Python編輯器列表 支持Python的IDE列表

一旦開始編寫大型Python程序,IDE確實頗有用

 

 

Hello World,它是編程之神的傳統咒語,能夠幫助你更好的學習語言。

cmd和系統命令行?

CMD經常使用命令

lnk 文件是用於指向其餘文件(如,程序)的一種文件。這些文件一般稱爲快捷方式文件。一般它以快捷方式放在桌面上。以方便使用者快速的調用,其擴展名爲.lnk。

Python是大小寫敏感的

註釋 ——任何在#符號右面的內容都是註釋

#!/usr/bin/python   這是條特殊的註釋後面跟着一個程序。這行告訴你的Linux/Unix系統當執行你的程序的時候,它應該運行哪一個解釋器。(python解釋器有幾種?)

對於Python來講,程序、腳本或者軟件都是指同一個東西。

 

PATH變量?

若是你但願你的程序可以從各個位置運行呢?那樣的話,你能夠把你的程序保存在PATH環境變量中的目錄之一。每當你運行任何程序,系統會查找列在PATH環境變量中的各個目錄。而後運行那個程序。你只要簡單地把這個源文件複製到PATH所列目錄之一就可使你的程序在任何位置均可用了。

這裏指的運行是指在命令行直接輸入程序名運行。(若是遇到重名可怎麼辦) 

help() 括號中填對象 按q可退出幫助

 

在Python中有4種類型的數

整數、長整數、浮點數、複數    二、3.23E-四、2.3+5j

變量沒必要要進行聲明。

 

字符串  單引號、雙引號(在其中可自由使用單引號)  

啥區別?

三引號:指示多行的字符串,在其中可自由使用單雙引號

轉義符:\’   \’’  \\ 

行末的單獨一個反斜槓表示字符串在下一行繼續,而不是開始一個新的行。

天然字符串  r"Newlines are indicated by \n"  字符串爲字面自己,轉義字符失效

必定要用天然字符串處理正則表達式

 

Unicode字符串:Unicode是書寫國際文本的標準方法。若是你想要用你的母語如北印度語或阿拉伯語寫文本,那麼你須要有一個支持Unicode的編輯器。相似地,Python容許你處理Unicode文本——你只須要在字符串前加上前綴u或U。例如,u"This is a Unicode string."。

若是你把兩個字符串按字面意義相鄰放着,他們會被Python自動級連。

語句以下  print 「what is your 」 「name」

在Python中沒有專門的char數據類型。

 

標示符規則,字母下劃線數字組成,數字不可開頭

使用變量時只須要給它們賦一個值。不須要聲明或定義數據類型。(會根據輸入自動區分是哪一種類型的數據,這點確實比C要好玩,與Matlab語句同樣)

在一個物理行中寫多個邏輯行:用分號;實現

多個物理行寫一個邏輯行:即語句分行 用’’’或者\實現或者圓括號、方括號、波形括號

強烈建議堅持在每一個物理行只寫一句邏輯行,少用分號

有時候,有一種暗示的假設,可使你不須要使用反斜槓。這種狀況出如今邏輯行中使用了圓括號、方括號或波形括號的時候。這被稱爲暗示的行鏈接。

print ‘the value is’,i

 

空白在Python中是重要的。事實上行首的空白是重要的。它稱爲縮進。在邏輯行首的空白(空格和製表符)用來決定邏輯行的縮進層次,從而用來決定語句的分組。

這意味着同一層次的語句必須有相同的縮進。每一組這樣的語句稱爲一個塊。

如何縮進

不要混合使用製表符和空格來縮進,由於這在跨越不一樣的平臺的時候,沒法正常工做。我強烈建議你在每一個縮進層次使用單個製表符或兩個或四個空格 。

選擇這三種縮進風格之一。更加劇要的是,選擇一種風格,而後一向地使用它,即只使用這一種風格。

 

就每個東西包括數、字符串甚至函數都是對象這一點來講,Python是極其徹底地面向對象的。

運算符

**  冪 返回x的y次冪

//  取整除

<< 位左移  >> 位右移   注意,此處不是循環移位

& 按位與  |按位或  ^ 按位異或 ~ 按位翻轉      如 3&3=3

邏輯運算符   兩個布爾常量  True(1)  Fasle

<  >  <=  >=  !=  ==  not 布爾非 and布爾與  or布爾或

運算符的優先級  有個表格!

'la' * 3獲得'lalala'  'a' + 'b'獲得'ab'

4/3獲得1(整數的除法獲得整數結果)。4.0/3或4/3.0獲得1.3333333333333333

4 // 3.0獲得1.0

x的按位翻轉是-(x+1) ~5獲得-6     求反後再+1  獲得的則是相反數

比較能夠被任意鏈接:3 < 5 < 7返回True。

 

x = False; y = True; x and y,因爲x是False,返回False。在這裏,Python不會計算y,由於它知道這個表達式的值確定是False(由於x是False)。這個現象稱爲短路計算。

 

三種控制流語句

if語句

if  邏輯表達式:

   塊語句

elif 邏輯表達式:

   塊語句

else:

塊語句

冒號表示後面跟一個語句塊

guess=int(raw_input())函數取得用戶猜想的數字。函數只是重用的程序段。

輸入對於raw_input函數來講是一個字符串。咱們經過int把這個字符串轉換爲整數,並把它存儲在變量guess中。

事實上,int是一個類,不過你想在對它所需瞭解的只是它把一個字符串轉換爲一個整數(假設這個字符串含有一個有效的整數文本信息)。

在Python中沒有switch語句。你可使用if..elif..else語句來完成一樣的工做(在某些場合,使用字典會更加快捷。)

 

while 循環

while 邏輯表達式:

     循環體

else:

     語句塊

 

當循環跳出時會到else處,else實際上是多餘的,但若循環中有break語句,那麼加與不加就有點區別了。

 

for循環

for i in range(1,5):

print i

else:

print ‘The for loop is over’

 

range(a,b,c)  用於產生a到b之間的序列,步進爲c,默認爲1。而且不包括b。

廣義來講,咱們可使用任何種類的由任何對象組成的序列!

 

break語句

len(str)函數  得到字符串長度

若是你從for或while循環中終止,任何對應的循環else塊將不執行

 

continue語句

函數便可重用的程序段。 用def關鍵字定義。

已經使用了許多內建的函數,好比lenrange

def sayhello():

   print ‘Hello World!’

def 函數名(形參列表):

語句塊

 

局部變量:在一個塊語句內定義,做用域和生命期都在該語句塊內。在裏面操做,外面的重名變量不受影響。

 

全局變量 global語句   global x,y,z

global語句被用來聲明x是全局的——所以,當咱們在函數內把值賦給x的時候,這個變化也反映在咱們在主塊中使用x的值的時候。

在函數內使用global,說明該變量是在函數外部定義的。

若是你想要爲一個定義在函數外的變量賦值,那麼你就得告訴Python這個變量名不是局部的,而是全局的。咱們使用global語句完成這一功能。沒有global語句,是不可能爲定義在函數外的變量賦值的。

默認參數值的設置

def say(message,times=1):

print message*times     #居然還能夠用這種手段

有默認參數值的形參必須放在後面  say(‘hello’)  才能判別參數是給第一個形參的

只有在形參表末尾的那些參數能夠有默認參數值,即你不能在聲明函數形參的時候,先聲明有默認值的形參然後聲明沒有默認值的形參。這是由於賦給形參的值是根據位置而賦值的。

 

關鍵參數:咱們使用名字(關鍵字)而不是位置(咱們前面所一直使用的方法)來給函數指定實參。func(c=50,a=100)   #用這種方式來調用能夠罔顧賦參順序

更自由地賦參

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 語句 於函數中返回函數中內部的局部值

= =b Python裏還真看不到分號啊

注意,沒有返回值的return語句等價於return None。None是Python中表示沒有任何東西的特殊類型。例如,若是一個變量的值爲None,能夠表示它沒有值。

除非你提供你本身的return語句,每一個函數都在結尾暗含有return None語句。

x=None

print x    #什麼都沒輸出

pass語句在Python中表示一個空的語句塊。

 

DocStrings 文檔字符串

在函數中用

‘’’----------------------

--------空一行----------

-------------------------‘’’      來講明這個函數的使用方法

使程序更易讀,且可在運行時,查看函數文檔字符串屬性。

print printMax._doc_       函數在Python中也被看作一個對象! . 操做符

 

強烈建議:對你所寫的任何正式函數編寫文檔字符串

隨你的Python發行版附帶的pydoc命令,與help()相似地使用DocStrings。

 

爲何程序運行時要指定命令行參數? 如,main()函數的形參就有個命令行,是用於指定什麼的?

 

Python標準庫  標準庫都有哪些?

模塊是什麼?模塊基本上就是一個包含了全部你定義的函數和變量的文件。

模塊的文件名必須.py爲擴展名。

import sys    sys模塊包含了與Python解釋器和它的環境有關的函數。

sys模塊的具體介紹?

當咱們執行python using_sys.py we are arguments的時候,咱們使用python命令運行using_sys.py模塊,後面跟着的內容被做爲參數傳遞給程序。Python爲咱們把它存儲在sys.argv變量中。

sys.argv   sys.path

字節編譯的.pyc文件  這種文件採用字節碼了  輸入這種模塊 速度會比較快

from 模塊名 import 某個變量   那麼就不用 模塊名.變量名來調用過來 直接使用變量就能夠了  from ..import*  指吸納全部變量名

通常說來,應該避免使用from..import而使用import語句,由於這樣可使你的程序更加易讀,也能夠避免名稱的衝突。

 

模塊的_name_

假如咱們只想在程序自己被使用的時候運行主塊,而在它被別的模塊輸入的時候不運行主塊,咱們該怎麼作呢?

每一個Python模塊都有它的__name__,若是它是'__main__',這說明這個模塊被用戶單獨運行,咱們能夠進行相應的恰當操做。

if __name__ == '__main__':

    print 'This program is being run by itself'

else:

print 'I am being imported from another module'

 

模塊的製做和調用    Python附帶的標準庫就是這樣一組模塊的例子

模塊應該被放置在咱們輸入它的程序的同一個目錄中,或者在sys.path所列目錄之一。每安裝完一個庫,應該會自動寫入sys.path中吧!我應該也能夠手動增添路徑。

 

dir()函數:使用內建的dir函數來列出模塊定義的標識符。標識符有函數、類和變量。

當你爲dir()提供一個模塊名的時候,它返回該模塊定義的名稱列表。若是不提供參數,它返回當前模塊中定義的名稱列表。輸入的模塊一樣是列表的一部分。

del a   刪除變量/名稱

 

 

數據結構

列表

列表中元素能夠是任何種類的對象(不一樣類混雜) 包括數(也是對象)甚至其它列表

list=[,,,,,]   len(list)  for item in list: print i

list.append(‘’) 在末尾增長對象list.sort() 重排列表 索引對象 list[]

del list[] 刪除某個對象   Python從0開始計數

>>> print range(5)

[0, 1, 2, 3, 4]

>>> print xrange(5)

xrange(5)  

range將返回一個普通列表,可是xrange將返回一個特殊目的對象,將顯示爲其自身的特殊方式。  使用xrange節省for循環內存開銷,for i in xrange(5): 語句塊

咱們在print語句的結尾使用了一個逗號來消除每一個print語句自動打印的換行符

元組  與列表類似,但又有區別 

元組和列表十分相似,只不過元組和字符串同樣是不可變的即你不能修改元組。

元組一般用在使語句或用戶定義的函數可以安全地採用一組值的時候,即被使用的元組的值不會改變。

你必須在第一個(惟一一個)項目後跟一個逗號,這樣Python才能區分元組和表達式中一個帶圓括號的對象。

即若是你想要的是一個包含項目2的元組的時候,你應該指明singleton = (2 , )。

zoo=(,,,,,)  len(zoo)  newzoo=(,,,zoo)   列表和元組中的對象不必定都必須是同一類的

元組以內的元組仍是元組,被充當成元組中的一個對象。一樣元組中的元組,或列表中的元組,或元組中的列表等等都是如此。

索引 zoo[]    zoo[2][]  若是第三個元素是元組或列表的話

zoo=()  zoo=(1,)  必須加逗號  爲了區分 zoo=(1) 也可理解爲 zoo=1

print '%s is %d years old' % (name, age)   使用元組print格式化輸出

在大多數時候,你能夠只使用%s定製,而讓Python來提你處理剩餘的事情。這種方法對數一樣奏效。然而,你可能但願使用正確的定製,從而能夠避免多一層的檢驗程序是否正確。

 

字典 索引靠的是本身指定的鍵

只能使用不可變的對象(好比字符串)來做爲字典的鍵,可是你能夠用不可變或可變的任何對象做爲字典的值。

鍵/值對用冒號分割,而各個對用逗號分割,全部這些都包括在花括號中。

字典是dict類的實例/對象

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方法:返回一個元組的列表,其中每一個元組都包含一對項目——鍵與對應的值

可使用help(dict)來查看dict類的完整方法列表。

 

列表、元組和字符串都是序列,說它們是序列,由於序列的兩個主要特色是索引操做符和切片操做符。他們均可如此操做。

list[N] 0開頭  list[-N]  倒數第N個

list[A:B]  切片操做符中的第一個數(冒號以前)表示切片開始的位置,第二個數(冒號以後)表示切片到哪裏結束。不包括最後一個。若是不指定第一個數,Python就從序列首開始。若是沒有指定第二個數,則Python會中止在序列尾。注意,返回的序列從開始位置開始,恰好在結束位置以前結束。即開始位置是包含在序列切片中的,而結束位置被排斥在切片外。shoplist[:]返回整個序列的拷貝。

注意,列表,元組,字符串均可以使用[]來索引

序列的神奇之處在於你能夠用相同的方法訪問元組、列表和字符串。

參考  mylist = shoplist  此句表示  二者指向同一實體 一個改變另外一個也改變 這個狀況存在與列表和字典中,元組(不可改變)

mylist = shoplist[:]  如此纔是正確的拷貝

若是想要複製一個列表或者相似的序列或者其餘複雜的對象(不是如整數那樣的簡單 對象 ),那麼你必須使用切片操做符來取得拷貝。

 

字符串的一些方法

str.startwith(‘’)     是否以某字符串開頭 返回0或1

if ‘a’ in str:

if str.find(‘’)!=-1:        #尋找是否含有某字符串,返回-1或位置

delimiter.join(mylist)   mylist爲列表,delimiter爲要嵌入分隔的字符串

以上爲Python內建的數據結構。

 

編寫一個Python腳本

字符串能夠相加  os time 模塊

time.strftime('%Y%m%d%H%M%S')   這些定製與用於print語句的定製(%後跟一個元組)相似(但不徹底相同)

zip_command = "zip -qr '%s' %s" % (target, ' '.join(source)) 

使用os.system函數運行命令,利用這個函數就好像在系統中運行命令同樣。即在shell中運行命令——若是命令成功運行,它返回0,不然它返回錯誤號。

C:\Documents\......  在Linux下 目錄分隔是/  因此 指代 目錄的字符串 windows下 最好加上r,以區別於轉義字符

 

not os.path.exists(today)  檢查是否有這樣的路徑,not是求反

os.mkdir(today)  建立文件夾

注意os.sep變量的用法——這會根據你的操做系統給出目錄分隔符,即在Linux、Unix下它是'/',在Windows下它是'\\',而在Mac OS下它是':'。使用os.sep而非直接使用字符,會使咱們的程序具備移植性,能夠在上述這些系統下工做。

 

comment=raw_input(‘提示語句’)

comment.replace(‘某某,’某’)  將串中的某某用某替代

 

最理想的建立這些歸檔的方法是分別使用zipfile和tarfile。它們是Python標準庫的一部分,能夠供你使用。使用這些庫就避免了使用os.system這個不推薦使用的函數,它容易引起嚴重的錯誤。

 

軟件是長出來的,而不是建造的。軟件的編寫是逐步,漸進式的。

什麼(分析)

如何(設計)

編寫(實施)

測試(測試與調試)

使用(實施或開發)

維護(優化)

面向對象的編程

在Python中沒有數據類型概念,全部都是類,都是對象。

在Python中即使是整數也被做爲對象(屬於int類)。這和C++、Java(1.5版以前)把整數純粹做爲類型是不一樣的。

屬於一個對象或類的變量被稱爲域。域和方法能夠合稱爲類的屬性。

域有兩種類型——屬於每一個實例/類的對象或屬於類自己。它們分別被稱爲實例變量和類變量。

類方法的self參數。

類的方法都必須有第一個的self形參,self指代對象自己。  #至關於C++中的this

MyObject.method(arg1, arg2)= MyClass.method(MyObject, arg1, arg2)

即方法中的第一個形參位置已是被佔用的了,你只須要給它一個名字,使用方法時,就當它不存在。

pass    # An empty block

類名後跟一對圓括號可建立一個對象/實例   p=person()

_init_方法 對象一被創建,自動運行的方法 初始化   (相似構造函數)

class Person:

    def __init__(self, name):

        self.name = name

    def sayHi(self):

        print 'Hello, my name is', self.name

p = Person('Swaroop')

p.sayHi()

 

在建立一個類的新實例的時候,把參數包括在圓括號內跟在類名後面,從而傳遞給__init__方法。__init__方法在類的一個對象被創建時,立刻運行。這個方法能夠用來對你的對象作一些你但願的初始化。

 

類的變量(域):由一個類的全部對象(實例)共享使用。某一對象對它進行修改,則全部的對象都發生變化。

對象的變量:由類的每一個對象/實例擁有。不共享

 

類定義中沒self點綴的都是屬於類變量。

只能使用self變量來參考同一個對象的變量和方法。

這被稱爲屬性參考。 self.fangfa  self.duixiangbianliang

docstring對於類和方法一樣有用。咱們能夠在運行時使用Person.__doc__和Person.sayHi.__doc__來分別訪問類與方法的文檔字符串。

在類語句塊的開頭或者方法的開頭加上’’’ …….‘’’這個就是文檔字符串了。

__del__方法,它在對象消逝的時候被調用。可以使用del語句刪除一個對象。

當對象再也不被使用時,__del__方法運行,可是很難保證這個方法究竟在何時運行。若是你想要指明它的運行,你就得使用del語句,就如同咱們在之前的例子中使用的那樣。

注意:­­­­__爲雙下劃線

若是你使用的數據成員名稱以雙下劃線前綴好比__privatevar,Python的名稱管理體系會有效地把它做爲私有變量。  (至關於private類型)

私有變量的特徵?

 

SchoolMember類被稱爲基本類或超類。而Teacher和Student類被稱爲導出類或子類。

一個子類型在任何須要父類型的場合能夠被替換成父類型,即對象能夠被視做是父類的實例,這種現象被稱爲多態現象。

Python不會自動調用基本類的constructor,你得親自專門調用它。

若是在繼承元組中列了一個以上的類,那麼它就被稱做多重繼承。

 

使用rjust方法來獲得一個按必定寬度右對齊的字符串。str.rjust(10,’*’);

 

經過建立一個file類的對象來打開一個文件,分別使用file類的read、readline或write方法來恰當地讀寫文件。對文件的讀寫能力依賴於你在打開文件時指定的模式。模式大概有讀模式('r')、寫模式('w')或追加模式('a')。若是咱們沒有指定模式,讀模式會做爲默認的模式。最後,當你完成對文件的操做的時候,你調用close方法來告訴Python咱們完成了對文件的使用。

 

Python提供一個標準的模塊,稱爲pickle。使用它你能夠在一個文件中儲存任何Python對象,以後你又能夠把它完好無損地取出來。這被稱爲持久地儲存對象。

還有另外一個模塊稱爲cPickle,它的功能和pickle模塊徹底相同,只不過它是用C語言編寫的,所以要快得多(比pickle快1000倍)。你可使用它們中的任一個,而咱們在這裏將使用cPickle模塊。記住,咱們把這兩個模塊都簡稱爲pickle模塊。

 

只要是一些非法操做或者運行中出現的錯誤,程序就會中斷並拋出異常。要有意識地去處理可能發生異常的代碼塊。

try:

         語句

except 異常符號/(異常符號元組):

         語句

except:     #全部狀況

         語句

else:

         語句    #可選,沒有異常時發生

 

raise 新定義的異常

 

可使用raise語句引起異常。還得指明錯誤/異常的名稱和伴隨異常觸發的異常對象。你能夠引起的錯誤或異常應該分別是一個Error或Exception類的直接或間接導出類。

except ShortInputException, x:   指定一個異常狀況並跟隨其異常對象

在except從句中,咱們提供了錯誤類和用來表示錯誤/異常對象的變量。

 

try:

finally:

 

在程序運行的時候,可按Ctrl-c中斷/取消程序。(產生異常)KeyboardInterrupt異常被觸發,程序退出。

 

f=file('open.txt','w')  若是沒加’w’的話,默認爲’r’,那麼若是此時文件夾中不存在open.tx

t,會拋出IOError

 

能夠在Python附帶安裝的文檔的「庫參考」一節中瞭解Python標準庫中全部模塊的完整內容。

 

類中的特殊方法

__init__(self,…)  __del__(self)  __str__(self)  對對象使用 print或str()時調用

__lt__(self,other) 使用<運算符時調用

__getitem__(self,key) 使用x[key]索引時調用

__len__(self)  對對象使用len()時調用

 

列表綜合

listone = [2, 3, 4]

listtwo = [2*i for i in listone if i > 2]

print listtwo

在不少時候,咱們都是使用循環來處理列表中的每個元素,而使用列表綜合能夠用一種更加精確、簡潔、清楚的方法完成相同的工做。

 

當要使函數接收元組或字典形式的參數的時候,有一種特殊的方法,它分別使用*和**前綴。這種方法在函數須要獲取可變數量的參數的時候特別有用。

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變量前有*前綴,全部多餘的函數參數都會做爲一個元組存儲在args中。若是使用的是**前綴,多餘的參數則會被認爲是一個字典的鍵/值對。

 

lambda:這是Python支持一種有趣的語法,它容許你快速定義單行的最小函數,相似與C語言中的宏,這些叫作lambda的函數,是從LISP借用來的,能夠用在任何須要函數的地方:

>>> g = lambda x: x * 2

>>> g(3)

6

本質上,lambda須要一個參數,後面僅跟單個表達式做爲函數體,而表達式的值被這個新建的函數返回。注意,即使是print語句也不能用在lambda形式中,只能使用表達式。

 

exec語句用來執行儲存在字符串或文件中的Python語句。eval語句用來計算存儲在字符串中的有效Python表達式。

exec 「print ‘Hello World’」

eval ‘5+5’

 

 

assert語句用來聲明某個條件是真的。

當assert語句失敗的時候,會引起一個AssertionError。

assert 判斷語句

 

repr()函數和` `用來得到對象的規範字符串表示。能夠經過定義類的__repr__方法來控制你的對象在被repr()調用的時候返回的內容。

eval(repr(對象))==對象

 

有許多可供選擇的使用Python的GUI:

PyQt 這是Qt工具包的Python綁定。Qt工具包是構建KDE的基石。

PyGTK 這是GTK+工具包的Python綁定。GTK+工具包是構建GNOME的基石。

wxPython 這是wxWidgets工具包的Python綁定。

TkInter 這是現存最老的GUI工具包之一。若是你使用過IDLE,它就是一個TkInter程序。TkInter是標準Python發行版的一部分。

Python標準庫是一個豐富的庫,在大多數時候,你能夠在這個庫中找到你所需的東西。

Python.org

 

Jython是用Java語言實現的Python解釋器。這意味着你能夠用Python語言編寫程序而同時使用Java庫!

IronPython是用C#語言實現的Python解釋器,能夠運行在.NET、Mono和DotGNU平臺上。這意味着你能夠用Python語言編寫程序而使用.NET庫以及其餘由這三種平臺提供的庫!

使你的計算機自動地完成許多先前沒法想象的工做或者編寫你本身的遊戲,以及更多別的什麼東西。

 

 

關於字節流及其轉換的問題?

Python中返回多個值的方法!  利用元組tuple    return (x,y,z)  寫成返回元組的形式

在調用時,用元組去接收便可

關於切片運算符  不少須要再說明下

y[::-1]   就是倒序

 

序列,元組索引都跟C中的數組同樣,a[0]即爲第一個元素

a[0:N]  會顯示 a[0]到a[N-1]個元素

a[0:-1]  -1指倒退 即a[0:N-1]  因此顯示 a[0]到a[N-2]這些元素

序列,元組的特色    a[-1] 便是 a[N-1]

 

rfft、irfft與fft、ifft的區別和應用?

利用rfft對來作統計相關不太可行

fft(x)   x爲是實信號,則第一點的虛部必爲0,若x爲偶數點,則第N/2+1個點虛部也爲0

x.shape[axis]  首先,x是一個矩陣,shape返回一個元組,說明每一個維度的元素個數。

若是是一維數組,返回的是一個(N,)的元組 

 

set() 去掉重複元素

sorted()  重排

對於序列list     list.index()用於返回序列中指定值的序號

 

#s.split([sep, [maxsplit]]) 以sep是分隔符,把s分割成一個list。sep默認爲空格。maxsplit是分割的次數,默認是對整個s進行分割
#s.rsplit([sep, [maxsplit]]) 和split()的區別是它是從s的串尾往前進行分割

 

#s.splitlines([keepends]) 把s按照行分隔符分紅一個list。若是keepends爲True則list的每一個元素保留行分割符,若是爲False則不保留分隔符

#s.join(seq) 用s把seq序列串聯起來

相關文章
相關標籤/搜索