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.类装饰器

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

python参考手册--第4、5、6、7章的更多相关文章

  1. 《python参考手册(第四版)》【PDF】下载

    <python参考手册(第四版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382222 内容介绍 本书是权威的Python语 ...

  2. python参考手册--第1章python简介

    1.if __name__ == '__main__': 直接运行myModel.py时,当前模块的名字是main:import myModel然后运行的时候当前模块的名字是myModel. 2.ev ...

  3. python参考手册--第9章

    1.读取命令行选项 (1)sys.args python启动时,命令行选项设置在列表sys.args中. sys.args[0]:xxx.py sys.args[1:]: 其他参数 (2)optpar ...

  4. python参考手册--第8章

    1.模块和import (1)首次import module会做以下3件事: a)创建新的命名空间,用作在该源文件中定义的所有对象的容器.在模块中定义的函数和方法在使用global语句时将访问该命名空 ...

  5. python参考手册--第2章词汇和语法约定

    1.续行符\ 三引号.().{}.[]中的内容不需要续行符 2.空格缩进 优选空格作为缩进,不要用tab,这是因为不同操作系统下tab对应的空格不一样,而python是通过严格的空格来控制语句块的. ...

  6. python参考手册 Read

    P28 复制 a = [1,2,3,[1,2]] b = a b is a # True c = list[a] # shallow copy c is a # False c[3][0] = 100 ...

  7. python参考手册--第10、11章执行环境、调试

    1.解释器选项和环境 python [options] [-c cmd | filename | - ] [args] 例如:python -m pdb test.py 以脚本的形式运行库模块pdb ...

  8. python参考手册一书笔记之第一篇上

    在python2和python3的版本差异很大输出hello world的方法在2里支持在3里就不支持了. print 'hello world' #在2中支持 print ('hello world ...

  9. python参考手册--第3章类型和对象

    1.对象的身份.类型.值 (1)身份:对象在内存中位置的指针,地址值, >>> a = [1,2,3,4,5] >>> id(a)48497328 >> ...

随机推荐

  1. 初话C++模板【用自己的话,解释清楚这些】

    用自己的话解释清楚C++的模板编程 模板编程是为了解决什么问题而出现的? 提高代码的重用性,提高代码的利用率. 泛型编程的一种实现. 模板的精神是: 类型参数化. 模板的实现 模板分为:函数模板.类模 ...

  2. TTTAttributedLabel 如何将多个字符串高亮显示

    TTTAttributedLabel进行多个字符串的高亮显示. 需要对每个字符串进行匹配,从而得到所有需要高亮的NSRange,然后利用NSMutableAttributedString对每个NSRa ...

  3. JavaScript学习笔记(11)——HTML DOM Event对象

    w3cshool:时间参考手册:http://www.w3school.com.cn/jsref/dom_obj_event.asp

  4. oracle表分区心得

    由于系统是对前批次系统进行改造,需要对表建立分区 1.已建立未分区的表,无法进行任何表分区的操作,如:增加.删除.合并.拆分均无法操作 2.已分区的表至少保留1个分区,即不能全删 3.若有defaul ...

  5. CAF(C++ actor framework)(序列化之复杂类,分析 还有自己不懂的细思恐极函数实现)(三)

    这里应该是序列化的最后一篇.感觉自己写的不是很好,也一点点在学习.这次就不贴上代码了.代码在github上的announce5.cpp.代码简单,但是分析下去会有细思恐极的感觉! 先看一下几个函数是干 ...

  6. JAVA MemCache 史无前例的详细讲解【转】

    非原创转自:http://nhy520.iteye.com/blog/1775893 这篇文章是我看到的介绍的比较详细的,入门级别算是足足够了 Memcach什么是Memcache Memcache集 ...

  7. MongoDB在windows下安装配置

    MongoDB的官网是:http://www.mongodb.org/ MongoDB最新版本下载在官网的DownLoad菜单下:http://www.mongodb.org/downloads 本人 ...

  8. PHP的$_SERVER['HTTP_HOST']获取服务器地址功能详解,$_SERVER['HTTP_X_FORWARDED_HOST']

    uchome的index文件中的二级域名功能判断,使用了php的$_SERVER['HTTP_HOST'],开始对这个不是很了解,所以百度了一下,发现一篇帖子有点意思,转发过来做个记录. 在php中, ...

  9. Spark Streaming揭秘 Day9 从Receiver的设计到Spark框架的扩展

    Spark Streaming揭秘 Day9 从Receiver的设计到Spark框架的扩展 Receiver是SparkStreaming的输入数据来源,从对Receiver整个生命周期的设计,我们 ...

  10. mongodb命令使用

    最近学习mongodb的使用,整理了一些常用命令 windows服务安装:mongod --install --serviceName MongoDB --serviceDisplayName Mon ...