转自:http://www.oschina.net/news/15319/evolution-of-a-python-programmer

在综合音信栏中看到这么些帖子,觉得很有趣,转上来,最前面丰硕些自身的知识补遗~~~

==========================================================================================

 

本文是从 The 埃沃lution of a Python Programmer 那篇小说翻译而来。

近年来,在网络上出现了一篇有趣的篇章,讲的是对此同3个标题,不一致层次的程序员编出的Phthon代码显示出了区别的作风,代码都很简单,有趣。那篇文章的原有出处在这里,我把它整理了须臾间,并修改了几处错误。

编制程序新手

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:
    result = result * i
    i = 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)

 

大United Kingdom程序员

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

lambda使用:

python
lambda是在python中选取lambda来创建匿名函数,而用def创设的措施是出名称的

1 python
lambda会成立1个函数对象,但不会把这么些函数对象赋给3个标识符,而def则会把函数对象赋值给八个变量。

2 python lambda它只是三个表明式,而def则是3个说话。

下面是python lambda的格式

lambda x:表达式

lambda表明式在“:”后不得不有二个表达式。也正是说,在def中,用return能够回来的也能够放在lambda前边,无法用return重临的也不能够定义在python
lambda前边。因而,像if或for或print那种话语就不能用于lambda中,lambda一般只用来定义简单的函数。

reduce()函数

reduce(func,seq[,init]),用二元函数func对队列seq中的成分进行处理,每回处理多少个数据项(三个是前次拍卖的结果,2个是类别中的下二个要素),如此频仍的递归处理,最后对一切连串求出三个单纯的重回值。

该函数最多3个参数,第一个参数为二元函数,第3个参数必须可迭代,能够没有第四个参数

例如:

reduce(lambda x, y: x+y, [1, 2, 3, 4,
5]) 计算的是1+2+3+4+5

reduce(lambda x, y: x+y, [1, 2, 3, 4,
5], 2) 计算的是2+1+2+3+4+5

网站地图xml地图