[关闭]
@bergus 2015-12-02T14:00:45.000000Z 字数 2833 阅读 1192

python笔记之编程风格大比拼

python 编程风格


虽然我的python age并不高,但我仍然愿意将我遇到的或者我写的有趣的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. result = result * i
  6. i = 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(

第一年刚学完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)

爱偷懒的程序员

  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. import operator as op
  2. import functional as f
  3. fact = lambda x: f.foldl(op.mul, 1, xrange(2, x + 1))
  4. 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. import c_math
  2. fact = c_math.fact
  3. print fact(6)

英语系的专家级程序员

  1. import c_maths
  2. fact = c_maths.fact
  3. 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, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)

公司里的程序员

  1. def new(cls, *args, **kwargs):
  2. return cls(*args, **kwargs)
  3. class Number(object):
  4. pass
  5. class IntegralNumber(int, Number):
  6. def toInt(self):
  7. return new (int, self)
  8. class InternalBase(object):
  9. def __init__(self, base):
  10. self.base = base.toInt()
  11. def getBase(self):
  12. return new (IntegralNumber, self.base)
  13. class MathematicsSystem(object):
  14. def __init__(self, ibase):
  15. Abstract
  16. @classmethod
  17. def getInstance(cls, ibase):
  18. try:
  19. cls.__instance
  20. except AttributeError:
  21. cls.__instance = new (cls, ibase)
  22. return cls.__instance
  23. class StandardMathematicsSystem(MathematicsSystem):
  24. def __init__(self, ibase):
  25. if ibase.getBase() != new (IntegralNumber, 2):
  26. raise NotImplementedError
  27. self.base = ibase.getBase()
  28. def calculateFactorial(self, target):
  29. result = new (IntegralNumber, 1)
  30. i = new (IntegralNumber, 2)
  31. while i <= target:
  32. result = result * i
  33. i = i + new (IntegralNumber, 1)
  34. return result
  35. print StandardMathematicsSystem.getInstance(new (InternalBase, new (IntegralNumber, 2))).calculateFactorial(new (IntegralNumber, 6))
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注