V2EX 首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
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
V2EX  ›  Python

js 党可以吐槽一下 Python 吗

  •  
  •   sensui7 · 127 天前 · 9328 次点击
    这是一个创建于 127 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    155 回复  |  直到 2017-09-13 19:15:26 +08:00
    1  2  
        101
    bramblex   127 天前
    @Kisesy

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

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

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

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

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

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

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

    ```
    [x * 2 for x in x in arr]
    ```
        116
    jimrok   127 天前
    @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 很烦.
        117
    Osk   127 天前 via Android
    python 的缩进最头疼的是这些情况:编辑器不支持自动缩进,以及混用编辑器导致 tab 和 space 灾难,以及在 v2 贴代码。。。
    其它情况还好,结构清晰,看着舒服。

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

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

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

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

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

    还做程序员干什么?卖红薯多好
        138
    Miy4mori   127 天前 via iPhone
    @kenshinji 那怕是不写代码才不会累哦
        139
    lrxiao   127 天前
    @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
        140
    ashin   127 天前
    尽管吐槽,反正 php 才是最好的语言
        141
    weishu   127 天前
    python 列表,不想用 len()函数,可以用 `__len__()`:

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

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

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

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

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

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

    顺便鄙视下某个用户, 山寨我的头像, 这个用户完全就是个营销号的样子. 已经拉黑.
        152
    crash   126 天前
    python 坑多了去了,不过还是比 es5 强,被 es6 碾压。
        153
    kuro1   126 天前
    [ x*2 for x in arr]
        154
    keisuu   126 天前
    python2 才是真正的坑多
        155
    suntxy   126 天前
    不管你们怎么说,我开发快生态好支持多胶水语言瑞士军刀。
    1  2  
    DigitalOcean
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   2197 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.0 · 72ms · UTC 11:23 · PVG 19:23 · LAX 03:23 · JFK 06:23
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1