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

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

Python 开发应届生岗位

有的甚至还写的精通 Python

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

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

我感觉 Python 并不简单。。

17546 次点击
所在节点    Python
197 条回复
JeffGe
2021-11-19 13:40:50 +08:00
我记得这叫 dunder methods ,取名非常直观:d(ouble)-under(score)

查了一下,这些方法也叫 magic methods 或者 special methods

这个名字已经在 Python 领域被广泛接受了,再说就算不清楚这个名字,面试的时候可以交流可以问,我认为楼主使用这个名字没有任何问题。值得探讨的无非就是 dunder methods 该不该作为考察的点,我认为自称“精通”Python 的人是可以考的。
newmlp
2021-11-19 13:42:00 +08:00
@ytmsdy 不不不,cpp 花里胡哨的东西更多
ipwx
2021-11-19 13:49:29 +08:00
@est 恕我直言,Python 不用这些机制就失去了 Python 的优势,和用 Java 怼代码也没有区别了。
Zy143L
2021-11-19 13:51:11 +08:00
我一般叫魔术方法...
看到魔法函数 我愣了几秒😂
ila
2021-11-19 13:53:10 +08:00
比较少用。
用的常规方法。
yEhwG10ZJa83067x
2021-11-19 13:57:05 +08:00
就说 PHP 好了,比如他的协变和逆变我就理解好了很久。我感觉都不简单。
unnamedhao
2021-11-19 13:57:45 +08:00
我觉得面试的好问题应该是,
如何实现某个需求,
在实现这个需求的时候用 magic method 会有什么优势
marcong95
2021-11-19 13:59:56 +08:00
@skinny #32 magic method 是写在 Python 官方文档 Glossary 里面的一个术语,虽然是 an informal synonym of special method ,也不至于算不上人话。

个人而言不太爽部分人看到个自己没见过的词汇就说别人「不说人话」,在指责别人不说人话之前,能不能先自己 Google 一番。如果只是从非专业人士不好从字面上理解的角度出发,窃以为「元编程」也不太算人话。
ipwx
2021-11-19 14:00:17 +08:00
@justrand ???(刚刚速查了一下)这不就是改个函数签名吗。。。。

php runtime 帮你做了类型检查了,都不用你处理“不能编译”这件事。动态语言就是爽啊,在 C++ 里面这种代码根本写不出来,想要逆变只能 dynamic_cast<...>
JudyHal
2021-11-19 14:01:39 +08:00
现在的政治正确就是,你越无知你就越有理,这么简单的东西都不会还好意思去应聘?现在 V2 也是宣扬知识无用论的大本营
yEhwG10ZJa83067x
2021-11-19 14:12:44 +08:00
@ipwx 好吧是我太弱了
ipwx
2021-11-19 14:33:16 +08:00
支持楼主的附言 1 。

楼上有些人确实没怎么用过 Python ,然后上来大言不惭说,“我从来不用”,只用普通成员函数。

但凡用过大一点的库就知道 Python 都靠下划线 magic method 实现各种 protocol 然后把对象丢进去做 middleware 。这是 Pythonic 。结果还被人喷。。。
OnlyO
2021-11-19 14:40:50 +08:00
魔法方法是 Python 的黑科技啊,深入必须得会啊.
fregie
2021-11-19 14:42:58 +08:00
"不简单"对于编程语言来说从来不是一个值得骄傲的点,相反,这可能是一个致命伤(比如 C++)
"学点基础语法就能快速上岗"也从来不是缺点,这不该是一门编程语言的终极追求吗?(仅限语言方面,其他方面的基础也很重要)
MonoBiao
2021-11-19 14:44:58 +08:00
metaclass 真好玩(
shyling
2021-11-19 14:53:43 +08:00
真心觉得这个是基础。。

你在 java 里不能对一个实例四则运算,在 python 里确可以,在 c 艹里甚至还可以左移一个字符串到输出流里。

难道就不好奇为什么吗? 教什么就只会什么,背书是吧
RedisMasterNode
2021-11-19 15:01:25 +08:00
这些在 Python 开发里面是真的用得到的...如果你只是把 Python 当做一个很简单的脚本工具,没有任何公共组件、(项目内)中间件开发经历的话,那完全不了解这些东西怎么样用好一门语言呢。总不能一直抱怨工作平淡,又一点追求或者收获都没有吧。

安利写 Python 的工程师找工作前都可以看看《流畅的 Python 》
johnsonqrr
2021-11-19 15:04:24 +08:00
额,不懂也无可厚非吧,有啥好喷的。
工程上的细节知识点太好学了,面试不是都以算法和数据结构为主吗。
ybnsjl
2021-11-19 15:04:51 +08:00
@Chase2E #1 前两句是赞同的,后两句有些偏失。比如:
定义__len__、__iter__方法,那么在你的业务代码中可以少写很多 if 、for 之类的;
定义__getitem__、__missing__可以少写很多 try...except KeyError 之类的。每个魔法函数都有它存在的意义。

完成功能是一方面,可维护性、健壮性、扩展性又是另外一方面。基础函数库越扎实,上层的业务代码就越少,秃头的可能性就越低。
ffxrqyzby
2021-11-19 15:11:21 +08:00
Python 确实不简单, lz 说的这些但凡看过一本深入 Python 的书都会了解的
不过面试吗, 考察语言只是一个点, 楼下的也不要太偏激了

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

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

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

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

© 2021 V2EX