Home >Backend Development >Python Tutorial >Python 有哪些新手不会了解的深入细节?

Python 有哪些新手不会了解的深入细节?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-06-06 16:22:001318browse

新手觉得简单,但其实这玩意不比C简单。有哪些区分新手和老手的知识,习惯和细节呢?谢谢!

回复内容:

前人问过了:
Hidden features of Python
摘抄目录:

另外还有一个是黑魔法元类:
译文:blog.jobbole.com/21351/
原文:stackoverflow.com/quest 了解内建的几大容器list/dict/set用什么数据结构实现,以及一些基本操作的时间复杂度。这个不难,python的list实际上就是个vector,不是linked list,dict/set就是hash table。。然后避免犯频繁在list中间插入/删除之类的错误

这也使得python不适合函数式编程,像什么lambda不能跨行都是小事,但是标准库里连持久化的列表/搜索树都没有。。自己实现也不是不行,CPython函数调用开销又大。

所以还是老老实实写循环、抛异常吧,When in Rome, do as the Romans do。 列几个关键字吧:


decorator
yield(generator)
descriptor
method & function
slot
MRO
自省(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():
pass

class B(A):
pass

class C(A):
pass

class 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的构造。
<code class="language-rb"><span class="p">(</span><span class="n">define</span> <span class="n">ones</span> <span class="p">(</span><span class="nb">lambda</span> <span class="p">()</span> <span class="p">(</span><span class="n">cons</span> <span class="mi">1</span> <span class="n">ones</span><span class="p">)))</span>
</code>
一个非常重要的内置函数: type 。 Talks | Armin Ronacher's Thoughts and Writings 这里的pdf中有, 我截一段你看下
Python 有哪些新手不会了解的深入细节? Python 有哪些新手不会了解的深入细节?
或者这个网页A Curious Course on Coroutines and Concurrency应该是将Python的yield用得超好了
举例:
Python 有哪些新手不会了解的深入细节?
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn