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

最近刚学 python,以前学的是 JAVA,对比起来才知道 JAVA 真的语法有点啰嗦,那 python 有哪些令你感到优雅、简洁、易懂、而且强大的的代码片段可以分享分享

  •  
  •   lyning · Jul 23, 2015 · 13116 views
    This topic created in 4126 days ago, the information mentioned may be changed or developed.
    66 replies  •  2015-07-25 10:41:26 +08:00
    scream7
    scream7
    Jul 23, 2015
    1
    我就觉得列表切片,推倒简直是爽
    scream7
    scream7
    Jul 23, 2015
    2
    @scream7 推倒->推导
    loggerhead
    loggerhead
    Jul 23, 2015
    3
    ```c
    int swap(int *a, int *b) {
    int tmp = *a;
    *a = *b;
    *b = tmp;
    }
    ```

    等价于

    ```python
    a, b = b, a
    ```
    loggerhead
    loggerhead
    Jul 23, 2015
    4
    这缩进怎么回事?我明明加了空格
    chengzhoukun
    chengzhoukun
    Jul 23, 2015 via Android
    5
    @loggerhead 回帖不支持Markdown吧
    janxin
    janxin
    Jul 23, 2015❤️1
    6
    [a for a in b]
    Wyc0
    Wyc0
    Jul 23, 2015
    7
    @janxin 然而你这个跟直接用b没差别 2333
    zonghua
    zonghua
    Jul 23, 2015
    8
    javascript太自由,没约束
    s51431980
    s51431980
    Jul 23, 2015
    9
    java 想优雅,可以用 groovy
    matsuijurina
    matsuijurina
    Jul 23, 2015❤️2
    11
    看了这个标题我觉得楼主的JAVA肯定学得很好
    Ouyangan
    Ouyangan
    Jul 23, 2015
    12
    java菜鸟一枚, 至今未领略过优雅是何种滋味, 等我学好java再来搞搞python . 你们等着啊
    lzhtony
    lzhtony
    Jul 23, 2015
    13
    @loggerhead JAVA: a^=b^=a^=b
    yakczh
    yakczh
    Jul 23, 2015❤️2
    14
    ruby才是优雅,python那叫蛋疼
    cxe2v
    cxe2v
    Jul 23, 2015
    15
    @Ouyangan 来学C#,立马体验优雅
    unique
    unique
    Jul 23, 2015
    16
    @Ouyangan python比java语法简洁 有空可以试试jruby
    loggerhead
    loggerhead
    Jul 23, 2015
    17
    @chengzhoukun 确实不支持,但是 每一行的前置空格会被自动去掉
    @lzhtony 三句弄成一句,可读性太低了。python那种没见过挺多说“诶,这是什么神奇的语法”,你这个没见过就“这什么鬼。。”
    dddd
    dddd
    Jul 23, 2015
    18
    就语法上来讲…
    mingyun
    mingyun
    Jul 23, 2015
    19
    python复制粘贴代替比较蛋疼
    mingyun
    mingyun
    Jul 23, 2015
    20
    @hitluobin 这个很赞
    littleshy
    littleshy
    Jul 23, 2015
    21
    python的lambda表达式好直白,直接写个lambda算什么啊……
    yakczh
    yakczh
    Jul 23, 2015
    22
    写两行的lambda试试
    est
    est
    Jul 23, 2015
    23
    @yakczh 单行lambda可以组合成任意复杂的表达式。。只是很蛋痛而已。。。直接嵌套x1000
    seki
    seki
    Jul 23, 2015
    24
    numpy 程序 demo 写得很爽,就是 freeze 之后整个程序三百多兆
    想换个 C++ 什么的写一个,查了一下相关的库之后觉得还是算了 = =
    illuz
    illuz
    Jul 23, 2015
    25
    lzhtony
    lzhtony
    Jul 23, 2015
    26
    @loggerhead 写在swap函数里面谁知道2333
    个人认为代码的优雅,就是用较少的代码写出较好的效果(较高的效率 较多的功能...etc).
    bdbai
    bdbai
    Jul 24, 2015 via iPhone
    27
    @lzhtony 优雅也要建立在让读者恍然大悟的基础上吧
    mulog
    mulog
    Jul 24, 2015
    28
    list/dict comprehension
    lincanbin
    lincanbin
    Jul 24, 2015
    29
    Java的三目运算符:
    min=a<b?a:b;
    Python:
    min=a if a<b else b
    qw7692336
    qw7692336
    Jul 24, 2015
    30
    哈哈
    楼主被我介绍进来的室友

    @s51431980
    groovy就不是java了,现在对几门jvm语言都有点兴趣,像比较成熟的scala、还有Jetbrains的kotlin。用scala来写Android的话,可以用https://github.com/pocorall/scaloid 来简化代码。
    用kotlin来写Android,可以用https://github.com/JetBrains/anko 来简化代码。


    java8的lambda表达式和Stream API可以进一步让java代码进一步变得优雅。
    https://github.com/ReactiveX/RxJava 可以让事件响应变得很优雅,它的Android版https://github.com/ReactiveX/RxAndroid 可以用在Android上,gradle需要用https://github.com/evant/gradle-retrolambda 才能构建

    另外Android的
    https://github.com/excilys/androidannotations
    或者
    https://github.com/JakeWharton/butterknife
    可以大大地简化代码

    这是我的收集:
    http://www.v2ex.com/t/206402
    Wangxf
    Wangxf
    Jul 24, 2015
    31
    @zonghua 楼主说的是java,不是javascript,也是醉了。。。
    qw7692336
    qw7692336
    Jul 24, 2015
    32
    @matsuijurina
    楼主的标题是知乎体,好像也是我推荐他玩知乎的。


    @yakczh
    @unique
    中午看到有人吐槽Java的分层罗嗦
    http://www.v2ex.com/t/207800
    ruby on rails使用的叫涨血模型,这应该也是Java转ruby会感觉很爽的原因之一。
    我之前玩过playframework,据说也是类似ruby on rails的框架,框架也推荐使用类似rails的涨血模型。playframework是唯一一个让我感觉到用法比较优雅的Java框架,但由于Java语法本身的限制,没有办法做到更加优雅。我看到的一些简化Java代码的框架,大多数都只能采用annotation的方式进行简化。如上面的androidannotations 。
    sciooga
    sciooga
    Jul 24, 2015
    33
    @loggerhead 不支持 markdown 还没有 white-space: pre; 所以排版就乱了,我反馈过一次,没人理~
    binjoo
    binjoo
    Jul 24, 2015 via Android
    34
    真在学习python
    qw7692336
    qw7692336
    Jul 24, 2015
    35
    刚刚看到我之前写到一句自己非常喜欢到代码:
    i=i>0?-i:-i+1;
    把这段代码放到循环体里面一直迭代。
    hkongm
    hkongm
    Jul 24, 2015
    36
    说语法,不是ruby最牛么
    magicyu1986
    magicyu1986
    Jul 24, 2015
    37
    a < b < c
    publicID001
    publicID001
    Jul 24, 2015 via Android
    38
    @lzhtony 那交换两个对象试试呢?
    Tiande
    Tiande
    Jul 24, 2015
    39
    @Wyc0

    >>> [a for a in 'hahahha']
    ['h', 'a', 'h', 'a', 'h', 'h', 'a']
    Tiande
    Tiande
    Jul 24, 2015
    40
    @est lambda 一点都不优雅 ;(
    est
    est
    Jul 24, 2015❤️1
    41
    @dtdnqsb 为什么要这样做呢。。。

    >>> list('hahahha')
    ['h', 'a', 'h', 'a', 'h', 'h', 'a']

    其实大多数时候str可以直接遍历。比如提取字符种的数字部分:

    >>> filter(str.isdigit, 'abcde123fghi567')
    '123567'
    knightdf
    knightdf
    Jul 24, 2015
    42
    lz的java一定学的很好
    yuankui
    yuankui
    Jul 24, 2015
    43
    [1,2,3,4][::-1] => [4,3,2,1]

    map,reduce,filter
    thinkmore
    thinkmore
    Jul 24, 2015
    44
    你们所谓的优雅,只是代码简洁吗?过度的封装而已
    qw7692336
    qw7692336
    Jul 24, 2015
    45
    @thinkmore
    语法糖
    Tiande
    Tiande
    Jul 24, 2015
    46
    @est 窝已经 特别关注 你了!
    chaucerling
    chaucerling
    Jul 24, 2015
    47
    lz如果学学函数式吧,那才叫优雅
    googya
    googya
    Jul 24, 2015
    48
    啰嗦有啰嗦的好处, 灵活有灵活的优点
    codeyung
    codeyung
    Jul 24, 2015
    49
    没有太大可比性 想学啥学啥吧 Scala八错推荐
    lzhtony
    lzhtony
    Jul 24, 2015
    50
    @publicID001 对象确实没想到什么好方法.
    @bdbai 仔细思考后发现这个方法的奥妙不是更吸引人.
    灵活的语言一般来说代码更简洁优雅吧.python确实很有这种feel,C++也是.Java和C比起来很多语法都不支持,也就没有那么高的灵活性.
    quericy
    quericy
    Jul 24, 2015
    51
    @scream7 输入法暴露了什么233333
    cz208209
    cz208209
    Jul 24, 2015
    52
    为啥不说python简单
    robertlyc
    robertlyc
    Jul 24, 2015
    53
    那是因为没学过ruby
    publicID001
    publicID001
    Jul 24, 2015
    54
    @cxe2v 大一党,平时用的最多的是C++和VB.net,之前C#的课程大作业写了个简单的Online Judge,并不觉得优雅。。。比如:
    习惯了C++各种很爽的隐式转换,想在C#里写:
    int a;
    if(a)会报错,没有隐式转换,if((bool)a)都不行。。。
    vb.net都可以用 if 3 then 这种隐式转换。。。

    还有就是switch里每个标签后都要加break之类,反正以后除非必要,否则不想用C#了……
    theJian
    theJian
    Jul 24, 2015
    55
    Python >> Ruby >> CoffeeScript >> ?
    cutepig49
    cutepig49
    Jul 24, 2015
    56
    @publicID001 这是优点,不是缺点
    newborn
    newborn
    Jul 24, 2015
    57
    你可以再顺便了解下perl
    laoyuan
    laoyuan
    Jul 24, 2015
    58
    str[:-0] 这里就是个坑。
    NeoAtlantis
    NeoAtlantis
    Jul 24, 2015 via Android
    59
    a=[(1,2,3), (4,5,6)]
    for x,y,z in a:
    pass

    python确实不错……一个蒸汽轮机的课程设计作业……800多个参数直接用python算 完了还直接画图出报告……写程序连调试修改就花了两天时间……
    bramblex
    bramblex
    Jul 24, 2015
    60
    {-n的所有因数:-}
    factor n = [x| x <- [1..n], n `mod` x ==0]

    {-判断n是否为素数:-}
    isPrime n = [x | x <- [1..n], n `mod` x == 0] == [1, n]

    {-n的所有素因数:-}
    primeFactor n = [x| x <- [1..n], x /= 1, n `mod` x == 0, isPrime x]

    {-最后分解n的素因数-}
    decPrimeFactor 1 = []
    decPrimeFactor n = first:(decPrimeFactor (div n first))
    _ _ where first = head ( primeFactor n )
    bramblex
    bramblex
    Jul 24, 2015
    61
    @robertlyc

    默默看着Ruby原教旨主义者装逼
    msg7086
    msg7086
    Jul 24, 2015
    62
    @bramblex Ruby使用者高调装逼路过。
    纯函数式还是有点太可怕了……写库还好,写逻辑头大。
    bramblex
    bramblex
    Jul 24, 2015
    63
    @msg7086

    Ruby用过,Ruby本身挺喜欢的。讨厌Rails
    msg7086
    msg7086
    Jul 24, 2015
    64
    @bramblex
    Rails其实还好,初创公司大杀器,常用组件全备齐了,一个框架足够用到上市了。
    当然关键是写的人要靠谱,以及测试代码都要跟上。
    现在在公司里处理的一个Rails应用,完全是一堆不会Ruby和Rails的人硬写的,还没什么测试,简直要疯。
    bramblex
    bramblex
    Jul 24, 2015
    65
    @msg7086

    从客观上来讲,Rails还是非常适合创业公司前期用来快速搭建网站的。
    我也拿Rails做过项目,确实非常方便快捷,但是主观上依旧不喜欢。不喜欢是指不喜欢使用。不过对它的各种设计和还是非常有兴趣的。
    lancegin
    lancegin
    Jul 25, 2015
    66
    对列表数据进行处理:map(lambda item:deal(item), list)
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2508 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 108ms · UTC 00:56 · PVG 08:56 · LAX 16:56 · JFK 19:56
    ♥ Do have faith in what you're doing.