六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 30|回复: 0

一个Python程序员的进化

[复制链接]

升级  55.33%

110

主题

110

主题

110

主题

举人

Rank: 3Rank: 3

积分
366
 楼主| 发表于 2013-1-28 18:07:08 | 显示全部楼层 |阅读模式
http://developer.51cto.com/art/201102/244479.htm
 
http://www.pythonclub.org/hacks/evolution
 
 
不久前,在互联网上出现了一篇有趣的文章,讲的是对于同一个问题,不同层次的Python程序员编出的Python代码显示出了不同的风格,代码都很简单,有趣。
编程新手

  • def factorial(x):  
  •     if x == 0:  
  •         return 1  
  •     else:  
  •         return x * factorial(x - 1)  
  • print factorial(6) 
一年编程经验(学Pascal的)

  • def factorial(x):  
  •     result = 1 
  •     i = 2 
  •     while i <= x:  
  •         resultresult = result * i  
  •         ii = i + 1  
  •     return result  
  • print factorial(6) 
一年编程经验(学C的)

  • def fact(x): #{  
  •     result = i = 1;  
  •     while (i <= x): #{  
  •         result *= i;  
  •         i += 1;  
  •     #}  
  •     return result;  
  • #}  
  • print(fact(6)) 
一年编程经验(读过 SICP)

  • @tailcall  
  • def fact(x, acc=1):  
  •     if (x > 1): return (fact((x - 1), (acc * x)))  
  •     else:       return acc  
  • print(fact(6)) 
一年编程经验(Python)

  • def Factorial(x):  
  •     res = 1 
  •     for i in xrange(2, x + 1):  
  •         res *= i  
  •     return res  
  • print Factorial(6) 
懒惰的Python程序员

  • def fact(x):  
  •     return x > 1 and x * fact(x - 1) or 1  
  • print fact(6) 
更懒的Python程序员

  • f = lambda x: x and x * f(x - 1) or 1  
  • print f(6) 
Python 专家

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

  • 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') 
专家级程序员

  • from c_math import fact  
  • print fact(6) 
大英帝国程序员

  • from c_maths import fact  
  • print fact(6) 
Web 设计人员

  • 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 程序员

  • import os  
  • def fact(x):  
  •     os.system('factorial ' + str(x))  
  • fact(6) 
Windows 程序员

  • 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) 
企业级程序员


  • 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))
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表