Il n'y a pas longtemps, un article intéressant est apparu sur Internet, montrant que pour le même problème, des programmeurs de différents niveaux écrivent du code Python dans des styles différents. Le code est tout à fait simple et intéressant.

Programmeur débutant

def factorial(x):
    if x == 0:
        return 1
    else:
        return x * factorial(x - 1)
print factorial(6)

Un an d'expérience en programmation (a appris Pascal)

def factorial(x):
    result = 1
    i = 2
    while i <= x:
        result = result * i
        i = i + 1
    return result
print factorial(6)

Un an d'expérience en programmation (a appris C)

def fact(x): #{
    result = i = 1;
    while (i <= x): #{
        result *= i;
        i += 1;
    #}
    return result;
#}
print(fact(6))

Un an d'expérience en programmation (a lu SICP)

@tailcall
def fact(x, acc=1):
    if (x > 1): return (fact((x - 1), (acc * x)))
    else: return acc
print(fact(6))

Un an d'expérience en programmation (Python)

def Factorial(x):
    res = 1
    for i in xrange(2, x + 1):
        res *= i
    return res
print Factorial(6)

Programmeur Python paresseux

def fact(x):
    return x > 1 and x * fact(x - 1) or 1
print fact(6)

Programmeur Python plus paresseux

f = lambda x: x and x * f(x - 1) or 1
print f(6)

Expert Python

import operator as op
import functional as f
fact = lambda x: f.foldl(op.mul, 1, xrange(2, x + 1))
print fact(6)

Hacker 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')

Programmeur de niveau expert

import c_math
fact = c_math.fact
print fact(6)

Programmeur de l'Empire britannique

import c_maths
fact = c_maths.fact
print fact(6)

Designer web

def factorial(x):
    #-------------------------------------------------
    #--- 这段代码是从 Math Vault 那弄过来滴---
    #--- 计算阶乘 (C)亚瑟·史密斯 1999年---
    #-------------------------------------------------
    result = str(1)
    i = 1 #谢谢亚当
    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)

Programmeur Unix

import os
def fact(x):
    os.system('factorial ' + str(x))
fact(6)

Programmeur 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)

Programmeur d'entreprise

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))
[Original anglais :L'évolution d'un programmeur Python ]