推荐学习书目
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
sensui7
V2EX  ›  Python

js 党可以吐槽一下 Python 吗

  •  
  •   sensui7 · Sep 12, 2017 · 21344 views
    This topic created in 3198 days ago, the information mentioned may be changed or developed.

    缩进真的不习惯, map 返回的竟然是一个迭代器, 也许这就是大佬吧, 匿名函数 还要写 lambda 这么长的单词, 列表的长度还要用 len 函数而不是 len 属性, 您的列表到底是不是对象呢? 要不是对象您的 append 方法又是怎么回事? 我大 js

    js:
    arr.map(x => x*2)
    python:
    list(map(lambda x: x*2, arr))
    

    非引战, python 的优点就是生态环境, 我也是看中这点...

    156 replies    2019-09-27 13:58:27 +08:00
    1  2  
    bramblex
        101
    bramblex  
       Sep 12, 2017
    @Kisesy

    类型约束,类型检查,函数类型,高阶类型,类型类。

    就一个类型检查的话,说难听点,这叫做玩具,我花两天时间自己也能造一个。
    Kisesy
        102
    Kisesy  
       Sep 12, 2017
    @bramblex 额,我只是说类型检查...并不是它只有类型检查
    这个 pyx 源码会被翻译为 C,然后交给 C 编译器编译,这些类型什么的是会当作 C 的一样看待
    bramblex
        103
    bramblex  
       Sep 12, 2017
    @Kisesy

    大哥,C 类型和没有类型没什么差别,真的。

    跟你说个笑话,c 是强类型语言。
    wwqgtxx
        104
    wwqgtxx  
       Sep 12, 2017 via iPhone
    @Chingim 说到底,python 的默认行为就是所有 object 基类提供的需要重载的函数都是__xxx__的形式,而经常为了方便调用,在__buildin__中都提供了 xxx()的函数方便访问,这个不仅仅是在于 len 这一个,还有很多类似的其他属性,比如
    getattr
    setattr
    iter
    next
    这些都是,说到底这只是人家的一种设计思路,作为一款 1991 年就诞生的语言,他本来就比 js 出现的要早得多,人家为什么要按照其他 oop 语言的习惯去设计

    你要是说不适应,人家的构造函数还是叫__init__()呢,传递 this 指针还用 self 呢,这些其实都只是不同语言的设计理念问题,有什么对于不对之分,大家用的方便就好

    计算机语言经过这么多年的发展,本来就产生了各种各样的风格,照你这么说 golang 更是一个异端,人家还非要把产量类型放在变量名后面呢

    说到底不要用一种语言的定向思维写另一种语言,这样会掉进坑的
    Chingim
        105
    Chingim  
       Sep 12, 2017
    @wwqgtxx 谢谢, 如果说这是风格, 我理解并接受.
    但是如果说全局 len()方法是为了运行效率, 那么我并不是很理解
    Eds1995
        106
    Eds1995  
       Sep 12, 2017
    @iFlicker js 我一直在找括号,但是 python 就不用
    kenshinji
        107
    kenshinji  
       Sep 12, 2017
    @Miy4mori 用 IntelliJ 也很累,也许你打开的方式更高级一点?
    alexzhou
        108
    alexzhou  
       Sep 12, 2017
    啥也没说 找存在感
    notreami
        109
    notreami  
       Sep 12, 2017
    反正都不用长期维护,有啥好纠结的。尤其是 js,3 年前的 js 项目,还能正常工作嘛?
    wxjeacen
        110
    wxjeacen  
       Sep 12, 2017
    [ x*2 for x in arr]
    wxjeacen
        111
    wxjeacen  
       Sep 12, 2017
    其实我想说,js 怎么跟 python 比函数式,python 怎么能跟 clojure 比函数式。
    SuperMild
        112
    SuperMild  
       Sep 12, 2017
    @notreami 逻辑反了吧,如果 3 年前的项目现在能正常工作,就不用维护了呀。正因为不能正常工作,才需要维护呀。
    RW667
        113
    RW667  
       Sep 12, 2017
    非 python 语言最害怕 IDE 提示你多了或少了一个括号, 这搞不好就是一下午的事情。
    类似 JS, JAVA, 行数一多,如果没有格式化好,看得真心累。
    还有 RUBY, 经常最后两行都是 end , 不累吗?
    python 的缩进看起来就很直观。
    hikarugo
        114
    hikarugo  
       Sep 12, 2017
    管你们怎么说。。。反正 python 我写起来贼爽。。。
    WangYanjie
        115
    WangYanjie  
       Sep 12, 2017
    没怎么用过 js,所以不太好评论,不过你的 python 写的真入门

    ```
    [x * 2 for x in x in arr]
    ```
    jimrok
        116
    jimrok  
       Sep 12, 2017
    @RW667 python 没有 End 吗?有的呀

    def help(self):
    if a is not None:
    print a

    if b is not None:
    print b

    if c is not None:
    print c

    if d is not None:
    print d

    #end if d

    #end if c

    #end if b

    #end if a

    所以,我做为 ruby 党,没有觉得 end 很烦.
    Osk
        117
    Osk  
       Sep 12, 2017 via Android
    python 的缩进最头疼的是这些情况:编辑器不支持自动缩进,以及混用编辑器导致 tab 和 space 灾难,以及在 v2 贴代码。。。
    其它情况还好,结构清晰,看着舒服。

    不需要纠结:这个 { 是起一行呢还是写在本行尾?
    lrxiao
        118
    lrxiao  
       Sep 12, 2017
    @bramblex 严格说 Haskell 那叫对齐了..更蛋疼
    神 tm C 类型跟没有没区别 你开了-Wconversion 吗
    >> Python 抄 Haskell [来源请求]
    Haskell 1.0 是 1990, Python 最早版本 0.9 也是 1990 在 Report/源码中均有对齐 /缩进
    lrxiao
        119
    lrxiao  
       Sep 12, 2017
    @bramblex 还是你说 lazy lazy 又不是只有 Hs 一家= =
    RW667
        120
    RW667  
       Sep 12, 2017
    @jimrok 你那只是注释好么? 并没有强制你写。

    你试过用慢整终端登到服务器上,用 vi 打开一个.rb :$ 最后一屏 全是 end 往上再翻一屏还是全 end 的那种欲哭无泪的感觉么?

    其实我上面还写错了,不是最后 2 排全是 END, 是最后 2 屏。
    bramblex
        121
    bramblex  
       Sep 12, 2017
    说个笑话,C 是强类型语言。呵呵
    fhefh
        122
    fhefh  
       Sep 12, 2017
    正在逐渐逃离 js 向 php、python 靠拢~~~
    bramblex
        123
    bramblex  
       Sep 12, 2017
    @lrxiao

    以及,你家 Haskell 和 python 只有缩进一样?而且 python Lazy 你逗我?
    bramblex
        124
    bramblex  
       Sep 12, 2017
    @lrxiao

    举个简单例子,列表推导。为什么 Haskell 能有列表推导?因为有 List Monad 啊,把 List Monad 是列表推导的理论基础啊。你 Python 没 List Monad 你的列表推导怎么出来的?强行抄一个实现一个语法糖而已。
    edwardpro
        125
    edwardpro  
       Sep 12, 2017
    要写大括号的语言都是异类!
    bramblex
        126
    bramblex  
       Sep 12, 2017
    @lrxiao 以及最后,各个语言相互借鉴优秀的地方本是无可厚非的,我那句 python 抄 haskell 不过是恢复前面某 xx 说 es6 抄 python 的言论而已。
    ryuzaki113
        127
    ryuzaki113  
       Sep 12, 2017
    @lovestudykid 标号多难看,不如用彩色笔给括号着色
    ioth
        128
    ioth  
       Sep 12, 2017
    js
    php
    c 的痕迹太重
    lz 等们,没学过 c 吧
    早期不是 c,就是 pascal,当然 fortran(basic)、cobol 都有个性
    java 不过是脑子没转过来的 c++
    ivechan
        129
    ivechan  
       Sep 12, 2017
    python 早就不鼓励用 reduce, map 这些了吧, 心疼你们这些用劣质教材的。
    ssxn58
        130
    ssxn58  
       Sep 12, 2017
    管他 C 是什么强类型弱类型,我只认指针,想指哪里指哪里,用起来爽极了
    Keyes
        131
    Keyes  
       Sep 12, 2017
    @bramblex 好战力,以理服人!
    Keyes
        132
    Keyes  
       Sep 12, 2017
    @ioth 唔嗯当年老大让写个简单的论坛,让用 PHP 写,还一脸懵逼,直到看见语法,“哦~原来 PHP 就是 C 变量前面加个$”,hhhhhhh
    66beta
        133
    66beta  
       Sep 12, 2017
    打工是不可能打工的,只好写 JS 混饭吃啦
    lrxiao
        134
    lrxiao  
       Sep 12, 2017
    @bramblex
    我说 map 这几个 lazy
    C 强类型怎么就笑话了 UB 写习惯了而已
    Monad 首先是个数学概念
    instance Monad [] 和这个 comprehension 糖只有[|...]后面一半 do-notation 的糖关系
    还只是[]的糖不能用在其他 Traversable 上
    py 还可以用 for-in 语法搞搞 generator/iterator 的 list comprehension 当然 python 后面这个语法太残了 不如 do-notation 灵活
    lrxiao
        135
    lrxiao  
       Sep 12, 2017
    list comprehension 的理论基础= = 那不就是个集合定义式吗 还 Monad Monad 只要求了态射的幺元和结合律
    lrxiao
        136
    lrxiao  
       Sep 12, 2017
    不过 py 也用不着后面跟一大坨..不是 Hs 那种严苛的纯 FP 存个 VM 里的状态无所谓
    ty89
        137
    ty89  
       Sep 12, 2017   ❤️ 3
    说句不该说的,如果你连
    “配置编辑器让它在编辑 py 文件的时候,换行自动缩紧 4 个空格”
    都搞不定的话

    还做程序员干什么?卖红薯多好
    Miy4mori
        138
    Miy4mori  
       Sep 12, 2017 via iPhone
    @kenshinji 那怕是不写代码才不会累哦
    lrxiao
        139
    lrxiao  
       Sep 12, 2017
    @lrxiao 说错了 这个是 Category 定义 Functor 是把 Category 作为 obj fmap 作为态射的 Category Monad 是 Endofunctor ( Hask 范畴里的所有 Functor 都是 Endofunctor Hask->Hask ) 上定义 Monoid 单位元 Id functor Endofunctor 组合为 Compose 或者说能实现 join :: F (F a) -> F a
    ashin
        140
    ashin  
       Sep 12, 2017
    尽管吐槽,反正 php 才是最好的语言
    weishu
        141
    weishu  
       Sep 12, 2017
    python 列表,不想用 len()函数,可以用 `__len__()`:

    ```python
    l = [1, 2, 3]
    print(l.__len()__)
    ```
    SharkU
        142
    SharkU  
       Sep 12, 2017
    吐槽完了不还得用、
    CodemonkeyM
        143
    CodemonkeyM  
       Sep 12, 2017 via Android
    @dikT 看到这样的 js 就想一行行的敲回车....
    goodspb
        144
    goodspb  
       Sep 12, 2017
    恩?看到楼主的头像,我还以为 V2EX 出了“点赞”的新功能。。
    kkzxak47
        145
    kkzxak47  
       Sep 12, 2017 via Android
    Python 真正的万物皆对象
    oneisall
        146
    oneisall  
       Sep 12, 2017
    我以为有点赞功能了。。。。。。。?????
    srlp
        147
    srlp  
       Sep 12, 2017 via iPhone   ❤️ 1
    len() 的问题,那是设计如此,楼上有个回复说得好,用的是 adapter 的思维方式。

    lambda 没啥好洗地的,python 的弱项。

    至于吐槽缩进的,不明白这有什么好黑的……有什么生产环境下的代码不缩进比缩进好吗?难道有括号的语言就不缩进了???说个笑话:左大括号写在行末还是另起一行。呵呵呵呵
    prenwang
        148
    prenwang  
       Sep 12, 2017
    说了半天,该回到主题了,快去找女朋友吧
    ioth
        149
    ioth  
       Sep 13, 2017
    js 和 py 吵什么?
    不还得用 php,工资有新 x 方,B 大青 D 的大 java 工资高吗?
    XIVN1987
        150
    XIVN1987  
       Sep 13, 2017
    lambda 方面 python 确实是弱项,,

    可这也并非全是缺点,,毕竟写一堆没名称的函数写的时候爽、以后维护就噩梦了。

    所以复杂的逻辑还是写在有名称的函数里比较好,,毕竟一个好的函数名能很好的说明函数的功能和意图
    sensui7
        151
    sensui7  
    OP
       Sep 13, 2017
    本帖不是引战的, 那没意义, 交流学习, 大鸣大放, 我的教材是 learn python in y minutes, 看了下列表推导式, 挺方便的. 有特色, len 函数的原因, 算是学习到了.

    至于 map 返回迭代器, 之前实在恼火遂搜索, SO 某个答案说的, 完整的列表和迭代器都有需求, 从迭代器产生列表容易, 从完整的列表产生迭代器较麻烦, 再加上性能原因, 它就被设计成返回迭代器, 我觉得也有道理.

    顺便鄙视下某个用户, 山寨我的头像, 这个用户完全就是个营销号的样子. 已经拉黑.
    crash
        152
    crash  
       Sep 13, 2017
    python 坑多了去了,不过还是比 es5 强,被 es6 碾压。
    kuro1
        153
    kuro1  
       Sep 13, 2017
    [ x*2 for x in arr]
    keisuu
        154
    keisuu  
       Sep 13, 2017
    python2 才是真正的坑多
    suntxy
        155
    suntxy  
       Sep 13, 2017
    不管你们怎么说,我开发快生态好支持多胶水语言瑞士军刀。
    bnm965321
        156
    bnm965321  
       Sep 27, 2019
    map 返回迭代器,是因为从 haskell 借鉴的 lazy evaluation。如果你用 js 的各种函数编程库,也会是这样的,比如 lodash。

    __len__ 是 python 最大的优点之一,这个“约定重于配置”的设计体现了 python 的一致性,推荐看 python 官方文档的 data model 一节,很多大佬都觉得 van guido 的语言设计水平是相当高的。
    1  2  
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   862 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 121ms · UTC 20:15 · PVG 04:15 · LAX 13:15 · JFK 16:15
    ♥ Do have faith in what you're doing.