`
halfcool
  • 浏览: 44886 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

Dive Into Python cn notes

阅读更多

Dive Into Python cn notes

===========================

2010,01,18

 

Dive Into Python 版本:啄木鸟社区翻译的 5.4b 版本

 

1. tuple 没有方法。不能改变,适合做常量。提供给仅遍历使用的时候效率比 list 高。

2. list 的 extend 方法比 + 方法效率高。

3. callable 判断一个对象是否可调用,可调用对象包括函数、类方法,甚至类自身。

4. getattr 作为一个分发者::

    import statsout
    def output(data, format="text"):
        output_function = getattr(statsout, "output_%s" % format, \
                statsout.output_text)    # 最后一个参数是缺省值
        return output_function(data)

5. 可以使用映射表达式过滤列表重复元素::

    li = ["a", "xx", "yy", "b", "a", "c", "zz", "yy"]
    new_li = [elem for elem in li if li.count(elem) == 1]

6. and-or 技巧失效场合的补救::

    a = ""
    b = "second"
    (1 and [a] or [b])[0]

    注:[""] 列表有一个元素,所以它能保证 [a] 为真。虽然这个技巧可以使用 if 语句来替代,但是在某些情况下 if 是不允许使用的,比如在 lambda 函数中。

7. 不带参数的 split 按照空白进行分割。在这里,空格、回车和制表符等都将被当成空白处理。然后再用空格的 join 方法将其连接,就可以得到统一的空格。例如::

    s = "This  is\na\ttest!"
    new_s = " ".join(s.split())

8. 可以使用 == None 或者 is None 进行比较,但是 is None 更快。

9. 字符串的 ljust 方法用空格填充字符串以符合指定的长度。如果指定的长度小于字符串的长度,ljust 将简单地返回未变化的字符串。

10. update 方法是一个字典复制器:它把一个字典中的键和值全部拷贝到另一个字典。这个操作并不事先清空目标字典,如果一些键在目标字典中已经存在,则它们将被覆盖,那些键名在目标字典中不存在的则不改变。应该把 update 看作是合并函数,而不是复制函数。

11. __init__ 在类的实例创建后被立即调用。
每个类方法的第一个参数,包括 __init__ ,都是指向类的当前实例的引用。按照习惯这个参数总是被称为 self 。在 __init__ 方法中,self 指向新创建的对象;在其他方法中,它指向方法被调用的类实例。

12. 专用类方法
__getitem__ :只要定义了该方法,任何类都可以像字典一样保存键值。
__setitem__ :只要定义了该方法,任何类都可以表现得像序列。
__delitem__ :在调用 del instance[key] 时调用。
__repr__ :当调用 repr(instance) 时被调用。
__cmp__ :当使用 == 来比较类的时候被教用。
__len__ :在调用 len(instance) 时被调用。
__call__ :定义了这个方法的类将让这个类表现得像一个函数,允许你直接调用一个类实例。

13. 类属性
类属性紧跟在类定义之后定义,数据属性定义在 __init__ 方法中。
类属性可以作为类级别的常量来使用,但是它们不是真正的常量。Python 中没有常量。
类属性既可以通过直接对类的引用,也可以通过对类的任意实例的引用来使用。
可以通过各种方式改变类属性。

    class Counter:
        count = 0
        def __init__(self):
            self.__class__.count += 1
    print Counter.count    # -> 0
    cl = Counter()
    print c1.count    # -> 1
    print Counter.count    # -> 1
    c2 = Counter()
    print c2.count    # -> 2
    print Counter.count    # -> 2

14. 使用字典的 items 方法得到该字典键值对的元组所组成的序列,是处理字典数据元素的一个比较好的办法。

    for (k, v) in dict.items()

比如使用 join 来打印 list ::

    import os
    print "\n".join(["%s=%s" % (k, v)
            for k, v in os.environ.items()])

15. os.path 中的 expanduser 方法将对使用 ~ 来表示当前用户根目录的路进进行扩展。在任何平台上,只要用户拥有一个根目录,它就会有效,像 Windows、Unix 和 Mac OS X,但在 Mac OS 上无效。

    home_dir = os.path.expanduser("~")

16. os.path 中的 normcase 方法将根据操作系统的缺省值对大小写进行标准化处理。normcase 是一个有用的函数,用于对大小写不敏感操作系统的一个补充,这种操作系统认为 mahadeva.mp3 和 和 mahadeva.MP3 是同一个文件。例如,在 Windows 和 Mac OS 下,normcase 将把整个文件名转换为小写字母串;而在 Unix 兼容的系统下,它将返回未作修改的文件名。

17. 使用 glob 列出目录 ::

    >>> import glob
    >>> glob.glob("C:\\music\\*\\*.mp3")
    ['C:\\music\\a\\a1.mp3',
    'C:\\music\\a\\a2.mp3',
    'C:\\music\\b\\b1.mp3',
    'C:\\music\\b\\b2.mp3']

18. 原始字符串:为了避免反斜线灾难,你可以利用所谓的“原始字符串”,只要为字符串添加一个前缀 r 就可以了。这将告诉 Python ,字符串中的所有字符都不转义。推荐处理正则表达式的时候使用原始字符串;否则事情会很快变得混乱。

19. 如果一个问题可以使用字符串处理也可以使用序列处理,那么最好选择序列,因为 Python 在处理序列方面效率更高一些。

20. locals 和 globals 内置函数:

1) 都是字典;
2) 局部名字空间可以通过内置的 locals 函数来访问,全局(模块级别)名字空间可以通过内置的 globals 函数来访问;
3) 局部(函数)名字空间产生了变化则 locals 函数 和 globals 函数返回都产生相应的变化,而 globals 更令人兴奋,模块的名字空间不仅仅包括了模块级的变量和常量,还包括了所有在模块中定义的函数和类,并且还包括了任何被导入到模块中的东西,当然 局部(函数)名字空间也包含了任何被导入到函数中的东西;
4) locals 函数返回的是局部名字空间的一个拷贝,所以对它进行改变对局部名字空间中的变量值并无影响,但 globals 函数返回实际的全局名字空间,而不是一个拷贝,故与 locals 函数的行为完全相反,对 globals 所返回的任何改动都将直接影响到全局变量;
5) 在调用 locals 函数时有一点性能上的问题,这是由于 locals 创建了局部名字空间的一个拷贝引起的。

21. Python 处理 list 比字符串快的原因是:
list 是可变的,但字符串是不可变的。这就是说向 list 进行追加只是增加元素和修改索引。因为字符串在创建之后不能被修改,像 s = s + newpiece 这样的代码将会从原值和新片断的连接结果中创建一个全新的字符串,然后丢弃原来的字符串。这样就需要大量昂贵的内存管理,并且随着字符串变长,所需要的开销也在增长。所以在一个循环中执行 s = s + newpiece 非常不好。用技术术语来说,向一个 list 追加 n 个项的代价为 O(n) ,而向一个字符串追加 n 个项的代价是 O(n^2) 。

22. 编译正则表达式
在需要多次使用同一个正则表达式的情况下,应该将它进行编译以获得一个 pattern 对象,然后直接调用这个 pattern 对象的方法。

23. 动态导入模块
使用 __import__ 内置函数可以动态地导入模块。如 sys = __import__("sys")

24. 生成器
第一次调用生成器对象的 next() 方法,将执行生成器对象中第一个 yield 语句之前的所有代码,然后返回生产(yield)出来的值。接下来不断调用生成器对象的 next() 方法,将从上次离开的位置重新开始并继续下去直到又一次遇到 yield 语句。

25. 内置计时器
timeit 模块定义了接收两个参数的 Timer 类。两个参数都是字符串。第一个参数是你要即使的语句,第二个参数是为第一个参数语句构建环境的导入语句。从内部讲, timeit 构建起一个独立的虚拟环境,手工地执行建立语句,然后手工地编译和执行被计时。
只要有了 Timer 对象,最简单的事就是调用 timeit() ,它调用你的函数一百万次并返回所耗费的秒数。
Timer 对象的另一个主要方法是 repeat() ,它接收两个可选参数。第一个参数是重复整个测试的次数,第二个参数是每个测试中调用被计时语句的次数。两个参数都是可选的,它们的默认值分别是 3 和 1000000 。repeat() 方法返回以秒记录的每个测试循环的耗时序列。
repeat() 返回的时间序列,由于后台进程或者其他 Python 解释器以外的因素的影响,将使得计时器得到的耗时延长,最好的处理是取最小值而丢弃其他结果。
timeit 模块只有在你知道哪段代码需要优化时使用。如果你有一个很大的 Python 程序并且不知道你的性能问题所在,查看 hotshot 模块。

26. min 和 max 内置函数

27. isalpha 内置函数,检查一个字符串中是否只包含字母。

==

同时发布在:

http://hi.baidu.com/whycrying/blog/item/b62f9e50b5d2546985352457.html

http://www.zeuux.com/blog/content/2342/

 

分享到:
评论

相关推荐

    dive into python3 (中文版)

    Python是一种广泛使用的高级编程语言,以其简洁明了的语法和强大的功能而闻名。《深入Python3(中文版)》是一本系统介绍Python 3的书籍,旨在帮助读者深入学习Python 3的基本知识与应用。本文将根据给定文件的信息...

    《Dive Into Python 3中文版》PDF

    《Dive Into Python 3中文版》是一本深入学习Python 3编程语言的教程,适合初学者和有一定编程基础的开发者。这本书详细介绍了Python 3的各种特性,包括语法、数据结构、函数、类、模块、异常处理、输入/输出、网络...

    Dive into Python3

    《Dive into Python3》是一本专为Python 3编程语言设计的教程,旨在帮助初学者和有一定经验的程序员深入理解Python 3的核心概念和技术。这本书由Mark Pilgrim撰写,以其详细、实践性强的特点深受读者喜爱。尽管描述...

    Dive Into Python 中文译文版

    PDF版本的《Dive Into Python 中文译文版》(diveintopython-pdfzh-cn-5.4b.zip)提供了完整的书籍内容,涵盖了Python的基础知识到高级特性。书中通过实际案例引导读者深入学习,包括但不限于变量、数据类型、控制...

    DiveIntoPython

    书中的"zh-cn-5.4b.chm"文件是中文版的《Dive Into Python》电子手册,采用CHM(Compiled Help Manual)格式,这种格式是微软为Windows系统提供的帮助文档格式,便于读者查阅和检索。5.4b版本可能代表该教程的一个...

    深入Python (Dive Into Python)

    深入python,深入Python (Dive Into Python) 译者序 by limodou 主页(http://phprecord.126.com) Python论坛 本书英文名字为《Dive Into Python》,其发布遵守 GNU 的自由文档许可证(Free Document Lience)的...

    Dive Into Python 3

    《深入Python 3》是一本全面且深入介绍Python 3编程语言的电子书籍,旨在帮助读者从...压缩包中的文件“diveintomark-diveintopython3-793871b”很可能是该书的源代码或HTML文件,可以配合阅读,加深对书中示例的理解。

    Dive Into Python 2 中文版

    《Dive Into Python 2 中文版》是一本深度探讨Python编程语言的教程,适合已经有一定编程基础,希望深入理解Python特性和应用的读者。这本书以其详尽的解释和丰富的实例,为Python初学者和进阶者提供了全面的学习...

    Dive into python

    dive into python英文原版,Dive Into Python 3 covers Python 3 and its differences from Python 2. Compared to Dive Into Python, it’s about 20% revised and 80% new material. The book is now complete, ...

    dive-into-python3 (英文版)+深入python3(中文版)

    《Dive Into Python3》和《深入Python3》是两本深受Python爱好者欢迎的书籍,分别提供了英文和中文的学习资源,旨在帮助读者全面理解和掌握Python3编程语言。这两本书覆盖了Python3的基础语法、高级特性以及实际应用...

    Dive Into Python 3, r870 (2010).pdf

    Didyoureadtheoriginal“DiveIntoPython”?Didyoubuyit onpaper?(Ifso,thanks!)AreyoureadytotaketheplungeintoPython3?…Ifso,readon.(Ifnoneofthat istrue,you’dbebetteroffstartingatthebeginning.) Python3...

    Dive Into Python 3 无水印pdf

    Dive Into Python 3 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Dive Into Python V5.4

    《Dive Into Python V5.4》是一本深入学习Python编程语言的经典教程,以其详尽的解释和丰富的实例深受程序员们的喜爱。这个版本是官方提供的最新版本,它不仅包含了PDF格式的完整书籍,还附带了书中所有示例代码,为...

    diveintopython3

    在“diveintopython3-master”这个压缩包中,包含了这本书的所有源代码示例。通过这些代码,我们可以学习到以下关键知识点: 1. **Python基础**:包括变量、数据类型(如整型、浮点型、字符串、列表、元组、字典)...

    diveintopython-examples-5.4.rar

    diveintopython-examples-5.4.rardiveintopython-examples-5.4.rardiveintopython-examples-5.4.rardiveintopython-examples-5.4.rar

    Dive Into Python 3 中文版

    ### Dive Into Python 3 中文版 - 安装Python 3 #### 标题解析 - **Dive Into Python 3 中文版**:这本书名表明了内容将深入讲解Python 3的各项特性和使用方法,适合希望深入了解Python 3编程语言的读者。 #### ...

    Dive Into Python 3 examples

    《Dive Into Python 3》是一本非常经典的Python编程教程,尤其适合初学者和有一定基础的程序员深入学习Python 3语言。这本书通过大量的实例来解释Python 3的关键概念和技术,帮助读者逐步掌握Python 3的核心知识。...

Global site tag (gtag.js) - Google Analytics