学习python的第二十天

时间:2022-02-16 19:19:25

列表的操作

摘自书中的内容:

当你看到像 mystuff.append('hello')这样的代码时,你事实上已经在Python内部激发了一个连锁反应。以下是它的工作原理:

  1. Python看到你用到了 mystuff ,于是就去找到这个变量。也许它需要倒着检查看你有没有在哪里用 = 创建过这个变量,或者检查它是不是一个函数参数,或者看它是不是一个全局变量。不管哪种方式,它得先找到 mystuff 这个变量才行。
  2. 一旦它找到了 mystuff ,就轮到处理句点. (period)这个操作符,而且开始查看 mystuff内部的一些变量了。由于 mystuff 是一个列表,Python知道mystuff支持一些函数。
  3. 接下来轮到了处理 appendPython会将 "append"mystuff 支持的所有函数的名称一一对比,如果确实其中有一个叫 append 的函数,那么 Python 就会去使用这个函数。
  4. 接下来 Python看到了括号 ( 并且意识到, “噢,原来这应该是一个函数”,到了这里,它就正常会调用这个函数了,不过这里的函数还要多一个参数才行。
  5. 这个额外的参数其实是…… 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

加分习题

1.字典相关内容