列表的操作
摘自书中的内容:
当你看到像
mystuff.append('hello')
这样的代码时,你事实上已经在Python
内部激发了一个连锁反应。以下是它的工作原理:
Python
看到你用到了mystuff
,于是就去找到这个变量。也许它需要倒着检查看你有没有在哪里用=
创建过这个变量,或者检查它是不是一个函数参数,或者看它是不是一个全局变量。不管哪种方式,它得先找到mystuff
这个变量才行。- 一旦它找到了
mystuff
,就轮到处理句点. (period)
这个操作符,而且开始查看mystuff
内部的一些变量了。由于mystuff
是一个列表,Python
知道mystuff
支持一些函数。- 接下来轮到了处理
append
。Python
会将"append"
和mystuff
支持的所有函数的名称一一对比,如果确实其中有一个叫append
的函数,那么Python
就会去使用这个函数。- 接下来
Python
看到了括号(
并且意识到, “噢,原来这应该是一个函数”,到了这里,它就正常会调用这个函数了,不过这里的函数还要多一个参数才行。- 这个额外的参数其实是……
mystuff
!我知道,很奇怪是不是?不过这就是Python
的工作原理,所以还是记住这一点,就当它是正常的好了。真正发生的事情其实是append(mystuff, 'hello')
,不过你看到的只是mystuff.append('hello')
。
在书中练习部分是用交互界面完成的,我为了可以写注释就在一个脚本中把代码写好。
练习部分
class Thing(object): #class 新的内容
def test(hi): #class 内部有定义的函数
print "Hello" #函数要求打印 "Hello"
a = Thing() #运行class Thing()
a.test() #运行class 内部的 test 函数
接下来需要做几个练习,将字符串和列表混在一起。
练习部分
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(' ') #Python split()通过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串
more_stuff = ["Day", "Night", "Song", "Frisbee", "Corn","Banana", "Girl", "Boy"]
while len(stuff) != 10:
next_one = more_stuff.pop() #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 sometings with stuff."
print stuff[1]
print stuff[-1]
print stuff.pop()
print ' '.join(stuff) #Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。
print '#'.join(stuff[3:5])
运行结果:
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 sometings with stuff.
Oranges
Corn
Corn
Apples Oranges Crows Telephone Light Sugar Boy Girl Banana
Telephone#Light
L##i##g##h##t
加分习题
1.类(Class
): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
字典,可爱的字典
这节接触到的是最有用的容器:字典。
需要掌握的是它们和列表的区别,对于列表,可以做这样的事:
things = ['a', 'b', 'c', 'd']
print things[1]
things[1] = 'z'
print things[1]
print things
运行结果:
>>>
b
z
['a', 'z', 'c', 'd']
字典可以将一个物件和另一个东西关联:
stuff = {'name': 'Zed', 'age': 36, 'height': 6*12+2}
print stuff['name']
print stuff['age']
print stuff['height']
stuff['city'] = "San Francisco" #给字典里添加内容
print stuff['city']
stuff = {'Zed':'name', 'age': 36, 'height': 6*12+2} #当时不太会使用字典,就换了位置试一下
print stuff['Zed']
stuff = {'name':'Zed', 'age':'36', 'height': 6 * 12 +2} #这两行我故意调换位置
print stuff
stuff = {'age':'36', 'height': 6 * 12 +2, 'name':'Zed'}
print stuff
运行结果:
>>>
Zed
36
74
San Francisco
name
{'age': '36', 'name': 'Zed', 'height': 74}
{'age': '36', 'name': 'Zed', 'height': 74}
你将看到除了通过数字以外,我们还可以用字符串来从字典中获取
stuff
,我们还可以用字符串来往字典中添加元素。从最后两句代码我发现字典是无序的。
stuff = {'name': 'Zed', 'age': 36, 'height': 6*12+2}
stuff['city'] = "San Francisco"
print stuff['city']
stuff[1] = "Wow"
stuff[2] = "Neato"
stuff[1] = "LoL"
print stuff[1]
print stuff[2]
print stuff
运行结果:
>>>
San Francisco
LoL
Neato
{'city': 'San Francisco', 2: 'Neato', 'name': 'Zed', 1: 'LoL', 'age': 36, 'height': 74}
这段代码我发现如果字典同时输入stuff[1]
,脚本接受的是最后输入的内容。注意的是stuff[1]
和stuff['1']
是不一样的。
在这里我使用了两个数字。其实我可以使用任何东西,不过这么说并不准确,不过你先这么理解就行了。当然了,一个只能放东西进去的字典是没啥意思的,所以我们还要有删除物件的方法,也就是使用
del
这个关键字:
stuff = {'name': 'Zed', 'age': 36, 'height': 6*12+2}
stuff['city'] = "San Francisco"
print "City:",stuff['city']
stuff[1] = "Wow"
stuff[2] = "Neato"
print "Stuff:",stuff
del stuff['city']
del stuff[1]
del stuff[2]
print "New stuff:",stuff
下一个练习比较重要:
cities = {'CA':'San Francisco','MI':'Detroit','FL':'Jacksonvile'}
cities['NY'] = 'New York'
cities['OR'] = 'Portland'
def find_city(themap, state):
if state in themap:
#print themap #themap 应该就是 cities 中的一个位置
return themap[state]
else:
return "Not found."
cities['_find'] = find_city
while True:
print "State? (ENTER TO QUIT)",
state = raw_input("> ")
if not state: break #在运行过程中实现的功能是按"Enter"退出
city_found = cities['_find'](cities, state)
print city_found
print state