1、在項目工程中要模塊化測試一個開發的功能,在測試通過后交付給項目組其他人員繼續開發。要保證代碼開發的性能和效率以及可擴展性。
2、項目工程中的文件夾分類要功能模塊明確清晰,在python中引入某一個 文件夾下的文件可以使用如下方式:
- try:
- from ..socket.image_pb2 import Image
- from ..util.constant import constantProxy
- except:
- from python.src.socket.image_pb2 import Image
- from python.src.util.constant import constantProxy
3、如果在導入某個模塊的時候不存在,則在cmd下使用pip3 install ?modeual名來進行安裝和更新。
4、一個 py文件中可以定義多個class類,類中輸入參數可以實現繼承,其中self關鍵字就是指代當前對象。
5、一般在一個class類中首先有一個__init__函數,這個函數完成一些初始化構造工作。
6、在Python的class類中定義一個個的def方法的時候,要學會多使用try--except的語句。
7、要學會加入log日志打印出錯信息。
8、if __name__ == '__main__':是程序的入口地方。
9、Python更像是一種偽代碼。
?快速入門2.1 Hello world
? ? 安裝完Python之后(我本機的版本是2.5.4),打開IDLE(Python GUI) , 該程序是Python語言解釋器,你寫的語句能夠立即運行.我們寫下一句著名的程序語句:
print "Hello,world!"
? ? 并按回車.你就能看到這句被K&R引入到程序世界的名言.
? ? 在解釋器中選擇"File"--"New Window" 或快捷鍵 Ctrl+N , 打開一個新的編輯器.寫下如下語句:
print "Hello,world!"
raw_input("Press enter key to close this window");
? ? 保存為a.py文件.按F5,你就可以看到程序的運行結果了.這是Python的第二種運行方式.
? ? 找到你保存的a.py文件,雙擊.也可以看到程序結果.Python的程序能夠直接運行,對比Java,這是一個優勢.
--------------------------------------------------------------------------------
2.2 國際化支持
? ? 我們換一種方式來問候世界.新建一個編輯器并寫如下代碼:
print "歡迎來到奧運中國!"
raw_input("Press enter key to close this window");
? ? 在你保存代碼的時候,Python會提示你是否改變文件的字符集,結果如下:
- #?-*-?coding:?cp936?-*-???
- ??
- print?"歡迎來到奧運中國!"??
- raw_input("Press?enter?key?to?close?this?window");??
? ? 將該字符集改為我們更熟悉的形式:
- #?-*-?coding:?GBK?-*-???
- ??
- print?"歡迎來到奧運中國!"?#?使用中文的例子??
- raw_input("Press?enter?key?to?close?this?window");??
? ? 程序一樣運行良好.
--------------------------------------------------------------------------------
2.3?方便易用的計算器
? ? 用微軟附帶的計算器來計數實在太麻煩了.打開Python解釋器,直接進行計算:
- a=100.0??
- b=201.1??
- c=2343??
- print?(a+b+c)/c??
--------------------------------------------------------------------------------
2.4 字符串,ASCII和UNICODE
? ? 可以如下打印出預定義輸出格式的字符串:
- print?"""?
- Usage:?thingy?[OPTIONS]?
- ?????-h????????????????????????Display?this?usage?message?
- ?????-H?hostname???????????????Hostname?to?connect?to?
- """??
字符串是怎么訪問的?請看這個例子:
- word="abcdefg"??
- a=word[2]??
- print?"a?is:?"+a??
- b=word[1:3]??
- print?"b?is:?"+b?#?index?1?and?2?elements?of?word.??
- c=word[:2]??
- print?"c?is:?"+c?#?index?0?and?1?elements?of?word.??
- d=word[0:]??
- print?"d?is:?"+d?#?All?elements?of?word.??
- e=word[:2]+word[2:]??
- print?"e?is:?"+e?#?All?elements?of?word.??
- f=word[-1]??
- print?"f?is:?"+f?#?The?last?elements?of?word.??
- g=word[-4:-2]??
- print?"g?is:?"+g?#?index?3?and?4?elements?of?word.??
- h=word[-2:]??
- print?"h?is:?"+h?#?The?last?two?elements.??
- i=word[:-2]??
- print?"i?is:?"+i?#?Everything?except?the?last?two?characters??
- l=len(word)??
- print?"Length?of?word?is:?"+?str(l)??
? ? 請注意ASCII和UNICODE字符串的區別:
- print?"Input?your?Chinese?name:"??
- s=raw_input("Press?enter?to?be?continued");??
- print?"Your?name?is??:?"?+s;??
- l=len(s)??
- print?"Length?of?your?Chinese?name?in?asc?codes?is:"+str(l);??
- a=unicode(s,"GBK")??
- l=len(a)??
- print?"I'm?sorry?we?should?use?unicode?char!Characters?number?of?your?Chinese?\??
- name?in?unicode?is:"+str(l);??
--------------------------------------------------------------------------------
2.5 使用List
? ? 類似Java里的List,這是一種方便易用的數據類型:
- word=['a','b','c','d','e','f','g']??
- a=word[2]??
- print?"a?is:?"+a??
- b=word[1:3]??
- print?"b?is:?"??
- print?b?#?index?1?and?2?elements?of?word.??
- c=word[:2]??
- print?"c?is:?"??
- print?c?#?index?0?and?1?elements?of?word.??
- d=word[0:]??
- print?"d?is:?"??
- print?d?#?All?elements?of?word.??
- e=word[:2]+word[2:]??
- print?"e?is:?"??
- print?e?#?All?elements?of?word.??
- f=word[-1]??
- print?"f?is:?"??
- print?f?#?The?last?elements?of?word.??
- g=word[-4:-2]??
- print?"g?is:?"??
- print?g?#?index?3?and?4?elements?of?word.??
- h=word[-2:]??
- print?"h?is:?"??
- print?h?#?The?last?two?elements.??
- i=word[:-2]??
- print?"i?is:?"??
- print?i?#?Everything?except?the?last?two?characters??
- l=len(word)??
- print?"Length?of?word?is:?"+?str(l)??
- print?"Adds?new?element"??
- word.append('h')??
- print?word???
--------------------------------------------------------------------------------
2.6?條件和循環語句
- #?Multi-way?decision??
- x=int(raw_input("Please?enter?an?integer:"))??
- if?x<0:??
- ????x=0??
- ????print?"Negative?changed?to?zero"??
- elif?x==0:??
- ????print?"Zero"??
- else:??
- ????print?"More"??
- ??
- #?Loops?List??
- a?=?['cat',?'window',?'defenestrate']??
- for?x?in?a:??
- ????print?x,?len(x)??
--------------------------------------------------------------------------------
2.7?如何定義函數
- #?Define?and?invoke?function.??
- def?sum(a,b):??
- ????return?a+b??
- func?=?sum??
- r?=?func(5,6)??
- print?r??
- ??
- #?Defines?function?with?default?argument??
- def?add(a,b=2):??
- ????return?a+b??
- r=add(1)??
- print?r??
- r=add(1,5)??
- print?r??
????并且,介紹一個方便好用的函數:
- #?The?range()?function??
- a?=range(5,10)??
- print?a??
- a?=?range(-2,-7)??
- print?a??
- a?=?range(-7,-2)??
- print?a??
- a?=?range(-2,-11,-3)?#?The?3rd?parameter?stands?for?step??
- print?a??
--------------------------------------------------------------------------------
2.8 文件I/O
- spath="D:/download/baa.txt"??
- f=open(spath,"w")?#?Opens?file?for?writing.Creates?this?file?doesn't?exist.??
- f.write("First?line?1.\n")??
- f.writelines("First?line?2.")??
- f.close()??
- f=open(spath,"r")?#?Opens?file?for?reading??
- for?line?in?f:??
- ????print?line??
- f.close()??
--------------------------------------------------------------------------------
2.9 異常處理
- s=raw_input("Input?your?age:")??
- if?s?=="":??
- ????raise?Exception("Input?must?no?be?empty.")??
- try:??
- ????i=int(s)??
- except?ValueError:??
- ????print?"Could?not?convert?data?to?an?integer."??
- except:??
- ????print?"Unknown?exception!"??
- else:?#?It?is?useful?for?code?that?must?be?executed?if?the?try?clause?does?not?raise?an?exception??
- ????print?"You?are?%d"?%?i,"?years?old"??
- finally:?#?Clean?up?action??
- ????print?"Goodbye!"??
--------------------------------------------------------------------------------
2.10 類和繼承
- class?Base:??
- ????def?__init__(self):??
- ????????self.data?=?[]??
- ????def?add(self,?x):??
- ????????self.data.append(x)??
- ????def?addtwice(self,?x):??
- ????????self.add(x)??
- ????????self.add(x)??
- ??
- #?Child?extends?Base??
- class?Child(Base):??
- ????def?plus(self,a,b):??
- ????????return?a+b??
- oChild?=Child()??
- oChild.add("str1")??
- print?oChild.data??
- print?oChild.plus(2,3)??
--------------------------------------------------------------------------------
2.11 包機制
? ? 每一個.py文件稱為一個module,module之間可以互相導入.請參看以下例子:
- #?a.py??
- def?add_func(a,b):??
- ????return?a+b??
?
- #?b.py??
- from?a?import?add_func?#?Also?can?be?:?import?a??
- print?"Import?add_func?from?module?a"??
- print?"Result?of?1?plus?2?is:?"??
- print?add_func(1,2)????#?If?using?"import?a"?,?then?here?should?be?"a.add_func"??
? ? module可以定義在包里面.Python定義包的方式稍微有點古怪,假設我們有一個parent文件夾,該文件夾有一個child子文件夾.child中有一個module a.py . 如何讓Python知道這個文件層次結構?很簡單,每個目錄都放一個名為_init_.py 的文件.該文件內容可以為空.這個層次結構如下所示:?
parent?
? --__init_.py
? --child
? ? -- __init_.py
? ? --a.py
b.py
那么Python如何找到我們定義的module?在標準包sys中,path屬性記錄了Python的包路徑.你可以將之打印出來:
import sys
print sys.path
? ? 通常我們可以將module的包路徑放到環境變量PYTHONPATH中,該環境變量會自動添加到sys.path屬性.另一種方便的方法是編程中直接指定我們的module路徑到sys.path 中:
- import?sys??
- sys.path.append('D:\\download')??
- from?parent.child.a?import?add_func??
- print?sys.path??
- print?"Import?add_func?from?module?a"??
- print?"Result?of?1?plus?2?is:?"??
- print?add_func(1,2)??
--------------------------------------------------------------------------------
總結 ? ?
? ?你會發現這個教程相當的簡單.許多Python特性在代碼中以隱含方式提出,這些特性包括:Python不需要顯式聲明數據類型,關鍵字說明,字符串函數的解釋等等.我認為一個熟練的程序員應該對這些概念相當了解,這樣在你擠出寶貴的一小時閱讀這篇短短的教程之后,你能夠通過已有知識的遷移類比盡快熟悉Python,然后盡快能用它開始編程.
確切的說,編程語言包括語法和標準庫.語法相當于武術招式,而標準庫應用實踐經驗則類似于內功,需要長期鍛煉.Python學習了Java的長處,提供了大量極方便易用的標準庫供程序員"拿來主義".(這也是Python成功的原因)