V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
aladdinding
V2EX  ›  Python

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

  •  
  •   aladdinding · 2021-11-19 10:38:08 +08:00 · 17221 次点击
    这是一个创建于 861 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Python 开发应届生岗位

    有的甚至还写的精通 Python

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

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

    我感觉 Python 并不简单。。

    第 1 条附言  ·  2021-11-19 14:04:03 +08:00
    看了下方的留言,有些戾气较重,说楼主故意整八股文,

    应届生不问计算机网络、数据库、算法等基础,那问什么呢?高并发出来经验吗?



    很多说既然都是 Python 了就不需要八股文了,问点实际问题不好吗?

    我想说的说如果你只会写写脚本,if else ,你当然接触不到 Python 的鸭子类型。

    只会脚本的人,随便找个人学一天都能写出来了吧。



    标题中的“魔法方法” 我也是直接采用《流畅的 Python 》中的直译,可能有些人不了解,

    但是在实际面试中我是通过实际场景来询问面试者,并没有直接问名词解释

    例如:

    1.如何定义一个上下文管理器

    2.如何自定义对象能像函数一样调用等等



    有人说所谓的“魔法函数”花里胡哨没有作用,

    如果你做过 Python web ,了解 web 框架

    Django ,DRF 中大量有“魔法函数”的影子,

    举例:Django 如果你想自已定义 redis 的分页器 paginator ,你就需要按照 paginator 的协议来写

    包括我们公司内部很多脚手架包含了“魔法函数”,如果面试者从来没听过,了解过的话,写出的代码肯定是和我们公司的代码风格不匹配的



    最后我想说的是:我们需要的是认同 Python 的设计哲学,热爱 Python 的人。

    而不是觉得 Python 简单,学点基础语法就能快速上岗的人
    1  2  
    lusi1990
        101
    lusi1990  
       2021-11-19 17:11:06 +08:00
    多年 python 程序员一脸茫然。 不知道还不能写代码了?
    YvesX
        102
    YvesX  
       2021-11-19 17:17:28 +08:00
    这种设计得稀烂的语法就算常用我也不问,就跟考人 json 的逗号处理似的,略尴尬
    twl007
        103
    twl007  
       2021-11-19 17:25:25 +08:00 via iPhone   ❤️ 1
    大家诟病的只是把这种知道起来也没多少成本的问题看的如此之重罢了

    这就跟去问 bash 脚本开头 set 后面跟的参数是啥意思一样 看一下 man page 大家不也都知道了
    lozzow
        104
    lozzow  
       2021-11-19 17:52:51 +08:00   ❤️ 2
    茴,回,囘,囬
    fgwmlhdkkkw
        105
    fgwmlhdkkkw  
       2021-11-19 18:12:53 +08:00   ❤️ 2
    所以你的结论,就建立在你面试过的应届生之上。是吗?
    那和他们相比,你确实是厉害呀!简直不要太厉害!
    我吐了,直面龌龊的自己,好吗?
    呸!
    RedisMasterNode
        106
    RedisMasterNode  
       2021-11-19 18:20:45 +08:00   ❤️ 8
    感觉楼主 append 的这段已经说得很好了,特别是“我们需要的是认同 Python 的设计哲学,热爱 Python 的人”,不能再赞同。

    “而不是觉得 Python 简单,学点基础语法就能快速上岗的人”,说得更好。

    应届生不管简历写什么,真正掌握和熟知的比例上来说还是少数,考察的时候由浅入深地考察也是个好的办法
    binux
        107
    binux  
       2021-11-19 18:39:15 +08:00 via Android   ❤️ 3
    @twl007 真的是没有多少成本吗?
    你知道 __new__ 和 __init__ 的区别吗?
    知道 __hash__ 和 __eq__ 在 a==b 的时候调用那个?
    __getattribute__ 和 __getattr__ 有什么区别?
    等等
    tesorouo
        108
    tesorouo  
       2021-11-19 18:42:11 +08:00   ❤️ 1
    @ampedee 过于真实,要注意
    自己用 Magic Method:哇我真牛逼,Python 真牛逼,一线千万级并发的代码也就这个水准了吧?
    别人用 Magic Method:培训班出来的吧,培训班电商项目都教这个,当谁不知道呢
    locoz
        109
    locoz  
       2021-11-19 19:05:06 +08:00
    @tesorouo #107 一样的东西在不同水平的人手上做出来的效果本来就不同...
    twl007
        110
    twl007  
       2021-11-19 19:47:46 +08:00 via iPhone
    @binux 假如就像你说的 面试的时候知道 你确定人家的知道跟楼主以为的知道是一个东西?我真不太相信按照楼主描述的用法一个应届真的能有那么“知道”

    最后还不是看招进去之后如何培养 无论从意识也好还是代码风格也好 但是这些都不是应该在面试考察的内容 如果在面试阶段妄图从知不知道引申到代码风格是不是互相匹配 怕不是本末倒置了
    bnm965321
        111
    bnm965321  
       2021-11-19 20:17:30 +08:00
    这个是 python 文档第一章《 data model 》的内容。

    不知道的确实有点过分
    learningman
        112
    learningman  
       2021-11-19 20:29:09 +08:00
    骂楼主的是不是不会用啊(
    matrix1010
        113
    matrix1010  
       2021-11-19 20:34:55 +08:00
    会魔法的人毕竟是少数🤫
    Cooky
        114
    Cooky  
       2021-11-19 20:50:53 +08:00
    原来叫 魔法函数,这破名字一点不好听根本记不住
    LeeReamond
        115
    LeeReamond  
       2021-11-19 21:11:42 +08:00   ❤️ 1
    magic method 翻译过来是魔术方法,不是魔法函数,LZ 你还是别面试别人了,在我这首先不合格。所谓 python 的精髓在鸭子类型,好一个 javaer 发言,只能说这是在往 py 迁移多态中产生的错误想法,py 的精髓跟鸭子类型也一毛钱关系没有。啥水平的还能面试人还能出来发帖吐槽?
    Donahue
        116
    Donahue  
       2021-11-19 21:26:19 +08:00
    khaki
        117
    khaki  
       2021-11-19 21:30:24 +08:00
    真心问一下,需要什么样的编程水平才可以谈论“ Python 的设计哲学”?

    写了很久 python ,也用过很多其它语言,但我现在依旧不敢说“认同”python ,当然更不敢说“不认同”,其实我现在甚至都不敢谈“设计哲学”😭。
    Cooky
        118
    Cooky  
       2021-11-19 21:36:37 +08:00
    @khaki 狗屁哲学,把这种蛋疼玩意扔给 lisp 那帮人琢磨去
    hxse
        119
    hxse  
       2021-11-19 21:54:24 +08:00   ❤️ 1
    几年不见, 这孔乙己长进了, 都能当面试官了
    Vinceeeent
        120
    Vinceeeent  
       2021-11-19 22:14:44 +08:00
    扣语言的语法细节意义不是很大,可能他不知道可以在 Python 的类里去修改或定义__add__(self, otherObj),但他肯定也会懂得去实现一个 add(self, otherObj)方法达到同样的目的。如果公司对这方面的编码风格有要求,进公司后告知一下,去看下文档就会秒懂的。
    还不如问问应届生“怎么计算递归函数的时间复杂度”之类的问题。
    shayuvpn0001
        121
    shayuvpn0001  
       2021-11-19 22:26:57 +08:00   ❤️ 3
    和这个主题无关的一点感想:“语言造出了是为了解决问题的,而不是用来被人研究的。”
    auh
        122
    auh  
       2021-11-19 22:47:55 +08:00   ❤️ 1
    我曾经遇到一个技术总监,他面试过程非常简单,给一份题,然后针对这个题,简答问你几个问题。最后,不管你懂不懂,或者回答的怎么样,一概收下。但是,后期会试用一个月左右的时间。个别是因为组长不爽,找总监辞退的。但是,大部分是承受不了自己走的。因为,这个团队,不会主导于教人,而是,必须让你自己抗下所有。能坚持,你就留下,坚持不了,那是你的问题。任务不会因为你的能力不足或者新手同情你。

    当时,我非常疑惑。原来总监是这种套路。但是显然,这是明智的套路。给机会,但是不会降低要求。潜能自然就知晓了。
    f64by
        123
    f64by  
       2021-11-19 23:30:35 +08:00   ❤️ 1
    LZ 问的还是太简单了,按照现在这个卷的程度,明年就可以问 metaclass 了
    现在很多校招生简历吹得太狠,动不动就精通,自己写了精通难道不是意味着面试官可以随便问?
    abersheeran
        124
    abersheeran  
       2021-11-19 23:39:36 +08:00
    @f64by metaclass 难道不是造轮子必备知识点吗?这个也不算难吧。
    wlh233
        125
    wlh233  
       2021-11-19 23:45:39 +08:00
    这确实是基础了,今天刚学了个 a[0] = a = [0] 感觉才是魔法 2333
    wlh233
        126
    wlh233  
       2021-11-19 23:46:44 +08:00
    @wlh233 a = a[0] = [0]
    deplivesb
        127
    deplivesb  
       2021-11-20 00:11:16 +08:00   ❤️ 1
    我很认同楼主的 append 内的内容
    我同意楼主反对 “觉得 Python 简单,学点基础语法就能快速上岗”

    现在 Python 已经被各大营销说感觉是个人就能上手,是个人就能一周拿到 10k+ offer 的人了,去 B 乎逛一圈全是这种营销广告,要不然就是《华为大佬吐血整理》《清华博士吐血整理》《掌握 X 个大类,X 个函数,X 方法,你也能学会 Python 》这种垃圾文章,但其实我作为一个从大二开始学,到现在工作 4 年一直在做 Python 开发的人来说,我越来越觉得 Python 一点不比有些语言简单,甚至去思考内部的设计,还觉得很不可思议。但就是被网上这两年灌输的,即使是科班出身的,也会觉得“我是科班出身的,虽然没接触过 Python ,但是看网上都说 Python 简单,那对我科班出身不就更简单了”,但是一旦有了这个思想,遇到问题就不去深究,不去究原理。
    说一个例子,就我面试过的人(包括应届生,也包括一些社招所谓有 4 5 年 Python 开发经验的人) 70%的人都会认为 Python 里的 del 是删除一个对象,背后调用的是对象的 __del__ 方法。在我的印象里,因为这个问题而出的 bug ,已经不是一次两次了。甚至不乏有些人在公司的 title 是“高级开发”
    HankLu
        128
    HankLu  
       2021-11-20 00:34:49 +08:00
    不是大伙戾气重,而是我们也不懂什么是魔法函数,因为我们工作这么多年从来没用过魔法函数,你的意思就是瞧不起我们这些不懂魔法函数的人,你还想我们跟你好好说话?还同意你的观点?不骂你就好了
    newtype0092
        129
    newtype0092  
       2021-11-20 00:59:15 +08:00   ❤️ 1
    按这里的人的面试逻辑你就不该问任何问题。

    问基础概念说八股文没意义
    问系统架构说面试造火箭入职拧螺丝
    问语言特性说茴香豆的写法没必要问
    问算法说工作中都是调现成 lib 用不着知道

    以后面试就问天气和星座,天气好星座也合适就要了吧。
    binux
        130
    binux  
       2021-11-20 01:06:17 +08:00 via Android
    @twl007 至少不是 “看一下 man page 大家不也都知道了”
    twl007
        131
    twl007  
       2021-11-20 01:28:06 +08:00 via iPhone
    @binux 但是也没到大家看 man page 都看不懂的地步
    binux
        132
    binux  
       2021-11-20 01:29:47 +08:00 via Android
    @twl007 那看了没有嘛。
    YuiTH
        133
    YuiTH  
       2021-11-20 01:42:10 +08:00
    @shm7 你应该用过。首先 torch.utils.data 的 Dataset 类需要实现__len__和__getitem__。如果你全程用的是 fairseq……那好吧你总是要 call super().__init__()的。总是要好奇一下这个是做什么用的吧。
    oOoOoOoOoOo
        134
    oOoOoOoOoOo  
       2021-11-20 02:02:26 +08:00 via Android
    可能他比我强 刚才我又去看了一遍 Python Object Inheritance
    twl007
        135
    twl007  
       2021-11-20 02:28:16 +08:00 via iPhone
    @binux 你说的看跟楼上的 data model 是一个东西么?
    kuangwinnie
        136
    kuangwinnie  
       2021-11-20 03:02:58 +08:00
    精通 python 连魔法函数都不知道真的不应该
    pcslide
        137
    pcslide  
       2021-11-20 03:46:12 +08:00   ❤️ 7
    lz 应该不是计算机系毕业的吧?你应该问的是“python 里面如何实现 operator overloading”,而不是让人丈二和尚摸不着头脑的“魔法函数”。
    2i2Re2PLMaDnghL
        138
    2i2Re2PLMaDnghL  
       2021-11-20 08:57:53 +08:00
    magic method 和 metaclass 的存在是因为 Python 没有宏。
    —— 某 lisp hacker
    kuangwinnie
        139
    kuangwinnie  
       2021-11-20 08:58:42 +08:00
    @pcslide
    啊这,不就是把题面和题解换了个位置吗。
    JeffGe
        140
    JeffGe  
       2021-11-20 09:26:24 +08:00 via Android   ❤️ 1
    @pcslide ???
    你在前排回复这个也就算了,都第二页了,你不看 append 的吗? lz 问的就是类似“如何实现 operator overloading”一类的问题啊
    canwushuang
        141
    canwushuang  
       2021-11-20 09:31:50 +08:00
    本身程序就是博大精深的,即便是一期期的 pep 新功能,都是一辈子需要学习的。精通只是面试的术语吧,大学 4 年学这学那,怎么可能全身心投入在解决项目和优化代码中?“精通”就当是基本会,“熟练”就是会安装和部署环境变量吧。。。
    binux
        142
    binux  
       2021-11-20 10:06:12 +08:00
    @twl007 我说的有哪一个不在 python data model 里面?
    agagega
        143
    agagega  
       2021-11-20 10:42:08 +08:00 via iPhone   ❤️ 1
    😅楼主说个魔法方法都要被某些人杠是孔乙己,那这些人看到 Scala 、Haskell 这类语言是不是要气得焚书坑儒?
    amber0317
        144
    amber0317  
       2021-11-20 10:47:22 +08:00   ❤️ 1
    但凡正经学过 Python 的人,至少应该知道有“魔法函数”(魔术方法,whatever )这么个名词存在,而且至少应该知道它可以用来覆盖操作符或者 len 、str 这种内置方法的返回值。
    业务中确实用得少,不会用完全可以理解,但完全不知道,应届生都不应该。我只能认为是根本没学过 Python 。
    写 C with classes 的人不能说自己精通 C++吧,怎么到 Python 这里大家就宽容起来了呢
    gengchun
        145
    gengchun  
       2021-11-20 11:42:07 +08:00   ❤️ 1
    这么多人回复。

    就没有人告诉 OP 标准教程里面是没有 *魔法* 方法的称呼的。事实上官方翻译是 *魔术* 。而且 magic 的说法一般是和测试相关的文档里中的比较多。

    Reference 里面介绍这个概念用的是 special 。

    直接看英文文档,没有听说过这个词是很正常的事情。

    对于个人译者不遵照官方约定来翻译这个名词,如果熟悉翻译的流程的话,这个也是很上火的事情。看到还有人用,更是上火。

    即然只是面试程序员,而不是说布道者什么的。就不要太关心名词熟悉不熟悉。至少看一眼对方的代码。

    如果特别关心对方对于这个概念的掌握程度,就让人直接手写一个 __repr__ 不就完了?自己事先打印一个 class ,让对方补齐一下,知道这个概念,也就五分钟的事情。

    再说招人本来就是这样,就算招月薪五万的,这也只是说明你的招聘方法和你的预期不匹配,和劳动力市场的质量有什么关系?
    oakcdrom
        146
    oakcdrom  
       2021-11-20 12:10:35 +08:00
    这就是所谓的面试造火箭吧。。。一个实习岗位而已。。。能看明白代码就行了。。
    sidkang
        147
    sidkang  
       2021-11-20 12:23:45 +08:00
    我们需要的是认同 Python 的设计哲学,热爱 Python 的人。

    对于应届生来说,应该如何才会热爱一门编程语言呢?想想感觉真的很难啊。
    arischow
        148
    arischow  
       2021-11-20 12:54:09 +08:00
    不知道就是不知道嘛,不过到了 Python ,在这个社区就有很多人不愿意承认咯。而且还有很多人说 Python 有啥好学的呢,半天就能看完语法了~

    我只能说希望 op 不要给某些人搞差。
    arischow
        149
    arischow  
       2021-11-20 12:54:17 +08:00
    * op 心情
    Divinook
        150
    Divinook  
       2021-11-20 13:00:38 +08:00 via iPhone   ❤️ 1
    强烈同意楼主,这有什么好扣帽子的,既然写了精通 python ,面试的是 python 岗位,那连这些基本的特性都不清楚也太不应该了。
    Python magic method, asyncio, monkey patch 都是实用且有效的,如果一点都没接触过,和脚本小子又有什么区别,上面老哥也说了,问八股文被喷,问算法被喷,现在连问实际应用都要被喷了吗?
    Divinook
        151
    Divinook  
       2021-11-20 13:07:11 +08:00 via iPhone
    @newtype0092 老哥说的太好了 233
    WilliamYang
        152
    WilliamYang  
       2021-11-20 16:13:27 +08:00
    支持楼主,虽然我很少用 Python 了,但我很认同 Python 的设计哲学,另外招到适合自己团队的人,很重要
    Mirage09
        153
    Mirage09  
       2021-11-20 16:26:02 +08:00
    奇怪,我还从来没听过什么魔法函数。。magic something 总给我一种用奇怪的 hacking method 实现目的的感觉。。

    另外纠结这些名词干什么。。还设计哲学,这些乱七八糟的入职以后看看 doc 看看 cr 不是一两个小时就能搞定了?你们不做 onboard 的么?
    Mirage09
        154
    Mirage09  
       2021-11-20 16:29:23 +08:00   ❤️ 1
    以及我个人觉得,面试的时候是让你去引导,收集对方懂什么,而不是让你去发现对方不懂什么,除非你就是想 show off ,那没的说
    37Y37
        155
    37Y37  
       2021-11-20 16:42:02 +08:00 via Android
    完了完了,我先声明下,这么多年我写的都不是 python
    jusonalien
        156
    jusonalien  
       2021-11-20 19:15:25 +08:00
    楼主要想清楚,你需要的究竟是
    跟你思维价值观一致的人
    还是能跟你一起互相成长并肩作战的人
    yzbythesea
        157
    yzbythesea  
       2021-11-20 20:09:53 +08:00
    我当年作为应届生面试拿 offer ,有一轮 try catch exception 都没写明白,面试官当场还安慰我说学生应该很少接触这个。我遇到过的应届生,不会写 Java main 函数,collection sort 忘记怎么用的,甚至 import arraylist 忘了的,我都给过了。面试是去发掘一个人的才华和潜能,而不是去挑刺,去考察一些你比人家多看一眼的知识点。
    vincexu
        158
    vincexu  
       2021-11-20 20:11:28 +08:00   ❤️ 1
    这帖子为什么到现在还能继续吵啊,帖子上的 `append` 不是写了并不是直接问的语法细节吗,而是问的应用场景啊。楼里很多人能不能别看到面试问题就开始高潮啊,就比如最简单的``__repr__`` 你写 python 怎么可能会用不到啊,不然你调试 print 打印啥,打印对象的内存地址吗。面试考察是个多维度的东西,当然狂扣语法细节是个非常傻逼的事情,但问题来了写 Python 写 web 确实会用到这东西,而且楼主问的也是使用场景,翻译我觉得并不会造成理解问题 ,但凡有正经学习过 python 的,都不可能不知道这东西。
    gengchun
        159
    gengchun  
       2021-11-20 20:23:16 +08:00
    @vincexu 这个贴子本来就是因为使用了不恰当的名词翻译,所以才会吵到现在。当然是理解上的问题。再 append ,标题还是这个。一定会有人看到这个名词就觉得不爽。

    而且另外一个问题,一个面试者,指责被面试的人水平太低,这个本身就说不过去。哪怕骂 HR 不会筛简历也比这样好。
    semiwhale
        160
    semiwhale  
       2021-11-20 21:05:55 +08:00   ❤️ 1
    说来惭愧,我一直把这些方法当成 Java 、C++中类的一些基础方法、操作符一样,不知道还有这么高大上的名字。
    pcslide
        161
    pcslide  
       2021-11-20 21:14:09 +08:00
    @vincexu 每个人使用 python 的用途不同,不要总是自以为是。只用过 add ,invert ,iter 这种,从来就没用过 repr 大有人在。比如做图像处理,会需要 repr ?如果真需要什么,我用 iterator 把里面的数据读出来就可以,何须 repr ??
    locoz
        162
    locoz  
       2021-11-21 00:37:28 +08:00
    @auh #121 这种做法对于公司来说其实不太好,因为人员不稳定,而且水平有可能会差异较大,容易影响产出...小公司如果大家提前说好就是这种风格的话倒没啥,大点的就不合适了,徒增干扰项。
    locoz
        163
    locoz  
       2021-11-21 00:42:26 +08:00
    @canwushuang #140 所以其实本来就不应该写“精通”,真厉害的话这么写会显得这个人比较自大,不厉害的话这么写又会显得这个人没逼数,这个写法就是有些简历模板和 HR 带出来的坏风气😂。
    neutrinos
        164
    neutrinos  
       2021-11-21 00:52:28 +08:00 via iPhone
    赞成楼主,魔法函数是 python 里很重要的概念,合格的 python 工程师不应该不知道
    fatigue
        165
    fatigue  
       2021-11-21 02:57:41 +08:00
    我 python 用的不多,听着像是和 Lua 中的元表和元方法差不多的东西?
    DeWjjj
        166
    DeWjjj  
       2021-11-21 04:01:07 +08:00
    为什么 go 现在大行其道,不就是因为这些东西比 python 还要简易嘛。
    pooorguy
        167
    pooorguy  
       2021-11-21 05:59:58 +08:00
    @fatigue 还是 Lua 简单没有‘魔法’,毕竟只有 2 个下划线[doge]
    nicevar
        168
    nicevar  
       2021-11-21 11:13:21 +08:00
    @vincexu 确实用不到,__repr__我写了 python 十几年都没用过,而且我还在几个大而且很重要的项目里面都没见过用这个的,语言就是个工具,有些东西用不上不关注很正常,比如 c++有些人写了一二十年,某些特性摸都没摸过,就好比塞班整个系统都是 c++写的,一堆 c++的东西都没用上
    nikan999
        169
    nikan999  
       2021-11-21 12:30:15 +08:00
    如果是写库的人理应知道他这个库可以用到的一些语法来方便开发,比如元编程的一些语法。
    如果是写应用的人就没必要知道那么细了,语法玩出天也比不上换 golang/rust 性能增加的多(几倍几十倍),
    何必花大量时间纠结那些语法呢,
    RedisMasterNode
        170
    RedisMasterNode  
       2021-11-21 16:18:23 +08:00
    @nicevar 写了 10 几年读代码也从来没读过吗?难道平时开发都就一直平平淡淡写方法写对象写类吗,用到的框架、包没有需要点进去看看源码的时候?

    感觉不太相信,我毕业头 2 年也是写 python 的,工作里面各种包的文档可能解释得不够清楚,点进去看很多都在用魔术方法实现功能,如果对魔术方法一点都不了解,难道不会好奇它在做什么,怎么实现的吗?
    shm7
        171
    shm7  
       2021-11-21 17:08:17 +08:00
    @masterclock 是啊 python doc 也不是没翻过,这个叫法我真是一点印象都没有。
    shm7
        172
    shm7  
       2021-11-21 17:12:56 +08:00
    @OnlyO 黑个鬼啊,就是普普通通的用法。只不过给它安上这个特别的名字,这个别名,你不会这里你就是菜鸡了
    shm7
        173
    shm7  
       2021-11-21 17:15:57 +08:00
    @conhost 我连 NLP 都学了,背了几本公式,我连个 init len 都不知道吗,我难道是傻子。看来的确是啊,学习的时候翻过一两遍 python doc ,连魔法函数这种名次都没有背下来...
    shm7
        174
    shm7  
       2021-11-21 17:18:30 +08:00
    不得不感慨,内卷为啥会持续存在呀,因为现在的主流生源慢脑子都是做题家的思维...
    没治了
    shm7
        175
    shm7  
       2021-11-21 17:51:32 +08:00   ❤️ 1
    比起问魔法函数是啥,Python 高工们,不应该问 魔法函数是怎么起作用吗?
    OnlyO
        176
    OnlyO  
       2021-11-21 22:45:13 +08:00 via iPad
    @shm7 也确实就是内置的普通方法
    lizytalk
        177
    lizytalk  
       2021-11-21 23:24:17 +08:00 via iPhone
    魔法函数很多只有在特定的场景下才会遇到,从来没遇到过对应的场景就不会知道吧
    rm0gang0rf
        178
    rm0gang0rf  
       2021-11-22 08:41:50 +08:00
    没用过.....
    saulshao
        179
    saulshao  
       2021-11-22 08:45:34 +08:00
    这个确实不知道啊,虽然我不是应届生,也谈不上精通 Python
    jguo
        180
    jguo  
       2021-11-22 09:18:16 +08:00
    我这个就大学第一门计算机课用过 python 的都知道__init__,__len__,找工作的不知道居然还理直气壮
    arthurire
        181
    arthurire  
       2021-11-22 09:51:32 +08:00
    所有能在一分钟之内 Google 出来的问题,或者是能够在官方文档里面写明白的问题,面试的时候拿出来问,都是垃圾问题.

    还整个 Python 精髓,好家伙不知道还以为 Python 你设计的. 用了两个破方法就精髓了......

    还有人在这杠什么如何 debug. 退一步讲,就算我不知道__repr__干啥,我一样能 import logging 把问题写到日志里面,我也能自己定义一个 def debug_func() 把所有需要的东西输出出来.

    我下断点行不行啊?我直接看内存行不行啊?

    所以这个问题有啥用呢?
    arthurire
        182
    arthurire  
       2021-11-22 09:52:43 +08:00
    @YuiTH 做什么用大家都知道,我不好奇它叫什么,我只需要知道他能干什么就行了,对吧?

    这玩意在 C 里面叫重载诶,我再次在 Python 里面记这个名字有啥用吗?
    conhost
        183
    conhost  
       2021-11-22 10:03:11 +08:00
    @shm7 不知道你是具体做 NLP 哪个方面的,情感分析?对话系统?文本摘要?序列标注?亦或者文本生成,机器翻译?即使你调用现成的 transformers 包,你也要写 dataloader 吧,只要继承这个类,那你的__next__方法指定要重新实现,只不过没有探寻这类函数的名称定义而已,何必戾气这么重呢?
    arthurire
        184
    arthurire  
       2021-11-22 10:12:02 +08:00
    @conhost 我觉得你也不用说人家戾气重,这个楼主没 append 之前就是这种内容

    "你不知道这个定义所以你是哀思比"

    那我都会用了我为啥要知道定义啊?

    这就好像我们有个哀思比老师期末考试第一题是默写一个数学定义,一道题八十分.错一个字就给 0 分,全班挂科.
    VZXXBACQ
        185
    VZXXBACQ  
       2021-11-22 10:14:46 +08:00
    原来叫魔法函数啊。。。

    我一直把__str__ __len__叫重载 len 和 str 函数,__new__ __init__叫定义构造和初始,哈哈哈......Python 自学没背过这些东西。

    估计要被楼主挂掉了
    yazoox
        186
    yazoox  
       2021-11-22 10:36:24 +08:00
    点进来之前,我也不知道啥是“魔法函数”。当然,我很少使用 python ,只是偶尔修改其它人写的脚本,用到过一点点。
    另,“鸭子类型”,我也没有听说过......
    offswitch
        187
    offswitch  
       2021-11-22 11:30:09 +08:00
    @jguo 我一个不做 python 的也知道,然而有什么卵用?这个楼主看他发帖,2020 年才 7k,一个工作一两年的人,天天在这大放厥词,认同 python 设计理念,工作时间长的人来看,真的觉得可笑。
    cyrivlclth
        188
    cyrivlclth  
       2021-11-22 14:08:40 +08:00
    @arthurire 楼主属于糖吃多了,就以为糖本来就该存在,以前我也写 python ,也觉得这些什么魔法方法概念屌的一匹,然后写代码也追求 pythonic ,直到后来面相工资编程,转了 go 告别动态,才认识到这些真是赚钱 /技术路上的细枝末节。
    arthurire
        189
    arthurire  
       2021-11-22 14:20:38 +08:00
    @cyrivlclth 我从不写这种语法糖,我也不太理解 Pythonic.

    我只相信改的越少,B 事越少,
    nicevar
        190
    nicevar  
       2021-11-22 19:12:17 +08:00
    @RedisMasterNode 不是不知道,是不用,有些东西不用也没什么影响,这个就跟 Java 的 toString 一样,有的人就不喜欢用
    Donahue
        191
    Donahue  
       2021-11-22 22:56:30 +08:00
    @offswitch 哈哈哈,真相戳心
    aladdinding
        192
    aladdinding  
    OP
       2021-11-23 09:26:16 +08:00
    @offswitch 新开的部门去年还在实习怎么了?你非要以工资衡量的话 不也是五十步笑百步
    shm7
        193
    shm7  
       2021-11-23 10:06:42 +08:00
    @conhost 对不起,你可能要失望了,除了生成,这些我全都做过。所以做 NLP 就是只会调用下 transformer 吗?抱歉我写过的项目,用 transformer 的不到 10%。还是说您只会这个?所以 NLP 只需要做个 dataloader 就行了吗?
    就这点小东东,天天拿出来摆。还要 diss 下记不得这个叫啥名字的。天天关注叫啥名字,也不问为什么会在语言里面设置这么个东东,人家说你八股你还不信了。
    除了用 transformer ,有把 transformer 和 torch-lightning 的源码阅读过吗?里面包含你这 magic method 和 hook 的地方多了去了。这都是程序员的继续素养。别怪人家 diss 你,你这事情做的太 low 了。就像小学生会了乘法到处吹怎么这些人连乘号都不认识一样。
    offswitch
        194
    offswitch  
       2021-11-23 10:14:57 +08:00
    @aladdinding ?莫名其妙?工资是你的几倍,啥五十步笑百步?
    offswitch
        195
    offswitch  
       2021-11-23 10:23:16 +08:00
    @aladdinding 另外,我可不是 19 年毕业的,只是注册 V2EX 比较晚而已,已经工作六年了,你说的设计哲学,大学的时候也有这种中二想法,谈论 java 的设计哲学,不过毕业后就没了。为啥我也会知道 python 魔法函数,因为我大学也系统学过 python 。
    O5oz6z3
        196
    O5oz6z3  
       2021-11-23 10:48:34 +08:00
    面试里,鸭不懂魔不会,小小应届,可笑可笑!
    aladdinding
        197
    aladdinding  
    OP
       2021-11-23 14:53:27 +08:00
    @offswitch 我也莫名其妙,都是打工的,没必要整些优越感。lz 小公司 拿拿分红而已,跟你这资力雄厚的大佬没得比。
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4583 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 05:35 · PVG 13:35 · LAX 22:35 · JFK 01:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.