V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tennix
V2EX  ›  程序员

今天面试被问到 Python 的设计模式,直接给跪了

  •  
  •   tennix ·
    tennix · 2015-05-08 21:22:57 +08:00 · 9994 次点击
    这是一个创建于 3494 天前的主题,其中的信息可能已经有所发展或是发生改变。
    自己真是孤陋寡闻了,用了快3年的 python 居然不知道还有设计模式一说
    第 1 条附言  ·  2015-05-08 23:44:32 +08:00
    Google 了一下,发现 Python 还真有一套 Design Pattern,看来真的需要好好学习一下,下面这个资源不错,Python 童鞋好好看看,尤其是像 LZ 这样以为 Python 没有 Design Pattern 的

    http://python-3-patterns-idioms-test.readthedocs.org/en/latest/PatternConcept.html
    36 条回复    2015-05-12 17:44:33 +08:00
    messense
        1
    messense  
       2015-05-08 21:27:40 +08:00
    设计模式当然应该是各种语言都有的吧,只是细节和实现略有不同。Python 倒是不那么强调设计模式吧。

    https://github.com/faif/python-patterns
    ibigbug
        2
    ibigbug  
       2015-05-08 21:29:53 +08:00
    额,编程至少 3 年居然没听说过设计模式?
    maemual
        3
    maemual  
       2015-05-08 21:30:58 +08:00
    @ibigbug 楼主的意思应该是,知道设计模式,但是在用 Python 的过程中,没遇到过需要强调设计模式的地方。
    halfcrazy
        4
    halfcrazy  
       2015-05-08 21:32:36 +08:00
    楼主面的哪家呢?
    Septembers
        5
    Septembers  
       2015-05-08 21:36:20 +08:00 via Android
    @messense Python语法糖强大到很少需要设计模式支撑
    ibigbug
        6
    ibigbug  
       2015-05-08 21:36:46 +08:00
    @maemual 那就扯呗,面试又不怕扯得多
    tcxurun
        7
    tcxurun  
       2015-05-08 21:39:34 +08:00
    推荐楼主一本书,Python编程实战,运用设计模式、并发和程序库创建高质量程序,可惜我是搞java的,python新手,这书看到比较吃力
    tennix
        8
    tennix  
    OP
       2015-05-08 21:50:01 +08:00
    当听到说装饰器是设计模式时,我就彻底无语了,所以就跟他说装饰器就是一个高阶函数,在Haskell、Lisp等函数式编程语言中最自然不过的东西,然后又跟他扯了一堆函数式编程的东西,说得激动了,结果把他说得无语了,所以想想这次肯定跪了
    lloovve
        9
    lloovve  
       2015-05-08 21:52:14 +08:00
    开机 写代码 关机 这个通用模式
    ruoyu0088
        10
    ruoyu0088  
       2015-05-08 21:53:33 +08:00   ❤️ 3
    Septembers
        11
    Septembers  
       2015-05-08 21:55:48 +08:00 via Android
    @tennix 在OOP里decorator pattern的确是个模式
    Ryans
        12
    Ryans  
       2015-05-08 21:57:25 +08:00
    @tcxurun 看起来不错 thanks
    RIcter
        13
    RIcter  
       2015-05-08 21:58:42 +08:00 via iPhone
    非CS專業半路出家設計模式寫得比較吃力,現在就瞭解幾個⋯
    virusdefender
        14
    virusdefender  
       2015-05-08 22:00:28 +08:00
    我知道的也就是装饰器,单例模式(创建各种数据库连接的时候常用),订阅模式(django的信号)
    riaqn
        15
    riaqn  
       2015-05-08 22:03:39 +08:00   ❤️ 1
    设计模式是垃圾语言的标志。。越垃圾的语言设计模式越多。。比如说java。。。
    //最近正在写java, 怨念比较大。
    xuwenmang
        16
    xuwenmang  
       2015-05-08 22:06:23 +08:00
    @riaqn 设计模式跟语言没什么关系吧
    phx13ye
        17
    phx13ye  
       2015-05-08 22:15:08 +08:00
    越垃圾,设计模式越多+1

    对于python,很多都内建支持
    iterator build-in
    builder 默认参数
    command, strategy,visitor 什么的,fp表示你们一起上,我赶时间
    messense
        18
    messense  
       2015-05-08 22:16:21 +08:00
    @Septembers 是很少需要设计模式支撑,但是懂点设计模式可以写出更加 graceful 的代码。(当然像小白用 Java 那样乱用滥用设计模式就是坑了,Java 一生黑.......)
    Septembers
        19
    Septembers  
       2015-05-08 22:18:48 +08:00   ❤️ 1
    @messense 设计模式 是一种最佳实践的总结 但设计模式不是银弹
    neoblackcap
        20
    neoblackcap  
       2015-05-08 22:28:08 +08:00
    设计模式是编程语言的补充,比如单例模式或者Python里面的一个变种Borg模式,这些Python自身的语法不提供,此时必然需要程序员自身去实现。

    其实大概不是考Python的设计模式吧?其实就是想考楼主你的思考能力,到底遇到一个实际的问题能否将它映射到具体的模型里面
    cbsw
        21
    cbsw  
       2015-05-08 22:32:09 +08:00
    动态语言真的很少听到有设计模式一说,函数式语言就更没听说过设计模式了
    mahone3297
        22
    mahone3297  
       2015-05-08 23:08:36 +08:00
    @tennix 你都把面试官说成这副样子了。。。看来是挂了。。。
    acros
        23
    acros  
       2015-05-08 23:11:37 +08:00   ❤️ 1
    设计模式本质上不就是为了方便设计人员交流才用发明的术语么···
    有些人已经学会了,但他并不知道这个技巧有特定的术语。
    imn1
        24
    imn1  
       2015-05-09 00:37:34 +08:00   ❤️ 1
    如果程序和业务耦合越强,越需要设计模式,至少也要设计模式的思维,否则会被业务流程累死
    zonghua
        25
    zonghua  
       2015-05-09 00:45:56 +08:00 via iPhone
    @RIcter 不应该说是软件工程么?
    jacob
        26
    jacob  
       2015-05-09 00:54:56 +08:00
    @riaqn php表示工厂和注册模式也挺常用,不知道pyrhon里啥样
    dslwind
        27
    dslwind  
       2015-05-09 08:49:07 +08:00 via Android
    既然你们都在黑Java,我也来一个听来的笑话。Java:我可以用12种设计模式写“Hello world”
    jadetang
        28
    jadetang  
       2015-05-09 09:51:11 +08:00
    java程序员,会一点python,现在在用scala写项目。所谓oo里面的设计模式和fp里面的pattern是对比是这样的
    oo fp
    装饰器 函数
    工厂模式 函数
    访问者 函数
    。。。。 函数
    limbo0
        29
    limbo0  
       2015-05-09 10:16:59 +08:00
    limbo0
        30
    limbo0  
       2015-05-09 10:17:59 +08:00   ❤️ 1
    上面的是所有设计模式 python实现
    shanks
        31
    shanks  
       2015-05-09 15:29:51 +08:00
    大学时年少无知买了本Java编程思想,从此再也不想碰Java了。。。完全被里面Design Pattern弄晕 Orz
    用shell写出框架才是真牛逼(大雾
    neosu
        32
    neosu  
       2015-05-09 15:54:52 +08:00
    设计模式和语言无关的吧,
    icedx
        33
    icedx  
       2015-05-09 18:13:03 +08:00 via Android
    ↑被大型应用坑过的人
    设计模式真是很重要的东西
    大部分Python 程序员感觉不到原因是大部分时候在用框架
    总会有一天 你会接到一份没有框架可用的任务
    这种时候懂得设计模式的好就会体现出来
    limbo0
        34
    limbo0  
       2015-05-09 21:51:03 +08:00
    @shanks 和你一模一样啊,从此不想碰java
    parthenon2007
        35
    parthenon2007  
       2015-05-12 11:48:17 +08:00
    @tennix 必须跪了,否则他以后怎么面对你?
    wuyu1998
        36
    wuyu1998  
       2015-05-12 17:44:33 +08:00
    《Learning Python Design Patterns》作者: Gennadiy Zlobin-signed
    http://product.dangdang.com/1001475236.html
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2207 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 01:26 · PVG 09:26 · LAX 17:26 · JFK 20:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.