最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

習(xí)題 39: 列表的操作?

你已經(jīng)學(xué)過了列表。在你學(xué)習(xí)“while 循環(huán)”的時候,你對列表進(jìn)行過“追加(append)”操作,而且將列表的內(nèi)容打印了出來。另外你應(yīng)該還在加分習(xí)題里研究過 Python 文檔,看了列表支持的其他操作。這已經(jīng)是一段時間以前了,所以如果你不記得了的話,就回到本書的前面再復(fù)習(xí)一遍把。

找到了嗎?還記得嗎?很好。那時候你對一個列表執(zhí)行了 append 函數(shù)。不過,你也許還沒有真正明白發(fā)生的事情,所以我們再來看看我們可以對列表進(jìn)行什么樣的操作。

當(dāng)你看到像 mystuff.append('hello') 這樣的代碼時,你事實上已經(jīng)在 Python 內(nèi)部激發(fā)了一個連鎖反應(yīng)。以下是它的工作原理:

  1. Python 看到你用到了 mystuff ,于是就去找到這個變量。也許它需要倒著檢查看你有沒有在哪里用 = 創(chuàng)建過這個變量,或者檢查它是不是一個函數(shù)參數(shù),或者看它是不是一個全局變量。不管哪種方式,它得先找到 mystuff 這個變量才行。
  2. 一旦它找到了 mystuff ,就輪到處理句點 . (period) 這個操作符,而且開始查看 mystuff 內(nèi)部的一些變量了。由于 mystuff 是一個列表,Python 知道mystuff 支持一些函數(shù)。
  3. 接下來輪到了處理 append 。Python 會將 “append” 和 mystuff 支持的所有函數(shù)的名稱一一對比,如果確實其中有一個叫 append 的函數(shù),那么 Python 就會去使用這個函數(shù)。
  4. 接下來 Python 看到了括號 ( (parenthesis) 并且意識到, “噢,原來這應(yīng)該是一個函數(shù)”,到了這里,它就正常會調(diào)用這個函數(shù)了,不過這里的函數(shù)還要多一個參數(shù)才行。
  5. 這個額外的參數(shù)其實是…… mystuff! 我知道,很奇怪是不是?不過這就是 Python 的工作原理,所以還是記住這一點,就當(dāng)它是正常的好了。真正發(fā)生的事情其實是 append(mystuff, 'hello') ,不過你看到的只是 mystuff.append('hello') 。

大部分時候你不需要知道這些細(xì)節(jié),不過如果你看到一個像這樣的 Python 錯誤信息的時候,上面的細(xì)節(jié)就對你有用了:

$ python
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> class Thing(object):
...     def test(hi):
...             print "hi"
...
>>> a = Thing()
>>> a.test("hello")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: test() takes exactly 1 argument (2 given)
>>>

就是這個嗎?嗯,這個是我在 Python 命令行下展示給你的一點魔法。你還沒有見過class 不過后面很快就要碰到了。現(xiàn)在你看到 Python 說 test() takes exactly 1 argument (2 given) (test() 只可以接受1個參數(shù),實際上給了兩個)。它意味著 python 把 a.test("hello") 改成了 test(a, "hello") ,而有人弄錯了,沒有為它添加 a 這個參數(shù)。

一下子要消化這么多可能有點難度,不過我們將做幾個練習(xí),讓你頭腦中有一個深刻的印象。下面的練習(xí)將字符串和列表混在一起,看看你能不能在里邊找出點樂子來:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
ten_things = "Apples Oranges Crows Telephone Light Sugar"

print "Wait there's not 10 things in that list, let's fix that."

stuff = ten_things.split(' ')
more_stuff = ["Day", "Night", "Song", "Frisbee", "Corn", "Banana", "Girl", "Boy"]

while len(stuff) != 10:
    next_one = more_stuff.pop()
    print "Adding: ", next_one
    stuff.append(next_one)
    print "There's %d items now." % len(stuff)

print "There we go: ", stuff

print "Let's do some things with stuff."

print stuff[1]
print stuff[-1] # whoa! fancy
print stuff.pop()
print ' '.join(stuff) # what? cool!
print '#'.join(stuff[3:5]) # super stellar!

你應(yīng)該看到的結(jié)果?

$ python ex39.py

Wait there's not 10 things in that list, let's fix that.
Adding:  Boy
There's 7 items now.
Adding:  Girl
There's 8 items now.
Adding:  Banana
There's 9 items now.
Adding:  Corn
There's 10 items now.
There we go:  ['Apples', 'Oranges', 'Crows', 'Telephone', 'Light', 'Sugar',
      'Boy', 'Girl', 'Banana', 'Corn']
Let's do some things with stuff.
Oranges
Corn
Corn
Apples Oranges Crows Telephone Light Sugar Boy Girl Banana
Telephone#Light

加分習(xí)題?

  1. 將每一個被調(diào)用的函數(shù)以上述的方式翻譯成 Python 實際執(zhí)行的動作。例如: ' '.join(things) 其實是 join(' ', things) 。
  2. 將這兩種方式翻譯為自然語言。例如, ' '.join(things) 可以翻譯成“用 ‘ ‘ 連接(join) things”,而 join(' ', things) 的意思是“為 ‘ ‘ 和 things 調(diào)用 join 函數(shù)”。這其實是同一件事情。
  3. 上網(wǎng)閱讀一些關(guān)于“面向?qū)ο缶幊?Object Oriented Programming)”的資料。暈了吧?嗯,我以前也是。別擔(dān)心。你將從這本書學(xué)到足夠用的關(guān)于面向?qū)ο缶幊痰幕A(chǔ)知識,而以后你還可以慢慢學(xué)到更多。
  4. 查一下 Python中的 “class” 是什么東西。不要閱讀關(guān)于其他語言的 “class” 的用法,這會讓你更糊涂。
  5. dir(something)something 的 class 有什么關(guān)系?
  6. 如果你不知道我講的是些什么東西,別擔(dān)心。程序員為了顯得自己聰明,于是就發(fā)明了 Opject Oriented Programming,簡稱為 OOP,然后他們就開始濫用這個東西了。如果你覺得這東西太難,你可以開始學(xué)一下 “函數(shù)編程(functional programming)”。

Project Versions

Table Of Contents

Previous topic

習(xí)題 38: 閱讀代碼

Next topic

習(xí)題 40: 字典, 可愛的字典

This Page

中阳县| 德令哈市| 瑞金市| 七台河市| 东莞市| 界首市| 克拉玛依市| 安泽县| 共和县| 平度市| 桦南县| 蓬安县| 赤城县| 襄垣县| 武平县| 英德市| 商水县| 龙门县| 舟曲县| 阿拉善右旗| 陵水| 卓资县| 赣榆县| 漠河县| 遂溪县| 榆中县| 淮阳县| 竹溪县| 曲阳县| 名山县| 宜州市| 当涂县| 永平县| 南昌县| 右玉县| 元江| 商城县| 新巴尔虎右旗| 汝城县| 通州区| 普兰店市|