一个 Python 程序员的进化 - 开源中国社区
一个 Python 程序员的进化
红薯 2012年04月09日

一个 Python 程序员的进化

红薯 红薯 发布于2012年04月09日 收藏 29 评论 35

【腾讯云】如何快速搭建微信小程序?>>>  

不久前,在互联网上出现了一篇有趣的文章,讲的是对于同一个问题,不同层次的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. 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,
  36. new (IntegralNumber, 2))).calculateFactorial(new (IntegralNumber, 6))
本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:一个 Python 程序员的进化
分享
评论(35)
最新评论
0
这尼玛,全家都是程序员。。。。。。太牛了。。
0
有意思……
0
哎传销吗???
0
"大英帝国程序员"什么意思? 没明白
0

引用来自“Raymin”的评论

这排版,太适合 Python 了。

参见:http://my.oschina.net/kaixindewo/blog/48695
0
MSD基数排序(radixsort)
C 30 line
Java 55 line
C++ 15-25 line
Python 9 line
0
Web设计人员,笑喷了。
0

引用来自“小男人”的评论

为什么没有PHP程序员的

Web设计人员。吼吼
0
这个新手版的很标准,没看出哪新。
0
是不排版把给缩进弄丢了
0

引用来自“Nemesis_E”的评论

这个都是几年前的东西了啊 ...

+1 去年OSC也发过一次 这势头是要年年发啊
0
这个都是几年前的东西了啊 ...
0
给企业级程序员跪了
0

引用来自“小男人”的评论

为什么没有PHP程序员的

都是程序员 别分类!
0
为什么没有PHP程序员的
0
代码一马哈啊
0
新手一来就用递归?
0

引用来自“开心303”的评论

引用来自“後方之水”的评论

没有缩进,全部不及格

参见:http://my.oschina.net/kaixindewo/blog/48695

+1
0
有点意思!!!!
0
这排版,太适合 Python 了。
顶部