Python论坛  - 讨论区

标题:看Python 程序员的进化

2011年02月09日 星期三 11:21

不久前,在互联网上出现了一篇有趣的文章,讲的是对于同一个问题,不同层次的程序员编出的Phthon代码显示出了不同的风格,代码都很简单,有趣。这篇文章的原始出处在 这里 ,我把它整理了一下,并修改了几处错误。

编程新手

      1
2
3
4
5
6
     
      
       def
      
      factorial
      
       (
      
      x
      
       )
      
      :
      
       if
      
      x ==
      
       0
      
      :
      
       return
      
      
       1
      
      
       else
      
      :
      
       return
      
      x
      
       *
      
      factorial
      
       (
      
      x -
      
       1
      
      
       )
      
      
       print
      
      factorial
      
       (
      
      
       6
      
      
       )
      
     

一年编程经验(学Pascal的)

      1
2
3
4
5
6
7
8
     
      
       def
      
      factorial
      
       (
      
      x
      
       )
      
      :
    result =
      
       1
      
      i =
      
       2
      
      
       while
      
      i
      
       <
      
      = x:
        result = result
      
       *
      
      i
        i = i +
      
       1
      
      
       return
      
      result
      
       print
      
      factorial
      
       (
      
      
       6
      
      
       )
      
     

一年编程经验(学C的)

      1
2
3
4
5
6
7
8
9
     
      
       def
      
      fact
      
       (
      
      x
      
       )
      
      :
      
       #{
      
      result = i =
      
       1
      
      
       ;
      
      
       while
      
      
       (
      
      i
      
       <
      
      = x
      
       )
      
      :
      
       #{
      
      result
      
       *
      
      = i
      
       ;
      
      i +=
      
       1
      
      
       ;
      
      
       #}
      
      
       return
      
      result
      
       ;
      
      
       #}
      
      
       print
      
      
       (
      
      fact
      
       (
      
      
       6
      
      
       )
      
      
       )
      
     

一年编程经验(读过  SICP )

      1
2
3
4
5
     
      @tailcall
      
       def
      
      fact
      
       (
      
      x, acc=
      
       1
      
      
       )
      
      :
      
       if
      
      
       (
      
      x
      
       >
      
      
       1
      
      
       )
      
      :
      
       return
      
      
       (
      
      fact
      
       (
      
      
       (
      
      x -
      
       1
      
      
       )
      
      ,
      
       (
      
      acc
      
       *
      
      x
      
       )
      
      
       )
      
      
       )
      
      
       else
      
      :
      
       return
      
      acc
      
       print
      
      
       (
      
      fact
      
       (
      
      
       6
      
      
       )
      
      
       )
      
     

一年编程经验(Python)

      1
2
3
4
5
6
     
      
       def
      
      Factorial
      
       (
      
      x
      
       )
      
      :
    res =
      
       1
      
      
       for
      
      i
      
       in
      
      
       xrange
      
      
       (
      
      
       2
      
      , x +
      
       1
      
      
       )
      
      :
        res
      
       *
      
      = i
      
       return
      
      res
      
       print
      
      Factorial
      
       (
      
      
       6
      
      
       )
      
     

懒惰的Python程序员

      1
2
3
     
      
       def
      
      fact
      
       (
      
      x
      
       )
      
      :
      
       return
      
      x
      
       >
      
      
       1
      
      
       and
      
      x
      
       *
      
      fact
      
       (
      
      x -
      
       1
      
      
       )
      
      
       or
      
      
       1
      
      
       print
      
      fact
      
       (
      
      
       6
      
      
       )
      
     

更懒的Python程序员

      1
2
     
      f =
      
       lambda
      
      x: x
      
       and
      
      x
      
       *
      
      f
      
       (
      
      x -
      
       1
      
      
       )
      
      
       or
      
      
       1
      
      
       print
      
      f
      
       (
      
      
       6
      
      
       )
      
     

2011年02月09日 星期三 11:24

Python 专家

        1
2
       
        fact =
        
         lambda
        
        x:
        
         reduce
        
        
         (
        
        
         int
        
        .
        
         __mul__
        
        ,
        
         xrange
        
        
         (
        
        
         2
        
        , x +
        
         1
        
        
         )
        
        ,
        
         1
        
        
         )
        
        
         print
        
        fact
        
         (
        
        
         6
        
        
         )
        
       

Python 黑客

        1
2
3
4
5
6
       
        
         import
        
        
         sys
        
        @tailcall
        
         def
        
        fact
        
         (
        
        x, acc=
        
         1
        
        
         )
        
        :
        
         if
        
        x:
        
         return
        
        fact
        
         (
        
        x.
        
         __sub__
        
        
         (
        
        
         1
        
        
         )
        
        , acc.
        
         __mul__
        
        
         (
        
        x
        
         )
        
        
         )
        
        
         return
        
        acc
        
         sys
        
        .
        
         stdout
        
        .
        
         write
        
        
         (
        
        
         str
        
        
         (
        
        fact
        
         (
        
        
         6
        
        
         )
        
        
         )
        
        +
        
         '
         
          \n
         
         '
        
        
         )
        
       

专家级程序员

        1
2
       
        
         from
        
        c_math
        
         import
        
        fact
        
         print
        
        fact
        
         (
        
        
         6
        
        
         )
        
       

大英帝国程序员

        1
2
       
        
         from
        
        c_maths
        
         import
        
        fact
        
         print
        
        fact
        
         (
        
        
         6
        
        
         )
        
       

Web 设计人员

        1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
       
        
         def
        
        factorial
        
         (
        
        x
        
         )
        
        :
        
         #-------------------------------------------------
        
        
         #--- Code snippet from The Math Vault          ---
        
        
         #--- Calculate factorial (C) Arthur Smith 1999 ---
        
        
         #-------------------------------------------------
        
        result =
        
         str
        
        
         (
        
        
         1
        
        
         )
        
        i =
        
         1
        
        
         #Thanks Adam
        
        
         while
        
        i
        
         <
        
        = x:
        
         #result = result * i  #It's faster to use *=
        
        
         #result = str(result * result + i)
        
        
         #result = int(result *= i) #??????
        
        result =
        
         str
        
        
         (
        
        
         int
        
        
         (
        
        result
        
         )
        
        
         *
        
        i
        
         )
        
        
         #result = int(str(result) * i)
        
        i = i +
        
         1
        
        
         return
        
        result
        
         print
        
        factorial
        
         (
        
        
         6
        
        
         )
        
       

Unix 程序员

         1
2
3
4
        
         
          import
         
         
          os
         
         
          def
         
         fact
         
          (
         
         x
         
          )
         
         :
         
          os
         
         .
         
          system
         
         
          (
         
         
          'factorial '
         
         +
         
          str
         
         
          (
         
         x
         
          )
         
         
          )
         
         fact
         
          (
         
         
          6
         
         
          )
         
        

Windows 程序员

         1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        
         NULL =
         
          None
         
         
          def
         
         CalculateAndPrintFactorialEx
         
          (
         
         dwNumber,
                                 hOutputDevice,
                                 lpLparam,
                                 lpWparam,
                                 lpsscSecurity,
         
          *
         
         dwReserved
         
          )
         
         :
         
          if
         
         lpsscSecurity
         
          !
         
         = NULL:
         
          return
         
         NULL
         
          #Not implemented
         
         dwResult = dwCounter =
         
          1
         
         
          while
         
         dwCounter
         
          <
         
         = dwNumber:
        dwResult
         
          *
         
         = dwCounter
        dwCounter +=
         
          1
         
         hOutputDevice.
         
          write
         
         
          (
         
         
          str
         
         
          (
         
         dwResult
         
          )
         
         
          )
         
         hOutputDevice.
         
          write
         
         
          (
         
         
          '
          
           \n
          
          '
         
         
          )
         
         
          return
         
         
          1
         
         
          import
         
         
          sys
         
         CalculateAndPrintFactorialEx
         
          (
         
         
          6
         
         ,
         
          sys
         
         .
         
          stdout
         
         , NULL, NULL, NULL,
         
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )

2011年02月09日 星期三 11:25

企业级程序员

        1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
       
        
         def
        
        
         new
        
        
         (
        
        cls,
        
         *
        
        args,
        
         **
        
        kwargs
        
         )
        
        :
        
         return
        
        cls
        
         (
        
        
         *
        
        args,
        
         **
        
        kwargs
        
         )
        
         
        
         class
        
        Number
        
         (
        
        
         object
        
        
         )
        
        :
        
         pass
        
         
        
         class
        
        IntegralNumber
        
         (
        
        
         int
        
        , Number
        
         )
        
        :
        
         def
        
        toInt
        
         (
        
        
         self
        
        
         )
        
        :
        
         return
        
        
         new
        
        
         (
        
        
         int
        
        ,
        
         self
        
        
         )
        
         
        
         class
        
        InternalBase
        
         (
        
        
         object
        
        
         )
        
        :
        
         def
        
        
         __init__
        
        
         (
        
        
         self
        
        , base
        
         )
        
        :
        
         self
        
        .
        
         base
        
        = base.
        
         toInt
        
        
         (
        
        
         )
        
         
        
         def
        
        getBase
        
         (
        
        
         self
        
        
         )
        
        :
        
         return
        
        
         new
        
        
         (
        
        IntegralNumber,
        
         self
        
        .
        
         base
        
        
         )
        
         
        
         class
        
        MathematicsSystem
        
         (
        
        
         object
        
        
         )
        
        :
        
         def
        
        
         __init__
        
        
         (
        
        
         self
        
        , ibase
        
         )
        
        :
        Abstract
 
    @
        
         classmethod
        
        
         def
        
        getInstance
        
         (
        
        cls, ibase
        
         )
        
        :
        
         try
        
        :
            cls.__instance
        
         except
        
        
         AttributeError
        
        :
            cls.__instance =
        
         new
        
        
         (
        
        cls, ibase
        
         )
        
        
         return
        
        cls.__instance
 
        
         class
        
        StandardMathematicsSystem
        
         (
        
        MathematicsSystem
        
         )
        
        :
        
         def
        
        
         __init__
        
        
         (
        
        
         self
        
        , ibase
        
         )
        
        :
        
         if
        
        ibase.
        
         getBase
        
        
         (
        
        
         )
        
        
         !
        
        =
        
         new
        
        
         (
        
        IntegralNumber,
        
         2
        
        
         )
        
        :
        
         raise
        
        
         NotImplementedError
        
        
         self
        
        .
        
         base
        
        = ibase.
        
         getBase
        
        
         (
        
        
         )
        
         
        
         def
        
        calculateFactorial
        
         (
        
        
         self
        
        , target
        
         )
        
        :
        result =
        
         new
        
        
         (
        
        IntegralNumber,
        
         1
        
        
         )
        
        i =
        
         new
        
        
         (
        
        IntegralNumber,
        
         2
        
        
         )
        
        
         while
        
        i
        
         <
        
        = target:
            result = result
        
         *
        
        i
            i = i +
        
         new
        
        
         (
        
        IntegralNumber,
        
         1
        
        
         )
        
        
         return
        
        result
 
        
         print
        
        StandardMathematicsSystem.
        
         getInstance
        
        
         (
        
        
         new
        
        
         (
        
        InternalBase,
        
         new
        
        
         (
        
        IntegralNumber,
        
         2
        
        
         )
        
        
         )
        
        
         )
        
        .
        
         calculateFactorial
        
        
         (
        
        
         new
        
        
         (
        
        IntegralNumber,
        
         6
        
        
         )
        
        
         )
        
       
引用来源

2011年02月09日 星期三 21:17

牛B

2011年02月17日 星期四 15:49

哇,这个说明一个道理,企业级程序员的代码好长

2011年04月12日 星期二 16:02

= =我想说…………我的ubuntu 11.04的FF4显示代码有问题………………

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2019

    京ICP备05028076号