新手觉得简单,但其实这玩意不比c简单。有哪些区分新手和老手的知识,习惯和细节呢?谢谢!回复内容:
前人问过了:hidden features of python摘抄目录:argument unpackingbraceschaining comparison operatorsdecoratorsdefault argument gotchas / dangers of mutable default argumentsdescriptorsdictionary default .get valuedocstring testsellipsis slicing syntaxenumerationfor/elsefunction as iter() argumentgenerator expressionsimport thisin place value swappinglist stepping__missing__ itemsmulti-line regexnamed string formattingnested list/generator comprehensionsnew types at runtime.pth filesrot13 encodingregex debuggingsending to generatorstab completion in interactive interpreterternary expressiontry/except/elseunpacking+print() functionwith statement另外还有一个是黑魔法元类:译文:http://blog.jobbole.com/21351/原文:http://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python
了解内建的几大容器list/dict/set用什么数据结构实现,以及一些基本操作的时间复杂度。这个不难,python的list实际上就是个vector,不是linked list,dict/set就是hash table。。然后避免犯频繁在list中间插入/删除之类的错误这也使得python不适合函数式编程,像什么lambda不能跨行都是小事,但是标准库里连持久化的列表/搜索树都没有。。自己实现也不是不行,cpython函数调用开销又大。所以还是老老实实写循环、抛异常吧,when in rome, do as the romans do。
列几个关键字吧:decoratoryield(generator)descriptormethod & functionslotmro自省(id、type、dir、vars等等)然后就是各种常用的模块吧,itertools、functools、collections、copy等吧最后有兴趣的话可以读一下陈儒写的《python源码剖析》,可以了解到小整数缓存,int、list、dict缓存池,字符串intern机制,内存管理等内部实现。
某个主要分支的某个小版本被墙了
迭代器,生成器,可迭代对象。搞清楚这几个概念,面试官就会觉得你很牛逼了。
正负数除法求商和余数的值
我觉得最有趣的莫过于method resolution order(mro)。mro是指class inheritance中method或者attribute的search order。最简单的情况是classic class的 inheritance tree。这时候,search order是depth first, from left to right。举个例子:class a(): passclass b(a): passclass c(a): passclass d(b, c): pass在上面的inheritance tree中,class d的mro应该是 d,b,a,c。值得注意的是,a的位置在c的前面。对于new style class, python 2.2和2.3(或以上)也有区别,2.3以后的mro algorithm叫c3 algorithm。具体的细节大家可以google一下,个人觉得非常有趣。
你可以学完基础python的语法之后学一下其他语言,看看他们的一些特征能不能在python中实现。我举个小例子。在racket里面,有一个stream的构造。
(define ones (lambda () (cons 1 ones)))
一个非常重要的内置函数: type 。
talks | armin ronacher’s thoughts and writings 这里的pdf中有, 我截一段你看下或者这个网页a curious course on coroutines and concurrency应该是将python的yield用得超好了举例: