首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

一个Python软件工程师的进化

2012-10-11 
一个Python程序员的进化不久前,在互联网上出现了一篇有趣的文章,讲的是对于同一个问题,不同层次的Python程

一个Python程序员的进化

不久前,在互联网上出现了一篇有趣的文章,讲的是对于同一个问题,不同层次的Python程序员编出的Python代码显示出了不同的风格,代码都很简单,有趣。下面让我们一起来看看一个Python程序员是进阶的全过程。

AD:

?

不久前,在互联网上出现了一篇有趣的文章,讲的是对于同一个问题,不同层次的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. ? ?
  4. class?Number(object): ?
  5. ????pass?
  6. ? ?
  7. class?IntegralNumber(int,?Number): ?
  8. ????def?toInt(self): ?
  9. ????????return?new?(int,?self) ?
  10. ? ?
  11. class?InternalBase(object): ?
  12. ????def?__init__(self,?base): ?
  13. ????????self.base?=?base.toInt() ?
  14. ? ?
  15. ????def?getBase(self): ?
  16. ????????return?new?(IntegralNumber,?self.base) ?
  17. ? ?
  18. class?MathematicsSystem(object): ?
  19. ????def?__init__(self,?ibase): ?
  20. ????????Abstract ?
  21. ? ?
  22. ????@classmethod?
  23. ????def?getInstance(cls,?ibase): ?
  24. ????????try: ?
  25. ????????????cls.__instance ?
  26. ????????except?AttributeError: ?
  27. ????????????cls.__instance?=?new?(cls,?ibase) ?
  28. ????????return?cls.__instance ?
  29. ? ?
  30. class?StandardMathematicsSystem(MathematicsSystem): ?
  31. ????def?__init__(self,?ibase): ?
  32. ????????if?ibase.getBase()?!=?new?(IntegralNumber,?2): ?
  33. ????????????raise?NotImplementedError ?
  34. ????????self.base?=?ibase.getBase() ?
  35. ? ?
  36. ????def?calculateFactorial(self,?target): ?
  37. ????????result?=?new?(IntegralNumber,?1) ?
  38. ????????i?=?new?(IntegralNumber,?2) ?
  39. ????????while?i?<=?target: ?
  40. ????????????result?=?result?*?i ?
  41. ????????????i?=?i?+?new?(IntegralNumber,?1) ?
  42. ????????return?result ?
  43. ? ?
  44. print?StandardMathematicsSystem.getInstance(new?(InternalBase, ?
  45. new?(IntegralNumber,?2))).calculateFactorial(new?(IntegralNumber,?6))?


自己还是初学者
一年编程经验(读过 SICP) ?用的是尾递归

Python 专家

  1. fact?=?lambda?x:?reduce(int.__mul__,?xrange(2,?x?+?1),?1) ?
  2. print?fact(6)?

用的是reduce.



学习到:
xrange([start],?stop[,?step])

This function is very similar to?break).

?

?

热点排行