读书笔记--《Python基础教程第二版》--第六章 抽象

6.1 懒惰即美德

>>> fibs=[0,1]

>>> for i in range(8):

...  fibs.append(fibs[-2]+fibs[-1])

...

>>> fibs

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

6.2 抽象和结构

page=download_page()

freqs=compute_frequencies(page)

for word,freq in freqs:

print word,freq

6.3 创建函数

>>> import math

>>> x=1

>>> y=math.sqrt

>>> callable(x)

False

>>> callable(y)

True

>>> def hello(name):

...   return ‘hello,‘+name +‘!‘

...

>>> print hello(‘world‘)

hello,world!

>>> print hello(‘Gumby‘)

hello,Gumby!

>>> def fibs(num):

...   result=[0,1]

...   for i in range(num-2):

...     result.append(result[-2]+result[-1])

...   return result

...

>>> fibs(10)

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

>>> fibs(15)

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]

6.3.1 记录函数

>>> def square(x):

...   ‘Calcutes the square of the number x.‘

...   return x*x

...

>>> square.__doc__

‘Calcutes the square of the number x.‘

>>> help(square)

Help on function square in module __main__:

square(x)

Calcutes the square of the number x.

6.3.2 并非真正的函数的函数

>>> def test():

...   print ‘This is printed‘

...   return

...   print ‘This is not‘

...

>>> x  = test()

This is printed

>>> print x

None

6.4 参数魔法

6.4.1 值从哪里来?

6.4.2 我能改变参数吗?

>>> def try_to_change(n):

...   n=‘Mr. Gumby‘

...

>>> name=‘Mrs. Entity‘

>>> try_to_change(name)  #n=name,改变n,name不变

>>> name

‘Mrs. Entity‘

字符串(以及数字和元组)是不可改变的

>>>

>>> def change(n):

...   n[0]=‘Mr.Gumby‘

...

>>> names=[‘Mrs. Entiry‘,‘Mrs. Thing‘]

>>> change(names)  #n=name,改变n,names变

>>> names

[‘Mr.Gumby‘, ‘Mrs. Thing‘]

解决方法:

>>> names=[‘Mrs. Entiry‘,‘Mrs. Thing‘]

>>> change(names[:])

>>> names

[‘Mrs. Entiry‘, ‘Mrs. Thing‘]

>>> change(names)

>>> names

[‘Mr.Gumby‘, ‘Mrs. Thing‘]

>>> names=[‘Mrs. Entiry‘,‘Mrs. Thing‘]

>>> n=names[:]

>>> n is names

False

>>> n == names

True

1、为什么我要修改参数

>>> storage={}

>>> storage[‘first‘]={}

>>> storage[‘middle‘]={}

>>> storage[‘last‘]={}

>>> me=‘Magnus Lie hetland‘

>>> storage[‘first‘][‘Magus‘]=[me]

>>> storage[‘middle‘][‘Lie‘]=[me]

>>> storage[‘last‘][‘hetland‘]=[me]

>>> storage

{‘middle‘: {‘Lie‘: [‘Magnus Lie hetland‘]}, ‘last‘: {‘hetland‘: [‘Magnus Lie hetland‘]}, ‘first‘: {‘Magus‘: [‘Magnus Lie hetland‘]}}

>>> my_sister=‘Anne Lie hetland‘

>>> storage[‘first‘].setdefault(‘Anne‘,[]).append(my_sister)

>>> storage[‘middle‘].setdefault(‘Lie‘,[]).append(my_sister)

>>> storage[‘last‘].setdefault(‘hetland‘,[]).append(my_sister)

>>> storage

{‘middle‘: {‘Lie‘: [‘Magnus Lie hetland‘, ‘Anne Lie hetland‘]}, ‘last‘: {‘hetland‘: [‘Magnus Lie hetland‘, ‘Anne Lie hetland‘]}, ‘first‘: {‘Magus‘: [‘Magnus Lie hetland‘], ‘Anne‘: [‘Anne Lie hetland‘]}}

>>> storage[‘middle‘][‘Lie‘]

[‘Magnus Lie hetland‘, ‘Anne Lie hetland‘]

>>> storage[‘first‘][‘Anne‘]

[‘Anne Lie hetland‘]

__author__ = ‘Administrator‘

def init(data):

data[‘first‘]={}

data[‘middle‘]={}

data[‘last‘]={}

def lookup(data,label,name):

return data[label].get(name)

def store(data,full_name):

names=full_name.split()

if 2 == len(names):names.insert(1,‘‘)

labels=‘first‘,‘middle‘,‘last‘

for label,name in zip(labels,names):

people=lookup(data,label,name)

if people:

people.append(full_name)

else:

data[label][name]=[full_name]

if __name__ == ‘__main__‘:

mynames={}

init(mynames)

store(mynames,‘Magnus Lie Hetland‘)

lookup(mynames,‘middle‘,‘Lie‘)

store(mynames,‘Robin Hood‘)

store(mynames,‘Robin Locksley‘)

store(mynames,‘Mr.Gumby‘)

lookup(mynames,‘first‘,‘Robin‘)  #[‘Robin Hood‘, ‘Robin Locksley‘]

2、如果我的参数不可变呢

改变参数,必须用返回值或者列表、字典

>>> def inc(x):return x +1

...

>>> foo=10

>>> foo=inc(foo)

>>> foo

11

>>> def inc(x):x[0]=x[0]+1

...

>>> foo=[10]

>>> inc(foo)

>>> foo

时间: 2024-10-10 21:02:29

读书笔记--《Python基础教程第二版》--第六章 抽象的相关文章

python基础教程第二版读书笔记

第一张 基础知识 模块 import 模块:用函数的时候格式 模块.函数 from 模块 import 函数:用函数的时候格式  函数 字符串 ‘x‘反引号(不是单引号‘’,也可用repr函数),可以将数值x变为字符串,例如x=1,print ”hello“+x(错误),print ”hello“+‘x‘(对的) r-原始字符串,即\将不作为转义符号,例如r”c:\n“ 第二章 列表和元祖(列表可以修改,元祖不能修改) 列表 x=['a',1] y=['b',2] c=[x,y] 索引 0-第一

读书笔记--《Python基础教程第二版》--第2章列表和元组

第二章 列表和元组 2.1 序列的概览 序列:每个元素被分配一个序号  6种:列表.元组.字符串.Unicode字符串.buffer对象.xrange对象         序列可以嵌套序列          python容器的概念:序列.字典.集合 2.2 通用序列的操作 索引.分片.加.乘.属于.长度,最大值.最小值.迭代 2.2.1 索引 >>> greeting='Hello' >>> greeting[0] 'H' >>> greeting[-

读书笔记--《Python基础教程第二版》--第七章 更加抽象

7.1 对象的魔力 多态 不同的类的对象使用同样的操作 封装 继承 7.1.1 多态 1.多态和方法 >>>object.getPrice() >>> 'abc'.count('a') 1 >>> [1,2,'a'].count('a') 1 >>> from random import choice >>> x=choice(['Hello world!',[1,2,'e','e',4]]) >>>

读书笔记--《Python基础教程第二版》-- 第四章 字典:当索引不好用时

字典里的键可以是数字.字符串.元组 4.1 字典的使用 >>> name=['Alice','Beth','Earl'] >>> numbers=['2341','9102','0142'] #电话号码必须使用字符串,二不能是整数,因为电话号码可能以0开头 >>> numbers[name.index('Beth')] '9102' 4.2 创建和使用字典 >>> data ={'title':'My Home Page','text

读书笔记--《Python基础教程第二版》-- 第五章 条件、循环和其他语句

5.1 print和import的更多信息 5.1.1 使用独号输出 >>> print 'Age:',42 Age: 42 >>> 1,2,3 (1, 2, 3) >>> print 1,2,3 1 2 3 >>> print (1,2,3) (1, 2, 3) >>> name='Gumby' >>> greeting='Hello' >>> salutation='Mr.'

读书笔记--Python基础教程 001

name = raw_input('please enter your name: ') or '<unknown>' 换句话说,如果raw_input语句的返回值为真(不是空字符串),那么他的值就会赋给name,否则将默认的'<unknown>'赋值给name. 这类短路逻辑可以用来实现C和Java中所谓的'三元运算符'(或条件运算符). a if b else c 如果b为真,返回a,否则,返回c.(注意,这个运算符不用引入临时变量,就可以直接使用,从而得到与raw_input

Python核心编程第二版 第六章课后练习

6-4.算术.把测试得分放到一个列表中去,你的代码应该可以计算一个平均分. num = input("请输入成绩,成绩以空格分开") totalnum = 0 numbers = num.split(' ') numbers = list(map(int, numbers)) for num in numbers: totalnum += num print(totalnum//len(numbers)) 6-6.字符串.创建一个string.strip()的替代函数:接受一个字符串,

Python基础教程(第十四章 网络编程)

本文内容全部出自<Python基础教程>第二版,在此分享自己的学习之路. ______欢迎转载:http://www.cnblogs.com/Marlowes/p/5538341.html______ Created on Marlowes 本章将会给读者展示一些例子,这些例子会使用多种Python的方法编写一个将网络(比如因特网)作为重要组成部分的程序.Python是一个很强大的网络编程工具,这么说有很多原因,首先,Python内有很多针对常见网络协议的库,在库顶部可以获得抽象层,这样就可以

Jquery基础教程第二版学习记录

本文仅为个人jquery基础的学习,简单的记录以备忘. 在线手册:http://www.php100.com/manual/jquery/第一章:jquery入门基础jquery知识:jquery能做什么:为什么需要jquery. 第二章:选择符工厂函数$()css选择符属性选择符自定义选择符DOM遍历方法 第三章:事件jQuery.noConflict([extreme]):运行这个函数将变量$的控制权让渡给第一个实现它的那个库.常用方法:(包括键盘,鼠标事件)blur([[data],fn]