死在expression下,做鬼也風流

Python/PHP/Perl 开发与设计
回复
头像
millenniumdark
论坛版主
帖子: 4159
注册时间: 2005-07-02 14:41
系统: Ubuntu 14.04 (Kylin)
送出感谢: 42 次
接收感谢: 9 次
联系:

死在expression下,做鬼也風流

#1

帖子 millenniumdark » 2012-10-03 12:52

好吧,其實偶一直有不肯寫if-for statement的怪癖。

代码: 全选

flatten_diffs = lambda diffs: tuple(
    chain.from_iterable(
      ( t
        if isinstance(t[0], tuple)
        else (t,))
      for t in diffs))
lambda用來弄短函數,這個還不算長吧。

下面這個就表明誓死不寫if-for statement的決心:

代码: 全选

swap_insert = lambda diffs: (
    ( diffs[t+1]
      if
        t != (len(diffs) - 1)
        and all(
          (diffs[t][0] == 0, is_not_important(diffs[t]), diffs[t+1][0] == 1))
      else (
        diffs[t-1]
        if 
          t != 0
          and all(
            (diffs[t][0] == 1, diffs[t-1][0] == 0, is_not_important(diffs[t-1])))
        else (diffs[t])))
    for t in range(len(diffs)))

上面用了lambda,爲了強調是expression。實際代碼的時候我還是乖乖寫成def的,因爲要用doctest,也因爲python的lambda不支持定義符號,有時候不方便。

PEP 8裏沒講這種情況該怎麼縮進的?上面的縮進是我自己想的,求吐槽。這種複雜的conditional experssion和generator comprehension該怎麼縮進,求指點。
262652047
帖子: 495
注册时间: 2008-01-04 9:55
系统: Ubuntu 12.10
来自: Beijing /PRC
送出感谢: 12 次
接收感谢: 3 次
联系:

Re: 死在expression下,做鬼也風流

#2

帖子 262652047 » 2012-10-04 9:15

lambda写这么长应该用def了吧
还在纠结发行版和版本号的基本上是新手
$.get('better.life',
  {study:hard,work:hard},
    function(reality){
      return Math.random(reality)
    })
头像
cuihao
帖子: 4793
注册时间: 2008-07-24 11:33
来自: 郑州
送出感谢: 1 次
接收感谢: 89 次
联系:

Re: 死在expression下,做鬼也風流

#3

帖子 cuihao » 2012-10-04 9:29

一点都不符合python精神,人家管你怎么缩进 :em04
求人不如求它仨: 天蓝的Wiki 屎黄的Wiki 绿
Site: CUIHAO.TK    Twitter: @cuihaoleo
Machine: Athlon64 X2 5200+ / 2x2GB DDR2-800 / GeForce GTS 450
AD: ~まだ見ぬ誰かの笑顔のために~
回复

回到 “Python/Php/Perl”