为啥好多面试 Python 的连魔法函数都不知道?

2021-11-19 10:38:08 +08:00
 aladdinding

Python 开发应届生岗位

有的甚至还写的精通 Python

话说 Python 的精髓就是鸭子类型吧,有的直接说没听过

估计都是把 Python 当作面向过程来写了,怪不得觉得语法简单

我感觉 Python 并不简单。。

17368 次点击
所在节点    Python
197 条回复
Chase2E
2021-11-19 10:42:38 +08:00
好的代码, 是刚入职的新人也能看懂,
牛逼的代码, 是学完 CS101 的大一新生也能看懂.

你想问他懂不懂"魔法函数"的特性, 直接问他 "__init()__"为什么前后都要下划线不就行了...

这些语言的高级 feature, 你写在工作代码中, 不是让大家为难吗?...
rationa1cuzz
2021-11-19 10:44:05 +08:00
魔法方法太多了,而且大部分都用的少。
aladdinding
2021-11-19 10:44:12 +08:00
@Chase2E 问了啊 就是问了为什么有的函数是双下划线
leetom
2021-11-19 10:47:20 +08:00
这种语法细节没啥意义啊
要不你回答一下,为啥 init 前面和后面都有双下划线?为啥不是单下划线?为啥不是只有前边有?
cyrivlclth
2021-11-19 10:47:24 +08:00
= =不如问一下 list 的扩容机制吧。。。
ipwx
2021-11-19 10:48:52 +08:00
@Chase2E 我寻思 Python 类写多点自然就用到 magic function 了。

别的不说,__lt__, __eq__, __hash__ 这三个凡是要用上自定义类型,大概率都要用到。不然你怎么自定义放进 map 当 key 或者 sort

__deepcopy__, __getstate__, __setstate__ 这三个对需要序列化的自定义类型也是必须认识的。

__enter__, __exit__ 是为了自定义类型要 with

这些都不会,那就真的只会写函数了。可是复杂逻辑不用类,很难写啊。。。除非是 脚本小子
huruwo
2021-11-19 10:49:33 +08:00
因为工作用不上 或者是用了也不知道是什么
aladdinding
2021-11-19 10:50:44 +08:00
@ipwx 赞同
ampedee
2021-11-19 10:50:49 +08:00
自己用魔术方法实现了一个特性:真爽!我真牛逼
看别人的代码用魔术方法实现了一个特性:傻逼!垃圾代码
ipwx
2021-11-19 10:50:59 +08:00
@leetom
@Chase2E “精通 Python”但是不会我上面说的这几个功能,也太离谱了。
ipwx
2021-11-19 10:51:31 +08:00
@ampedee 你对“魔法方法”的理解有些怪异。

比如我提到的这几个都是标准途径。。。
ospider
2021-11-19 10:51:32 +08:00
@leetom duck typing 不能算语法细节吧,不然用毛线 Python 。不过应届生不知道这个也合理吧
macha
2021-11-19 10:51:59 +08:00
最后一句我很赞同,不知道为什么那么多人说 Python 简单。
shyling
2021-11-19 10:52:06 +08:00
要不你问怎么让 len(自定义 class()) 返回结果吧。。

或者怎么 for in 自定义 class()
ipwx
2021-11-19 10:52:17 +08:00
哦最基础的还有 __repr__。

这个都不会还怎么调试的时候 print ?
xxoOOovv
2021-11-19 10:52:49 +08:00
如果毕业就写 py 的(而且 c/cpp 基础不扎实的),我感觉多数后面都会变成“能用就行”的原则,多数都不去了解源码和底层原理。如果是从 c/cpp 或 go 转来写 py ,情况就不一样了
dejavuwind
2021-11-19 10:52:57 +08:00
@Chase2E @aladdinding 所以为什么要前后双下划线?为什么不是单下划线或者双连接符?

难道不应该问这类函数有什么特点或者作用吗?而不是问为什么要前后双下划线?
aladdinding
2021-11-19 10:54:28 +08:00
@dejavuwind 目的就是问有什么作用 说双下划线只是给点提示
fgwmlhdkkkw
2021-11-19 10:57:05 +08:00
meta class
await/yield
ytmsdy
2021-11-19 10:57:09 +08:00
其实我觉得 Python 最大的问题不是速度慢,或者不支持并发。
而是花式语法太多,每个人的编程风格都不一样,写出来的代码千奇百怪。
相对于 C++或者 Java 这种工程化标准的语言,就没有这一类的问题!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/816468

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX