• 一個Python程序員的進化

    15
    程序員 Python Ruby C/C++ 41199 次瀏覽
    不久前,在互聯網上出現了一篇有趣的文章,講的是對于同一個問題,不同層次的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))   //面向對象!

    相似問題

    相關經驗

    相關資訊

    相關文檔

  • sesese色