程序员的进化

不久前,在互联网上出现了一篇有趣的文章,讲的是对于同一个问题,不同层次的程序员编出的Phthon代码显示出了不同的风格,代码都很简单,有趣。这篇文章的原始出处在这里,我把它整理了一下,并修改了几处错误。

编程新手


  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) 

一年编程经验(读过 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.         #resultresult = 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.         ii = 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.             resultresult = result * i  
  41.             ii = i + new (IntegralNumber, 1)  
  42.         return result  
  43.    
  44. print StandardMathematicsSystem.getInstance(new (InternalBase,  
  45. new (IntegralNumber, 2))).calculateFactorial(new (IntegralNumber, 6)) 

译文链接:http://www.aqee.net/2011/02/09/the-evolution-of-a-python-programmer/

原文链接:程序员的进化

时间: 2024-10-22 15:33:29

程序员的进化的相关文章

程序员讨论《黑客帝国》(二)平衡和进化

   接上一篇<真实与虚拟>.      我有点纳闷,机器之主在他创造的虚拟世界中拥有无上的能力和权威,那他想解决任何问题不都轻轻松松吗?他想毁掉Zion,一个命令而已,就如同拔掉自家后院的杂草一样简单,又何必让机器如此大动周章,甚至屈膝让尼奥去帮忙?      这让我想起了一个有意思的问题,在我们设计的程序中,能量和物质是守恒的吗?      绝大多数人会拍脑袋说,当然不守恒,我设置一个变量value,可以让它等于任何值,从0到正溢出皆可.不过,当设计一款网游的时候,你会发现一些有趣的事实,

程序员正本清源式进化的意义

         在现实的社会中,或许觉得在当下的工作中,根本不需要什么算法,高级别线程处理,更不需弄清什么编译原理之类的.          确实,现实社会这部分工作大多不需要一般的程序员来做,程序员只要弄清怎么去调用别人的接口和方法就是了.          在社会化分工精细的今天,在中国大陆这种现象处处都是,于是大部分程序员就像机器一样盲目的工作下去,他们中间随着时间的迁移和固化的工作思维模式很难让自己在专业技术和专业理论上找寻突破,于是大家在固有的工作模式下,凭借自己多年的工作经历和经验

想成为优秀的程序员这些码德不能缺

我把这些看成是作为一个程序员的基本素质,多数是编码之外的事情: ●代码每天备份:(预防意外导致的任何损失) ●上传代码时写清楚log信息:(为维护这个模块的人着想,有可能是你自己) ●提供接口时不要把问题抛给使用接口的人,升级或者变更接口时不要删掉原来的接口:(为使用你接口的同事着想) ●变量命名要见名知意:(起码不能误导别人) ●在工程中新建一个doc文件夹将项目相关的文档放在该目录下,方便后面维护的人员理解项目和代码:(为维护这个模块的人着想,有可能是你自己) ●签署bug或者转办bug时写

爱喝啤酒的程序员如何学习数据结构

  如果在相亲时你说你是程序员,对方--一般是女的--会投来异样的眼光.程序员在其他人的眼中的形象一般是思维逻辑有问题,或木纳,或有点儿轴,或是书呆子.但凡事都在变化,程序员也在变化,英语中的Programmer这个词在国外现在流行写出Brogrammer.Brogrammer和Programmer的区别是,前者很时髦.很酷.Brogrammer有很多典型特征,比如说编程时戴墨镜,听摇滚乐,喜欢参加派对,喜欢啤酒等,如果你想知道你自己是否符合Brogrammer标准,你可以到这里测试一下自己.

何为程序员思维

看到这个题目,我想起了很多很多........... 首先,我说明我为什么要写这篇文章了. 一个原因是逸惋惜峥嵘岁月岁月稠,当初读大学的时候,学习计算机技术的课程,我过多的走向了两种极端的状况.一种情况,我愿意把他归结于本末倒置,例如我学习<C++面向对象程序设计>的时候,更多的是研究C++的语法,却忽略了面向对象的思想,到头来,C++语法学会了,但是最重要的面向对象却没有理解,也不知道他能够真正的做些什么.另一个情况,我把它理解为目标很宏大,理解很困难,例如,我学习软件过程的时候,开始,课程

不想早死的程序员们看过来!

5种原因加速你的衰老 小序: 早就听人说,"三十岁前你找病,三十岁后病找你".虽然大多数时候我都认为那是心理暗示的积累作用,但的确感觉在熬夜方面干不过比我年轻几岁的兄弟们了--其实也好解释,人越大越懒:p 刚才宅男在网上闲逛,发现一篇文章,文中提到五种生活方式会加速人的衰老,一开始以为是写给那些抽烟喝酒的人看的,结果看完之后感觉背上凉嗖嗖的--五种我都占全了,不,应该说是大多数程序员都占全了.赶紧转帖过来,提醒大家注意身体. 兄弟们,钱再多.地位再高,死了,都没了!我们的身体是花了数十

如何让程序员更容易的开发Web界面?重构SmartAdmin展示TinyUI框架

序言 如何让程序员更容易的开发Web界面,是一个持久的话题,所有的从事相关开发的公司都会碰到这个问题,并且被这个问题所深深困扰. Tiny框架也不得不直视这个问题,确实来说,想解决这个问题,也是非常有难度与深度的,业界也有各种各样的尝试,这也是有各种各样不同框架出现的原因. Tiny框架构建者认为,完全采用一种框架解决所有问题,是不现实的.而且即使目前找得到一种非常好的框架,暂时可以满足应用需要,但是随着技术的发展,业务的进化,就会慢慢变得不再满足业务需要.因此,Tiny框架构建从不再把做一套U

程序员必读书单(转)

  原文链接:http://lucida.me/blog/developer-reading-list/ 关于 本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必读书籍,以及延伸阅读.旨在成为最好最全面的程序员必读书单. 前言 Reading makes a full man; conference a ready man; and writing an exact man. Francis Bacon 优秀的程序员应该具备两方面能力: 良好的

未来的程序员面临着怎样的职业变化

作为程序员,我们总是身处于如万花筒般变化无常的技术世界里.我们可能也是那群能够最早感知到科技变化所带来巨大影响的人.然而,面对这一波又一波向我们袭来的技术变革,我们是否也能从中窥见一丝规律,从而使自己更好地应对未来呢?让我们打开脑洞,预测一下未来10年,程序员这个职业可能发生的变化. 程序员将变得更加全能 许多文章或艺术作品中将程序员的未来描绘得过于科幻或戏剧化,而基于我们看到以及正在发生着的现实,有一点却是不争的事实--程序员将变得更加全能.如果你是一名iOS程序员,你一定能感受到最近几年市场