python参考手册--第4、5、6、7章

1.zip

zip(s,t):将序列组合为一个元组序列[(s[0],t[0]), (s[1],t[1]), (s[2],t[2]), (s[3],t[3]),...]

>>> s = [1,2,3,4,5,6]
>>> t = ['a','b','c','d','e','e']
>>> zip(s,t)
[(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'), (5, 'e'), (6, 'e')]

2.assert,__debug__()

assert 、__debug__()用于调试

3.作用域

解析名称时首先检查局部作用域,然后由内向外检查外部嵌套函数定义的作用域,找不到再搜索全局名称和内置命名空间。

python3中可以使用nonlocal var,将var绑定到外部嵌套函数中定义的变量。建议还是通过参数传进来吧。以兼容python2.

可以通过闭包嵌套实现延迟求值或惰性求值:

>>> from urllib import urlopen
>>> def page(url):
    def get():
    return urlopen(url).open()
    return get

>>> baidu = page('www.baidu.com')
>>> baiduData = baidu()

4.装饰器

用于增强类或者方法:

@foo

@bar

def func(x):

  pass

等价于

def func(x):

  pass

func = foo(bar(func))

装饰器可以带参数:

@bar(x)

5.列表推导及生成器表达式

(1)列表推导

>>> a = [1,3,4,5,6,7,8]
>>> b = [2*s for s in a]
>>> b
[2, 6, 8, 10, 12, 14, 16]

(2)生成器表达式

>>> a = [1,3,4,5,6,7,8]
>>> b = (10*s for s in a)
>>> b
<generator object <genexpr> at 0x02DAC170>
>>> b.next()
10
>>> b.next()
30

列表推导与生成器表达式区别:前者创建了包含结果数据的列表,后者只知道如何安装需要生成数据的生成器,内存分配有需要再分配。类似于range(n)与xrange(n)的区别。

6.lambda表达式

lambda语句用于创建表达式形式的匿名函数。

>>> a = lambda x,y: x+y
>>> r = a(4,6)
>>> r
10

7.compile、exec、eval

compile将字符串编译成代码对象(语句)或者表达式,exec执行代码对象(语句),eval执行表达式

>>> s = "for i in range(0,10): print(i)"
>>> c = compile(s,'','exec')
>>> exec(c)
0
1
2
3
4
5
6
7
8
9

>>> x = 10
>>> y = 100
>>> t = '3*x + 4*y'
>>> b = compile(t,'','eval')
>>> result = eval(b)
>>> result
430

8.类中self

类会定义命名空间,但是不会为在方法体内使用的名称限定范围,所以在实现类时,对属性和方法引用必须用self限定。

9.类的多继承

class Derived(Base1,Base2,Base3)

这点与java不一样,java中不能多继承,只能通过接口实现。

10.动态绑定和鸭子类型

动态绑定:类属性查找顺序,实例本身内部-》实例的类定义-》基类的类定义。

这种查找模式是:鸭子类型(duck typing):如果看起来像、叫声像而且走起路来像鸭子,那么他就是鸭子。

这点与java不一样,java中不能多继承,只能通过接口实现。

11.staticmethod、property

@staticmethod:静态方法(装饰器)。

@property:特性(装饰器),实现以属性的方式访问该装饰器修饰的方法。实质是通过get、set、delete方法来进行访问。

12.抽象基类

python中创建抽象基类,需要使用abc模块,该模块定义了一个元类:ABCMeta和一组装饰器(@abstractmethod和@abstractproperty)

>>> from abc import ABCMeta, abstractmethod, abstractproperty
>>> class Foo:
    __metaclass__ = ABCMeta
    @abstractmethod
    def spam(self,a,b):
      pass
    @abstractproperty
    def name(self):
      pass

抽象基类不能实例化。

13.元类

显示的指定其元类:__metaclass__ = ABCMeta

如果不显示的指定,则默认元类为:types.ClassType

14.类装饰器

类装饰器是一个函数,他以类作为输入,类作为输出

 

1. 开胃菜 2. 使用 Python 解释器 2.1. 调用 Python 解释器 2.1.1. 参数传递 2.1.2. 交互模式 2.2. 解释器及其环境 2.2.1. 错误处理 2.2.2. 执行 Python 脚本 2.2.3. 源程序编码 2.2.4. 交互执行文件 2.2.5. 本地化模块 3. Python 简介 3.1. 将 Python 当做计算器 3.1.1. 数字 3.1.2. 字符串 3.1.3. 关于 Unicode 3.1.4. 列表 3.2. 编程的第一步 4. 深入 Python 流程控制 4.1. if 语句 4.2. for 语句 4.3. The range() 函数 4.4. break 和 continue 语句, 以及循环的 else 子句 4.5. pass 语句 4.6. 定义函数 4.7. 深入 Python 函数定义 4.7.1. 默认参数值 4.7.2. 关键字参数 4.7.3. 可变参数列表 4.7.4. 参数列表的分拆 4.7.5. Lambda 形式 4.7.6. 文档字符串 4.8. 插曲:编码风格 5. 数据结构 5.1. 关于列表更多的内容 5.1.1. 把链表当作堆栈使用 5.1.2. 把链表当作队列使用 5.1.3. 列表推导式 5.1.4. 嵌套的列表推导式 5.2. del 语句 5.3. 元组和序列 5.4. 集合 5.5. 字典 5.6. 循环技巧 5.7. 深入条件控制 5.8. 比较序列和其它类型 6. 模块 6.1. 深入模块 6.1.1. 作为脚本来执行模块 6.1.2. 模块的搜索路径 6.1.3. “编译的” Python 文件 6.2. 标准模块 6.3. dir() 函数 6.4. 包 6.4.1. 从 * 导入包 6.4.2. 包内引用 6.4.3. 多重目录的包 7. 输入和输出 7.1. 格式化输出 7.1.1. 旧式的字符串格式化 7.2. 文件读写 7.2.1. 文件对象方法 7.2.2. pickle 模块 8. 错误和异常 8.1. 语法错误 8.2. 异常 8.3. 异常处理 8.4. 抛出异常 8.5. 用户自定义异常 8.6. 定义清理行为 8.7. 预定义清理行为 9. 类 9.1. 术语相关 9.2. Python 作用域和命名空间 9.2.1. 作用域和命名空间示例 9.3. 初识类 9.3.1. 类定义语法 9.3.2. 类对象 9.3.3. 实例对象 9.3.4. 方法对象 9.4. 一些说明 9.5. 继承 9.5.1. 多继承 9.6. 私有变量 9.7. 补充 9.8. 异常也是类 9.9. 迭代器 9.10. 生成器 9.11. 生成器表达式 10. Python 标准库概览 10.1. 操作系统接口 10.2. 文件通配符 10.3. 命令行参数 10.4. 错误输出重定向和程序终止 10.5. 字符串正则匹配 10.6. 数学 10.7. 互联网访问 10.8. 日期和时间 10.9. 数据压缩 10.10. 性能度量 10.11. 质量控制 10.12. “瑞士军刀” 11. 标准库浏览 – Part II 11.1. 输出格式 11.2. 模板 11.3. 使用二进制数据记录布局 11.4. 多线程 11.5. 日志 11.6. 弱引用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值