f002489 发表于 2013-1-28 18:07:08

一个Python程序员的进化

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))
页: [1]
查看完整版本: 一个Python程序员的进化