• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

python 搞代码 4年前 (2022-01-09) 33次浏览 已收录 0个评论
文章目录[隐藏]

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

回复内容:

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

  • Argument Unpacking
  • Braces
  • Chaining Comparison Operators
  • Decorators
  • Default Argument Gotchas / Dangers of Mutable Default arguments
  • Descriptors
  • Dictionary default .get value
  • Docstring Tests
  • Ellipsis Slicing Syntax
  • Enumeration
  • For/else
  • Function as iter() argument
  • Generator expressions
  • import this
  • In Place Value Swapping
  • List stepping
  • __missing__ items
  • Multi-line Regex
  • Named string formatting
  • Nested list/generator comprehensions
  • New types at runtime
  • .pth files
  • ROT13 Encoding
  • Regex Debugging
  • Sending to Generators
  • Tab Completion in Interactive Interpreter
  • Ternary Expression
  • try/except/else
  • Unpacking+print() function
  • with statement

另外还有一个是黑魔法元类:
译文: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

本文来源gaodai.ma#com搞##代!^码@网*

and Writings 这里的pdf中有, 我截一段你看下

或者这个网页A Curious Course on Coroutines and Concurrency应该是将Python的yield用得超好了
举例:


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Python 有哪些新手不会了解的深入细节?

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址