• <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>

            Welcome to 陳俊峰's ---BeetleHeaded Man Blog !

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              58 隨筆 :: 32 文章 :: 18 評論 :: 0 Trackbacks

            Note One:about sequences and lists

            序列是不可變列表。一旦創(chuàng)建了一個序列就不能以任何方式改變它。

            例 1.21. 定義序列

            >>>
            t = ("a", "b", "mpilgrim", "z", "example")
            1
            >>> t
            ('a', 'b', 'mpilgrim', 'z', 'example')
            >>> t[0]
            2
            'a'
            >>> t[-1]?????????????????????????????????????
            3
            'example'
            >>> t[1:3]????????????????????????????????????
            4
            ('b', 'mpilgrim')

            1 序列的定義同列表的定義方式相同,除了整個元素集是用小括號包圍的而不是方括號。
            2 序列的元素象列表一樣按定義的次序進行排序。序列的索引象列表一樣從0開始,所以一個非空序列的第一個元素總是 t[0]。
            3 負數(shù)索引象列表一樣從序列尾部開始計數(shù)。
            4 分片也可以使用,就象列表一樣。注意當分割一個列表時,會得到一個新的列表;當分割一個序列時,會得到一個新的序列。

            例 1.22. 序列沒有方法?

            >>>? t
            ('a', 'b', 'mpilgrim', 'z', 'example')
            >>>? t.append("new")?
            ?
            Traceback (innermost last):
            File "<interactive input>", line 1, in ?
            AttributeError: 'tuple' object has no attribute 'append'

            >>>? t.remove("z")??
            ?????????????
            Traceback (innermost last):
            File "<interactive input>", line 1, in ?
            AttributeError: 'tuple' object has no attribute 'remove'

            >>>?t.index("example")??
            Traceback (innermost last):
            ? File "<interactive input>", line 1, in ?
            AttributeError: 'tuple' object has no attribute 'index'

            >>>"z"?in t??
            1???

            1 你不能向序列增加元素。序列沒有 appendextend 方法。
            2 你不能從序列中除掉元素。序列沒有 remove pop 方法。
            3 你不能在序列中查找元素。序列沒有 index 方法。
            4 然而,你可以使用 in 來看一看是否一個元素存在于序列中。

            那么序列有什么好處呢?

            • 序列比列表操作速度快。如果你定義了一個值集合常量,并且唯一要用它做的是不斷地遍歷它,使用序列代替列表。
            • 記得我說過 字典關(guān)鍵字 可以是整數(shù),字符串和“幾種其它的類型”嗎?序列就是那些類型之一。序列可以在字典中被用作關(guān)鍵字,但是列表不行。[2]
            • 序列用在字符串格式化,這一點我們會很快看到。

            Note Two : Mapping in the Lists

            列表映射介紹?
            ??????
            >>>??li = [1, 9, 8, 4]
            >>>??[elem*2 for elem in li]
            ????? 1
            [2, 18, 16, 8]
            >>>??li?????????????????????
            2
            [1, 9, 8, 4]

            1

            為了對這一點有一個感性認識,從右向左看它。 li 是一個將要映射的列表。Python循環(huán)遍歷 li 一次一個元素,臨時將每個元素的值賦給變量 elem。然后Python使用函數(shù) elem*2 ,接著將結(jié)果追加到返回列表中。

            2 意列表映射不改變被映射的列表。

            Note Three :好東西?lambda?函數(shù)

            Python支持一種有趣的語法,它允許你快速定義單行的最小函數(shù)。這些叫做 lambda 的函數(shù)是從Lisp中借用來的,可以被用在任何需要函數(shù)的地方。

            出于歷史的原因,lambda 函數(shù)的語法與通常的函數(shù)有些細微的不同。

            例 2.20. lambda 函數(shù)介紹
            >>> def f(x):????????? 1
            ...???? return x*2
            ...????
            >>> f(3)
            6
            >>> g = lambda x: x*2?
            2
            >>> g(3)
            6
            >>> (lambda x: x*2)(3)
            3
            6

            1

            這是一個通常的函數(shù)聲明,盡管以前你可能沒有看到過定義在交互式窗口中的函數(shù)。這個 ... 說明它是一個多行的交互語句。只要在第一行的后面敲入回車,Python IDE會讓你接著輸入命令。

            2

            這是一個 lambda 函數(shù),它完成同上面普通函數(shù)相同的事情。注意這里的簡短的語法;沒有小括號, return 是默認的,并且函數(shù)沒有名字,只有將它賦值給變量的變量名。

            3

            你甚至可以不將 lambda 函數(shù)賦值給一個變量而使用它。這不是舉世無雙的東西,它只是展示了 lambda 函數(shù)只是一個內(nèi)聯(lián)函數(shù)。

            總之, lambda 函數(shù)是一個可以接收任意多個參數(shù)(包括 可選參數(shù) )并且返回單個表達式值的函數(shù)。 lambda 函數(shù)不能包含命令,它們所包含的表達式不能超過一個。不要試圖向 lambda 函數(shù)中塞入太多的東西;如果你需要更復(fù)雜的東西,應(yīng)該定義一個普通函數(shù),然后想讓它多長就多長。

            Note
            lambda 函數(shù)是風格問題。不一定非要使用它們,任何能夠使用它們的地方,都可以定義一個分離的普通的函數(shù),用它來替換。我將它們用在需要封裝特殊的,非重用的代碼上,用許多小的一行函數(shù)不會弄亂我的代碼。

            例 2.21. 在 in apihelper.py 中的 lambda 函數(shù)?
            processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)

            順便這里有幾件事情需要注意。首先,我們使用了 and-or 技巧的簡單形式,沒問題,因為一個 lambda 函數(shù) 在一個布爾環(huán)境下 總為真。(這并不意味著 lambda 函數(shù)不能返回假值。函數(shù)本身總是為真,它的返回值可以為任何值。)

            第二,我們使用了 split 函數(shù)沒帶參數(shù)。你已經(jīng)看到過它帶 1個或2個參數(shù) 的使用,但是不帶參數(shù)它按空白進行分割。

            例 2.22. split 不帶參數(shù)????
            >>>s = "this?? is\na\ttest"???????? 1
            >>>print s
            ??
            ?this?? is
            a test

            >>>print s.split()
            ????? 2
            ['this', 'is', 'a', 'test']
            >>>print???" ".join(s.split())
            ??????? 3
            'this is a test'????

            1

            這是一個多行字符串,通過轉(zhuǎn)義字符的定義代替了 三重引號 。 \n 是一個回車; \t 是一個制表符。

            2

            split 不帶參數(shù)按空白進行分割。所以三個空格,一個回車,和一個制表符都是一樣的。

            3

            你可以將空白統(tǒng)一化,通過分割一個字符串,然后用單個空格作為分隔符將其重新接起來。這就是 help 函數(shù)所做的,將多行文檔字符串合并成單行。

            那么 help 函數(shù)到底用這些 lambda 函數(shù), split 函數(shù),和 and-or 技巧做了什么呢?

            例 2.23. 將函數(shù)賦給一個變量

            				 processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)
            		

            processFunc 現(xiàn)在是一個函數(shù),但它為哪一個函數(shù)要看 collapse 變量的值。如果 collapse 為真, processFunc(string) 將壓縮空白;否則,processFunc(string) 將返回未改變的參數(shù)。

            在一個不很建壯的語言實現(xiàn)它,象VB,你將可能創(chuàng)建一個函數(shù),它接收一個字符串和一個 collapse 參數(shù),使用一個 if 語句來判斷是否要壓縮空白或不壓縮,然后返回相應(yīng)的值。這樣效率低,因為函數(shù)將不得不處理每種可能性;每次你調(diào)用它,它將不得不在給出你所想要的東西之前,判斷是否要壓縮空白。在Python中,你可以將那種判斷邏輯拿到函數(shù)外面,而定義一個裁減過的 lambda 函數(shù)來給出確切的(并且唯一)你想要的。這樣做更有效率,更漂亮,并且更少導(dǎo)致那些令人討厭的(哦,想到那些參數(shù)就頭昏)的錯誤。

            posted on 2006-04-13 21:49 Jeff-Chen 閱讀(297) 評論(0)  編輯 收藏 引用 所屬分類: Python
            超级碰碰碰碰97久久久久| 久久夜色精品国产亚洲| 99热成人精品热久久669| 少妇人妻88久久中文字幕| 久久久无码精品亚洲日韩蜜臀浪潮| 欧美一级久久久久久久大| 久久久久国产视频电影| 日韩中文久久| 久久久国产打桩机| 久久综合国产乱子伦精品免费| 久久久久亚洲精品天堂| 婷婷综合久久狠狠色99h| 欧美久久精品一级c片片| 久久亚洲AV无码西西人体| 伊人久久大香线蕉无码麻豆| 亚洲精品无码专区久久同性男| 久久亚洲中文字幕精品一区| 超级碰碰碰碰97久久久久| 天天躁日日躁狠狠久久| 大美女久久久久久j久久| 久久夜色精品国产www| 色综合久久久久久久久五月| 91精品婷婷国产综合久久| 一级做a爰片久久毛片看看| 亚洲精品国产字幕久久不卡| 99久久无色码中文字幕人妻| 91久久婷婷国产综合精品青草| 久久99国产精品成人欧美| 午夜不卡久久精品无码免费| 久久这里只有精品首页| 国产精品一区二区久久精品涩爱| 乱亲女H秽乱长久久久| 精品视频久久久久| 97超级碰碰碰久久久久| 日韩亚洲国产综合久久久| 久久99精品久久久久久| 久久婷婷人人澡人人爽人人爱| 99久久免费国产精品热| 国产美女亚洲精品久久久综合| 国产精品18久久久久久vr| 国产成人综合久久精品红|