不要温和的走进那个良夜
Do not go gentle into that good night

一个Python程序员的进化

不久前,在互联网上出现了一篇有趣的文章,讲的是对于同一个问题,不同层次的Python程序员编出的Python代码显示出了不同的风格,代码都很简单,非常有意思呢

编程新手

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

一年编程经验(学Pascal的)

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

一年编程经验(学C的)

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

一年编程经验(读过 SICP)

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

一年编程经验(Python)

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

懒惰的Python程序员

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

更懒的Python程序员

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

Python 专家

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

Python 黑客

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

专家级程序员

  1. from c_math import fact     
  2. print fact(6)   

大英帝国程序员

  1. from c_maths import fact     
  2. print fact(6)   

Web 设计人员

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

Unix 程序员

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

Windows 程序员

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

企业级程序员

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

你属于哪一类呢?

赞(0)
未经允许不得转载:林枫紫涵 » 一个Python程序员的进化

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址