不久前,在互联网上出现了一篇有趣的文章,讲的是对于同一个问题,不同层次的程序员编出的Phthon代码显示出了不同的风格,代码都很简单,有趣。这篇文章的原始出处在这里,我把它整理了一下,并修改了几处错误。
编程新手
1
2
3
4
5
6
def factorial( x) :
if x == 0 :
return 1
else :
return x * factorial( x - 1 )
print factorial( 6 )
一年编程经验(学Pascal的)
1
2
3
4
5
6
7
8
def factorial( x) :
result = 1
i = 2
while i < = x:
result = result * i
i = i + 1
return result
print factorial( 6 )
一年编程经验(学C的)
1
2
3
4
5
6
7
8
9
def fact( x) : #{
result = i = 1 ;
while ( i < = x) : #{
result * = i;
i += 1 ;
#}
return result;
#}
print ( fact( 6 ) )
一年编程经验(读过 SICP)
1
2
3
4
5
@tailcall
def fact( x, acc=1 ) :
if ( x > 1 ) : return ( fact( ( x - 1 ) , ( acc * x) ) )
else : return acc
print ( fact( 6 ) )
一年编程经验(Python)
1
2
3
4
5
6
def Factorial( x) :
res = 1
for i in xrange ( 2 , x + 1 ) :
res * = i
return res
print Factorial( 6 )
懒惰的Python程序员
1
2
3
def fact( x) :
return x > 1 and x * fact( x - 1 ) or 1
print fact( 6 )
更懒的Python程序员
1
2
f = lambda x: x and x * f( x - 1 ) or 1
print f( 6 )
Python 专家
1
2
fact = lambda x: reduce ( int .__mul__ , xrange ( 2 , x + 1 ) , 1 )
print fact( 6 )
Python 黑客
1
2
3
4
5
6
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 ' )
专家级程序员
1
2
from c_math import fact
print fact( 6 )
大英帝国程序员
1
2
from c_maths import fact
print fact( 6 )
Web 设计人员
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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 程序员
1
2
3
4
import os
def fact( x) :
os .system ( 'factorial ' + str ( x) )
fact( 6 )
Windows 程序员
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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)
企业级程序员
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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 ) )