發表文章

python 研究-raw_input 和 input 差異比較

python中raw_input和input用法與區別 raw_input和input兩個函數是python中常用的函數了,但是我用到最多的是input函數了這個不有置疑了,但raw_input函數有與input函數在用法上有什麼區別呢?下面我們一起來看看吧。 在使用python編寫交互式程式時,經常用到的兩個內部函數是raw_input和input(最常用還是input) ,本篇就通過一些示例看下兩者之間的區別 。 一、raw_input 1.輸入字串 程式碼如下    nID = '' while 1: nID = raw_input("Input your id plz") if len(nID) != len("yang"): print 'wring length of id,input again' else: break print 'your id is %s' % (nID) 2.輸入整數 程式碼如下    nAge = int(raw_input("input your age plz:n")) if nAge > 0 and nAge < 120: print 'thanks!' else: print 'bad age' print 'your age is %dn' % nAge 3.輸入浮點型 程式碼如下    fWeight = 0.0 fWeight = float(raw_input("input your weightn")) print 'your weight is %f' % fWeight 4.輸入16進制資料 程式碼如下    nHex = int(raw_input('input hex value(like 0x20):n'),16) print 'nHex = %x,nOct = %dn' %(nHex,nHex) 5.輸入8進制資料 程式碼如下    nOct = int(raw_input('input oct value(like 020):n'),8) pri...

python 研究-with as 用法

With語句是什麼? 有一些任務,可能事先需要設置,事後做清理工作。對於這種場景,Python的with語句提供了一種非常方便的處理方式。一個很好的例子是文件處理,你需要獲取一個文件句柄,從文件中讀取資料,然後關閉文件句柄。 如果不用with語句,程式碼如下:     file = open("/tmp/foo.txt")     data = file.read()     file.close() 這裡有兩個問題:     一是可能忘記關閉文件句柄;     二是文件讀取資料發生異常,沒有進行任何處理。 下面是處理異常的加強版本:     try:         f = open('xxx')     except:         print 'fail to open'         exit(-1)     try:         do something     except:         do something     finally:          f.close() 雖然這段程式碼執行良好,但是太冗長了。 這時候就是with一展身手的時候了。除了有更優雅的語法,with還可以很好的處理上下文環境產生的異常。 下面是with版本的程式碼:     with open("/tmp/foo.txt") as file:       ...

python 研究-一些特殊函數用法

Map函數: 原型:map(function, sequence),作用是將一個列表映射到另一個列表, 使用方法: def f(x):     return x**2 l = range(1,10) map(f,l) Out[3]: [1, 4, 9, 16, 25, 36, 49, 64, 81]     Reduce函數 原型:reduce(function, sequence, startValue),作用是將一個列表歸納為一個輸出, 使用方法: def f2(x,y):     return x+y reduce(f1,l) Out[7]: 45 reduce(f2,l,10) Out[8]: 55     Filter函數 原型:filter(function, sequence),作用是按照所定義的函數過濾掉列表中的一些元素, 使用方法: def f2(x):     return x%2 != 0 filter(f2,l) Out[5]: [1, 3, 5, 7, 9] 記住:這裡的function必須返回布爾值。     Lambda函數 原型:lambda <參數>: 函數體,隱函數,定義一些簡單的操作, 使用方法: f3 = lambda x: x**2 f3(2) Out[10]: 4 還可以結合map、reduce、filter來使用,如: map(f3,l) Out[11]: [1, 4, 9, 16, 25, 36, 49, 64, 81]     列表推導式 基本形式:[x for item in sequence <if (conditions)>], 這裡x表示對item的操作, 使用方法: [i**2 for i in l] Out[12]: [1, 4, 9, 16, 25, 36, 49, 64, 81]     字典設置預設值 python字典中設置條目預設值在有些時候非常有用,例如初始化一個字典的時候。 使用方法: x = {} x.setdefault(1,0) ...

Python 研究-常用函數之Join, Split, Zip, Map, Reduce, Filter

Python 常用函數之Join, Split, Zip, Map, Reduce, Filter 1. Join, Split A 關於Join和Split方法 1) 只針對字串進行處理。split:拆分字串、join連接字串 2) string.join(sep): 以string作為分割符,將sep中所有的元素(字串表示)合併成一個新的字串 3) string.split(str=』 『,num=string.count(str)): 以str為分隔符,切片string,如果num有指定值,則僅分隔num個子字串 4) 對導入os模組進行os.path.splie()/os.path.join() 貌似是處理機制不一樣,但是功能上一樣 B Join a='abcd' print '.'.join(a)   print '|'.join(['a','b','c'])  #可以把['a','b','c']看做是 a='abcd';下面同理 print '.'.join({'a':1,'b':2,'c':3,'d':4}) ```  注意:'.'等做分隔符,將join裡的所有元素(字串)通過分隔符連接成一個新的字串。    **os.path.join(path1[,path2[,......]])**  ``` python \\將多個路徑組合後返回,第一個絕對路徑之前的參數將被忽略。 >>> os.path.join('c:\\', 'csv', 'test.csv') 'c:\\csv\\test.csv' >>> os.path.join('windows\temp', 'c:\\', 'csv', 'test.csv') 'c:\\csv\\test.csv' >>> os.path.join('/ho...

Python 研究-深入理解yield

Python 深入理解yield yield的英文單詞意思是生產,剛接觸Python的時候感到非常困惑,一直沒弄明白yield的用法。 只是粗略的知道yield可以用來為一個函數返回值塞資料,比如下面的例子: def addlist(alist):     for i in alist:         yield i + 1 取出alist的每一項,然後把i + 1塞進去。然後通過呼叫取出每一項: alist = [1, 2, 3, 4] for x in addlist(alist):     print x, 這的確是yield套用的一個例子,但是,看過limodou的文章《2.5版yield之學習心得》,並自己反覆體驗後,對yield有了一個全新的理解。 1. 包含yield的函數 假如你看到某個函數包含了yield,這意味著這個函數已經是一個Generator,它的執行會和其他普通的函數有很多不同。比如下面的簡單的函數: def h():     print 'To be brave'     yield 5 h() 可以看到,呼叫h()之後,print 語句並沒有執行!這就是yield,那麼,如何讓print 語句執行呢?這就是後面要討論的問題,通過後面的討論和學習,就會明白yield的工作原理了。 2. yield是一個表達式 Python2.5以前,yield是一個語句,但現在2.5中,yield是一個表達式(Expression),比如: m = yield 5 表達式(yield 5)的返回值將賦值給m,所以,認為 m = 5 是錯誤的。那麼如何獲取(yield 5)的返回值呢?需要用到後面要介紹的send(msg)方法。 3. 透過next()語句看原理 現在,我們來揭曉yield的工作原理。我們知道,我們上面的h()被呼叫後並沒有執行,因為它有yield表達式,因此,我們通過next()語句讓它執行。next()語句將恢復Generator執行,並直到下一個yield表達式處。比如: def h():     print 'We...

Python 研究-程式碼風格指引

Python 程式碼風格指引 ◎ 本文轉載自 http://wiki.jiayun.org/PEP_8_--_Style_Guide_for_Python_Code#References,原作者為 Guido van Rossum、Barry Warsaw,翻譯者為:JiaYun 簡介 本文件提供 Python 主要發行版本標準程式庫中的 Python 程式碼所用的撰寫慣例。關於 Python 的 C 實作中所用的 C 語言風格指引,請參考相關的 PEP[1]。 本文件改寫自 Guido 所寫的 Python 風格指引文章 [2],並增添一些 Barry 的風格指引 [5] 的內容。當兩者有衝突時,本 PEP 以 Guido 風格為準。本 PEP 可能仍未完成(事實上,可能永遠不會完工<眨眼>)。 愚蠢的一致性是小心眼中的妖怪 Guido 的重要見解之一是:程式碼被閱讀的次數,遠大於被撰寫的次數。提供本指引的目的,是為了增進程式碼的可讀性,並使 Python 程式碼在各方面保持一致性。如同 PEP 20 [6] 所說的「可讀性至關重要」。 風格指引關注的是一致性。和本指引一致很重要,在專案中保持一致性又更重要,但在 module 或 function 中保持一致性則最重要。 但更更重要的是:知道何時該不一致 -- 有時候風格指引就是無法適用。有疑惑時,運用你的最佳判斷力。看看其他例子,並決定何者最好看。需要的時候,儘管發問。 打破特定規則的兩個好理由: 1.    使用該規則會造成程式碼可讀性變差,特別是對習慣該規則的人來說,可讀性也變差的時候。 2.    為了和前後(可能是因為歷史性因素)打破該規則的程式碼保持一致性時 -- 雖然這也是清理他人雜亂程式碼的時機(在真正的 Extreme Programming 開發中)。 程式碼編排 縮排 每個縮排層級使用 4 個空白。 在相當舊的程式碼中,為了一致可以繼續使用 tab。 tab 或空白? 絕對不要混用 tab 和空白。 縮排 Python 最常用的方式是只用空白。第二常用的方式是只用 tab。混用 tab 和空白來縮排的程式碼,應該轉成只用空白。在呼叫 Python 直譯器時加上 -t 選項,它會對混用 tab 和空白的程式發出警告。若使用 -tt 選項...

Python 研究-魔術方法指南

Python 魔術方法指南 •    入門 •    構造和初始化 •    構造定製類 o    用於比較的魔術方法 o    用於數值處理的魔術方法 •    表現你的類 •    控制屬性訪問 •    新增定製序列 •    反射 •    可以呼叫的物件 •    會話管理器 •    新增描述器物件 •    持久化物件 •    總結 •    附錄 介紹 此教程為我的數篇文章中的一個重點。主題是魔術方法。 什麼是魔術方法?他們是物件導向的Python的一切。他們是可以給你的類增加」magic」的特殊方法。他們總是被雙下劃線所包圍(e.g. __init__ 或者 __lt__)。 然而他們的文件卻遠沒有提供應該有的內容。Python中所有的魔術方法均在Python官方文件中有相應描述,但是對於他們的描述比較混亂而且組織比較 鬆散。很難找到有一個例子(也許他們原本打算的很好,在開始語言參考中有描述很詳細,然而隨之而來的確是枯燥的語法描述等等)。 所以,為了修補我認為Python文件應該修補的瑕疵,我決定給Python中的魔術方法提供一些用平淡的語言和範例驅使的文件。我在開始已經寫了數篇博文,現在在這篇文章中對他們進行總結。 我希望你能夠喜歡這篇文章。你可以將之當做一個教程,一個補習資料,或者一個參考。本文章的目的僅僅是為Python中的魔術方法提供一個友好的教程。 構造和初始化 每個人都知道一個最基本的魔術方法, __init__ 。通過此方法我們可以定義一個物件的初始操作。然而,當我呼叫 x = SomeClass() 的時候, __init__ 並不是第一個被呼叫的方法。實際上,還有一個叫做 __new__ 的方法,來構造這個範例。然後給在開始新增時候的初始化函數來傳遞參數。在物件生命週期的另一端,也有一個 ...