由 Java 转向 Python,思维方式与思路应该有哪些方面的转变? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
hellogbk
V2EX    程序员

由 Java 转向 Python,思维方式与思路应该有哪些方面的转变?

  •  2
     
  •   hellogbk 2016-01-17 11:56:07 +08:00 5104 次点击
    这是一个创建于 3555 天前的主题,其中的信息可能已经有所发展或是发生改变。

    以前写过一段时间的 Java ,现在需要转向 Python 。利用一些时间掌握了一些 Python 的基本语法,接下来需要花一段时间来了解一下常用的 API 。但我觉得更重要的应该是编程思维方式的转变,否则的话完全就相当于是只是重新学了一套 API 与类库的运用方式而已。

    V 友众多,肯定有不少前辈也是从 Java 转向 Python ,请问各位前辈能否提供一些经验,由 Java 向 Python 转的时候,哪些编程方面的思路与思维方式需要转变,来写出真正的 Python 代码?

    谢谢各位!!

    22 条回复    2016-01-18 14:37:06 +08:00
    qqblog
        1
    qqblog  
       2016-01-17 12:18:41 +08:00
    function is first-class object
    sivacohan
        2
    sivacohan  
    PRO
       2016-01-17 12:23:54 +08:00 via Android
    import 机制好好看看, Java 里正常到 Python 就是循环引用
    基于 module 的 Singleton 看一下。 Python 里实现单例最简单的办法。
    看一下 monkey patch 。这东西写框架比较有用。
    sivacohan
        3
    sivacohan  
    PRO
       2016-01-17 12:27:07 +08:00 via Android
    另外,语言的转换要找个理由。在 Java 中表达力受到了什么限制。希望在 Python 中获得什么。别的就没什么了。
    一般来说 Java 换 Python 会经历如下几个过程:
    1, 这尼玛也报错?
    2, 不错,比 Java 简洁多了
    3, 这货咋这么慢,算了,还是用 Java 写这个吧
    mengzhuo
        4
    mengzhuo  
       2016-01-17 12:28:42 +08:00 via iPhone
    最重要的难道不是列式推到和啥都是对象么?
    congeec
        5
    congeec  
       2016-01-17 12:28:49 +08:00
    我不怎么用 java ,不过我知道 idiomatic python 相关的你一定得看看
    luikore
        6
    luikore  
       2016-01-17 14:08:26 +08:00
    忘记设计模式和依赖注入

    不要想一个东西是什么类型, 想它能做什么

    free form 编辑器比做选择题的 IDE 更有生产力
    jukka
        7
    jukka  
       2016-01-17 14:13:08 +08:00
    forget OOP
    233
        8
    233  
       2016-01-17 14:35:51 +08:00
    有本书叫 <dive into python>?好像这名字。
    书本身争议比较大,但讲解方法的确是和 java 一类语言对比着讲的
    hbkdsm
        9
    hbkdsm  
       2016-01-17 14:44:13 +08:00
    @luikore 请问从 Javascript 转向 Ruby ,思维方式与思路应该有哪些方面的转变?
    lcqtdwj
        10
    lcqtdwj  
       2016-01-17 16:28:56 +08:00
    鸭子类型
    funky
        11
    funky  
       2016-01-17 17:03:39 +08:00
    鸭子辩型
    ming2050
        12
    ming2050  
       2016-01-17 17:05:48 +08:00 via Android
    感觉没啥太大的区别
    wizardoz
        13
    wizardoz  
       2016-01-17 17:29:21 +08:00
    从强类型到动态类型,一些本来需要定义几个类来实现的设计模式不再需要了。
    GNiux
        14
    GNiux  
       2016-01-17 17:32:50 +08:00 via iPhone
    @233 刚下了它这 04 年的版本, python 2 ,不知有没更新跟进……
    wizardforcel
        15
    wizardforcel  
       2016-01-17 18:14:31 +08:00
    为什么要写出真正的 python 代码?和语言绑定太死的话迁移困难。
    Ouyangan
        16
    Ouyangan  
       2016-01-17 19:08:32 +08:00
    实践出真知 ,工作 java 业余看看 go ,共勉之
    wizardforcel
        17
    wizardforcel  
       2016-01-17 19:17:41 +08:00
    @wizardoz 准确的说是一部分接口不需要了。反正访问属性都是动态查找的。
    233
        18
    233  
       2016-01-17 20:29:28 +08:00
    @GNiux 应该够呛,这本书并不受推崇,我也是喜欢和其他语言对比着看才选择的这个
    Owenjia
        19
    Owenjia  
       2016-01-18 01:28:06 +08:00
    @GNiux
    @233
    Dive Into Python 3 还是有的。 http://www.diveintopython3.net/
    skyworker
        20
    skyworker  
       2016-01-18 10:06:25 +08:00
    @sivacohan “慢”其实不是问题,目前大部分应用的瓶颈其实在数据库里面。

    SQL 查询需要 400ms , java 循环需要 40ms;

    SQL 查询需要 400ms , python 循环需要 80ms;

    440ms 和 480ms 差别很大吗?
    skyworker
        21
    skyworker  
       2016-01-18 10:07:57 +08:00
    @sivacohan 当然,你纯跑一个不涉及 sql 操作的 1w 遍的 benchmark , java 和 python 差别很大;但是生产系统上的瓶颈大部分都在 sql 上
    tanywei
        22
    tanywei  
       2016-01-18 14:37:06 +08:00
    凡事不先写 Class
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5846 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 06:35 PVG 14:35 LAX 23:35 JFK 02:35
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86