一个Python程序员的进化
不久前,在互联网上出现了一篇有趣的文章,讲的是对于同一个问题,不同层次的Python程序员编出的Python代码显示出了不同的风格,代码都很简单,有趣。下面让我们一起来看看一个Python程序员是进阶的全过程。
AD:
?
不久前,在互联网上出现了一篇有趣的文章,讲的是对于同一个问题,不同层次的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))?
Python 专家
- fact?=?lambda?x:?reduce(int.__mul__,?xrange(2,?x?+?1),?1) ?
- print?fact(6)?
This function is very similar to?break).
?
?
赞