• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Sunshine Alike

            半完美主義

              C++博客 :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
              35 Posts :: 1 Stories :: 56 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(15)

            積分與排名

            • 積分 - 50540
            • 排名 - 452

            最新隨筆

            最新評(píng)論

            突然一時(shí)興起找了個(gè)Python的Tutorial看了一下下,哈哈,感覺(jué)非常好,很小巧很討喜的語(yǔ)言,比較有特點(diǎn)。第一印象是很簡(jiǎn)單,語(yǔ)法簡(jiǎn)潔而又功能強(qiáng)大,準(zhǔn)備要嘗試學(xué)一下。

            下面貼一點(diǎn)學(xué)習(xí)的筆記:

            一、基本知識(shí)
            Python同時(shí)即是腳本解釋器,又是一個(gè)可以運(yùn)行命令行的shell。在shell里可以計(jì)算任務(wù)Python表達(dá)式,甚至包括變量賦值,這些變量在shell打開(kāi)時(shí)一直有效,關(guān)閉時(shí)丟失數(shù)據(jù)。

            函數(shù)聲明,以def開(kāi)始,函數(shù)名,參數(shù),冒號(hào)后面跟函數(shù)體。需要注意的是Python里的格式都以縮進(jìn)的形式來(lái)表達(dá),沒(méi)有類C/C++中的大括號(hào)。另外函數(shù) 不需要指定返回值類型,實(shí)際上,如果函數(shù)有return語(yǔ)句,它將返回指定類型值,否則返回None(Python的空值)。

            Python即是動(dòng)態(tài)語(yǔ)言,它不需要顯示數(shù)據(jù)類型聲明,賦值的同時(shí)即完成變量聲明。又是強(qiáng)類型語(yǔ)言,一個(gè)變量一旦獲得一個(gè)數(shù)據(jù)類型,它實(shí)際上就一直是這個(gè)類型的了。

            Python里的“對(duì)象”概念,這里的“對(duì)象”不同于以前接觸到的OO里的對(duì)象,Python里的對(duì)象定義更為廣泛。一個(gè)程序塊,一個(gè)變量,甚至一個(gè)字符串都可以是一個(gè)對(duì)象。其具體含義還需要根據(jù)上下文來(lái)判斷。

            三種重要的內(nèi)置數(shù)據(jù)類型:Dictionary,List,Tuple:
            Dictionary對(duì)應(yīng)于C++中的map和Java中的hashtable,也就是一個(gè)鍵值對(duì)集合。
            List對(duì)應(yīng)于C++中的vector和java中的ArrayList,一個(gè)可以動(dòng)態(tài)自動(dòng)擴(kuò)展的數(shù)組。
            Tuple是一個(gè)不可變的list,一旦創(chuàng)建就不能以方式改變它,但是好在Python提供了在Tuple和List之間相互轉(zhuǎn)換的函數(shù)。
            需要注意的是List和Tuple是可以存儲(chǔ)混合類型的數(shù)組的,并且都可以通過(guò)索引取值(包括負(fù)的索引值,其表示從逆序取值)

            For語(yǔ)句:

            Python里的for語(yǔ)句不同于C/C++中的for,更類似于C#中的foreach循環(huán)或者是Java中的for (int i : IntArray)。Python的for語(yǔ)句需要配合一個(gè)range函數(shù)使用,它有三個(gè)參數(shù),并返回一個(gè)Tupe數(shù)組用于表示索引,三個(gè)參數(shù)是start,stop,step,例如range(0,5,1)則返回[0,1,2,3,4];range(5,0,-1)則返回[5,4,3,2,1]。

            字符串格式化:
            與C中類似%d,%f,%s等等,通過(guò)字符串的join函數(shù)可以方便的將list的內(nèi)容合并成字符串。

            and/or:
            and和or負(fù)責(zé)執(zhí)行布爾邏輯運(yùn)算,但是它們不返回布爾值而是返回它們實(shí)際進(jìn)行比較的值之一。非空的對(duì)象被認(rèn)為是真,空對(duì)象則被認(rèn)為是假。and運(yùn)算會(huì)返回第一個(gè)假值,而or運(yùn)算返回第一個(gè)真值,其它部分都不會(huì)被計(jì)算到

            lambda函數(shù):
            一種快速定義的單行最小函數(shù),只有一行,類似于內(nèi)聯(lián)的感覺(jué)。例如一個(gè)例子:
            ld = lambda i : i*i
            ld(10) # == 100
            理論上lambda函數(shù)可以有多個(gè)參數(shù)(包括可選參數(shù))并且隱含的返回單個(gè)表達(dá)式的值。

            兩種導(dǎo)入(import)方法:

            Python中有兩種導(dǎo)入模塊的方法: import xx / from xx import yy

            它們的差別在于,from xx import yy這種方式,yy被直接導(dǎo)入到了局部命名空間中(類似于C++中的using),在以后使用yy的時(shí)候不再需要(不能)加上模塊名稱限定。也就是說(shuō),如果使用import方式導(dǎo)入模塊,在使用 它里面的一個(gè)變量的時(shí)候,你不得不每次都加上前綴xx.來(lái)表示使用的是位于xx模塊中的變量,而使用from導(dǎo)入時(shí),則不需要加入前綴。

            異常處理:
            Python中使用try...except來(lái)處理異常,使用raise來(lái)引發(fā)異常。并且,一個(gè)except后面可以跟一個(gè)else塊來(lái)表示沒(méi)有捕獲預(yù)期異常時(shí)的行為。一個(gè)try塊后面也可以跟一個(gè)finally塊來(lái)保證一些代碼總是被執(zhí)行到,比如打開(kāi)文件后的關(guān)閉操作。

            注釋:
            Python里使用#來(lái)作為單選注釋開(kāi)始符,使用三個(gè)冒號(hào)作為多行注釋"""content""",
            需要注意的是后一種形式的注意經(jīng)常被用來(lái)作為函數(shù)或者類的"說(shuō)明",寫(xiě)在這里的內(nèi)容可以被其使用者當(dāng)作參考手冊(cè)來(lái)使用,Ptyhon里所有對(duì)象都具有一個(gè)內(nèi)置的__doc__屬性,通過(guò)它可以查看各個(gè)對(duì)象的說(shuō)明,應(yīng)該養(yǎng)成寫(xiě)__doc__的習(xí)慣。一般其格式為首行以大寫(xiě)字母開(kāi)始,句號(hào)結(jié)尾。第二行是空行,從第三行開(kāi)始是詳細(xì)的描述

            引號(hào):
            Python里有單引號(hào),雙引號(hào)和三引號(hào)。其中單引號(hào)和雙引號(hào)都可以用來(lái)表示字符串,例如
            print 'string' == "string" 將會(huì)打印出True
            設(shè)置這兩種字符串引號(hào)的目的是為了簡(jiǎn)化引號(hào)的表示,例如如果字符串里含有引號(hào)本身就需要使用\來(lái)進(jìn)行標(biāo)識(shí),例如:'let\'s go!',“he said:\"get out!\"”。
            如果字符串里含有大量這種情況會(huì)顯得非常麻煩,可以交替使用單引號(hào)和雙引號(hào)來(lái)避免這種情況。上面的例子可以改為:"let's go!",'he said:"get out!"'。
            而三引號(hào)就是用來(lái)表示一個(gè)多行字符串。它們經(jīng)常被用來(lái)定義文檔字符串,它的首行以大寫(xiě)字母開(kāi)始,句號(hào)結(jié)尾。第二行是空行,從第三行開(kāi)始是詳細(xì)的描述。建議從一開(kāi)始就遵守這個(gè)慣例。

            二、面向?qū)ο?/font>

            類的定義:
            以class開(kāi)頭,pass表示結(jié)束(實(shí)際上沒(méi)有特定的u),例如一個(gè)簡(jiǎn)單的類定義為
            class Person:
            ??? pass
            如果要表示繼承關(guān)系只需要將基類用括號(hào)回到類名后面即可,Python支持多重繼續(xù),每個(gè)基類中間以逗號(hào)隔開(kāi)。
            class Student(Person):
            ? pass
            這里的pass語(yǔ)句僅表示占位之用,沒(méi)有特別的含義。

            類成員定義:
            __init__方法,這個(gè)函數(shù)的功能很類似于Java或者C++中的構(gòu)造函數(shù),但是仍存在一點(diǎn)細(xì)小的差別,__init__函數(shù)的第一個(gè)參數(shù)一定是self,類似于C++中的this指針。
            __init__方法的定義并不是必須的,但是一旦你定義了它,就必須顯示的調(diào)用父類的__init__方法。
            需要注意的是,所有的類成員方法都必須定義一個(gè)參數(shù)(self)但它的名字不是一定的,其作用類似于C++中的this指針。
            __del__方法,類似于析構(gòu)函數(shù),在使用del語(yǔ)句的時(shí)候被調(diào)用。

            重載:
            Python的類沒(méi)有任何形式的函數(shù)重載,即一個(gè)方法名稱只能對(duì)應(yīng)一個(gè)方法,如果子類中定義的與基類中同名的方法,則會(huì)將其覆蓋掉。

            成員屬性:
            Python中有兩種類型的成員方法:普通類方法和專用類方法
            成員也有兩種訪問(wèn)級(jí)別:公開(kāi)的和私有的
            其中公開(kāi)和私有成員的表示沒(méi)有特別的關(guān)鍵字,只是體現(xiàn)的方法名稱上,私有成員的名稱以兩個(gè)短小的下劃線作為開(kāi)始例如:
            class A:
            ? __privatevalue
            ? publicvalue
            ? def __set(self, v):
            ??? __privatevalue = v
            ? def get(self):
            ??? return publicvalue
            ? pass
            并且,一個(gè)成員是屬于類的還是屬于對(duì)象的,是通過(guò)定義這個(gè)變量的域來(lái)確定的,定義在類體內(nèi)的變量由所有成員共享,通過(guò)self定義的變量則為成員變量。
            此外,類的成員方法還分為:普通類方法和專用類方法。普通方法的定義與普通函數(shù)定義類似,它是公開(kāi)的,在類外部可以被調(diào)用。而類的專用方法,沒(méi)有特殊的關(guān)鍵字來(lái)表示,只是在方法的名稱前后各加上兩個(gè)短的下劃線,例如def __getitem__。這種專用方法是由用戶顯式調(diào)用的,它有點(diǎn)操作符重載的意思在里面,但是功能比操作符重載要強(qiáng)大一些。Python允許我們自己定義需要的類專用方法,例如任何定義了__cmp__方法的類就可以用==進(jìn)行比較,任何定義了__len__方法的類就可以用len(instance)進(jìn)行取長(zhǎng)度。

            三、標(biāo)準(zhǔn)庫(kù)
            1.文件操作
            Python中有一個(gè)內(nèi)置函數(shù)open可以用來(lái)打開(kāi)文件
            file = open("pictures/dog.bmp","rb")
            open函數(shù)可以接受三個(gè)參數(shù):文件名,模式和緩沖區(qū)參數(shù),但是只有每一個(gè)參數(shù)是必須的,文件會(huì)默認(rèn)以文本方式打開(kāi)。
            文件的讀取和C中類似,tell()返回當(dāng)前文件位置,seek來(lái)移動(dòng)文件操作的位置。具體的函數(shù)使用方法可以使用print seek.__doc__來(lái)查看

            處理I/O錯(cuò)誤:
            try:
            ? file = open(filename, "rb", 0)
            ? try:
            ??? file.seek(-128,2)
            ??? data = file.read(128)
            ??? file.seek(0,2)
            ??? file.write("succeeded")
            ??? finally:
            ????? file.close()
            ? expect IOError:
            ??? pass

            Python提供了一個(gè)os.path模塊來(lái)進(jìn)行目錄操作,具體使用方法就不詳細(xì)寫(xiě)出來(lái)了,用過(guò)幾次就記住了。

            2.序列化
            標(biāo)準(zhǔn)庫(kù)里有兩個(gè)模塊都提供這個(gè)功能,picklecPickle,用于將對(duì)象存儲(chǔ)到文件中而后再讀取出來(lái)。
            但是后者是使用C語(yǔ)言寫(xiě)的,速度要比前面的快很多,但是功能都是一樣的。
            使用也很簡(jiǎn)便主要就是使用dump和load函數(shù)

            ------------------待續(xù)----------------


            posted on 2010-03-30 22:34 Sunshine Alike 閱讀(967) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Python
            久久久久久夜精品精品免费啦| 久久99精品国产麻豆宅宅| 久久久久人妻精品一区三寸蜜桃| 三级片免费观看久久| 亚洲AV日韩精品久久久久久久| 久久亚洲国产欧洲精品一| 久久久久无码专区亚洲av| 亚洲午夜久久久久久久久久| 久久久91精品国产一区二区三区| 亚洲精品NV久久久久久久久久| 精品久久久久久久无码| 波多野结衣久久精品| 久久免费高清视频| 久久人人爽人人爽人人片AV不| 久久久久婷婷| 伊人久久大香线蕉影院95| 久久久久国产精品熟女影院| 国产69精品久久久久观看软件| 久久精品国产亚洲一区二区| 久久精品一区二区三区AV| 久久99精品免费一区二区| 潮喷大喷水系列无码久久精品| 色欲综合久久躁天天躁| 亚洲狠狠综合久久| 九九99精品久久久久久| 国产精品免费看久久久| 久久精品黄AA片一区二区三区| 精品久久久久久中文字幕大豆网 | 久久久久亚洲av成人网人人软件| 婷婷久久综合九色综合98| 久久婷婷五月综合97色一本一本 | 久久国产成人亚洲精品影院| 久久99毛片免费观看不卡| 久久福利青草精品资源站| 浪潮AV色综合久久天堂| 亚洲午夜久久久影院| 亚洲欧美成人综合久久久| 欧美熟妇另类久久久久久不卡 | 国内精品伊人久久久影院| 久久久免费观成人影院| 99久久香蕉国产线看观香|