`
idning
  • 浏览: 139576 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一个Python程序员的进化

 
阅读更多

不久前,在互联网上出现了一篇有趣的文章,讲的是对于同一个问题,不同层次的Python程序员编出的Python代码显示出了不同的风格,代码都很简单,有趣。下面让我们一起来看看一个Python程序员是进阶的全过程。

AD:

 

不久前,在互联网上出现了一篇有趣的文章,讲的是对于同一个问题,不同层次的Python程序员编出的Python代码显示出了不同的风格,代码都很简单,有趣。

编程新手

  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) 

一年编程经验(学C的)

  1. def fact(x): #{  
  2.     result = i = 1;  
  3.     while (i <= x): #{  
  4.         result *= i;  
  5.         i += 1;  
  6.     #}  
  7.     return result;  
  8. #}  
  9. print(fact(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.         #result = 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.         i = 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.             result = result * i  
  41.             i = i + new (IntegralNumber, 1)  
  42.         return result  
  43.    
  44. print StandardMathematicsSystem.getInstance(new (InternalBase,  
  45. new (IntegralNumber, 2))).calculateFactorial(new (IntegralNumber, 6)) 


自己还是初学者
一年编程经验(读过 SICP)  用的是尾递归

Python 专家

  1. fact = lambda x: reduce(int.__mul__, xrange(2, x + 1), 1)  
  2. print fact(6

用的是reduce.



学习到:
xrange([start]stop[step])

This function is very similar to range(), but returns an “xrange object” instead of a list. This is an opaque sequence type which yields the same values as the corresponding list, without actually storing them all simultaneously. The advantage of xrange() over range() is minimal (since xrange() still has to create the values when asked for them) except when a very large range is used on a memory-starved machine or when all of the range’s elements are never used (such as when the loop is usually terminated with break).

 

 

分享到:
评论

相关推荐

    用Python实现斐波那契(Fibonacci)函数

    最近在玩Python,在粗略的看了一下Learning Python和Core Python之后,偶然发现网上有个帖子Python程序员的进化写的很有意思。于是打算仿照一篇,那篇帖子用了十余种方法完成一个阶乘函数,我在这里会用九种不同的...

    Python3-cookbook

    自从 2008 年以来,Python 3 横空出世并慢慢进化。Python 3 的流行一直被认为需要很长一段时间。 事实上,到我写这本书的 2013 年,绝大部分的 Python 程序员仍然在生产环境中使用的是版本 2 系列, 最主要是因为 ...

    Python-一个贪吃蛇游戏包括三个AI版本采用pythonpygame实现

    在本项目中,我们探索的是一个使用Python编程语言和Pygame库实现的贪吃蛇游戏。这个项目不仅提供了一个基础的贪吃蛇游戏版本...对于想要进入游戏开发领域或对AI感兴趣的Python程序员来说,这是一个极具价值的实践案例。

    如何成为一名C++程序员

    成为一名C++程序员是一个逐步深入的过程,需要掌握编程基础、提高编程技巧,以及不断提升设计思想。以下是一份详细的指南: 1. **入门阶段**: - 初步理解编程思维,通过编写小程序解决简单问题。选择合适的入门...

    十分钟看懂Python

    11. 社区支持:Python有一个庞大而活跃的社区,提供了大量的文档、教程和代码库,对学习和使用Python特别有帮助。 12. 应用范围:Python广泛应用于系统管理任务、Web开发、数据分析、人工智能、科学计算等领域,其...

    Python库 | bio-1.1.8-py3-none-any.whl

    对于从事生物信息学研究或相关应用开发的Python程序员来说,这个库可能会提供有价值的工具和函数。不过,要充分利用这个库,需要了解其具体的API和功能,这通常需要查阅官方文档或者从源代码中学习。

    程序员如何真正的成长

    作为一个程序员,真正的成长不仅仅是掌握更多的编程语言或框架,而是涵盖了技术、思维、沟通、学习能力等多方面的提升。本文将围绕这些关键点展开,探讨程序员如何实现自我进化,成为更优秀的开发者。 首先,扎实的...

    《Python编程之美——带你进入Python语言世界》课程设计大纲参考.pdf

    Python语言是一种高级、解释型的编程语言,它具有简洁、易学、强大等特点,广泛应用于数据科学、人工智能、网络爬虫、自动化操作等领域。本课程设计大纲旨在引导学生入门Python语言,掌握Python的基本语法、标准类型...

    Python库 | phylofisher-1.0.13-py3-none-any.whl

    同时,它还支持命令行界面,方便非Python程序员使用。 6. **安装与依赖**:Phylofisher的安装非常简便,只需通过Python的pip工具即可完成。它依赖于其他生物信息学工具,如HMMER和MAFFT,这些依赖项会在安装过程中...

    Python3.9.1中文文档.pdf

    Python 3.9.1是Python编程语言的一个主要版本更新,包含了众多的新特性和改进。在阅读这份Python 3.9.1的中文官方文档时,我们可以了解到从3.9版本开始引入的一些关键变化。 首先,文档中提到的Python 3.9.1的新...

    python官方3.0a3版本msi安装包

    Python 3.0是Python语言的一个重大更新,引入了许多与2.x版本不兼容的变化,旨在提高语言的清晰度和现代性。 这个"python-3.0a3.msi"安装包是专为Windows操作系统设计的,采用Microsoft Installer(MSI)格式,便于...

    python-3.8.0-amd64.rar

    在标题"python-3.8.0-amd64.rar"中,我们看到的是Python 3.8.0的一个AMD64架构的版本,这意味着它是为64位操作系统编译的,比如Windows、Linux或macOS。RAR是一种常见的文件压缩格式,通常用于存储多个文件在一个...

    Python-v3.8.2.tgz

    Python 3.8.2是Python编程语言的一个重要版本,专为CentOS 7操作系统设计。这个版本在Python的进化历程中引入了诸多改进和新特性,使得它更加强大且适应现代开发需求。以下是对Python 3.8.2及其在CentOS 7上安装与...

    python3‐cookbook 2.0.0 文档

    然而,随着时间的推移,作者鼓励所有Python程序员拥抱Python 3,因为它是Python语言的未来。 在版权信息方面,本书版权归属于作者David Beazley和Brian K. Jones,译者熊能获得了翻译该书的权利,并将它奉献给了...

    Python是什么?Python有什么特点?.docx

    这个有趣的名字现在已经成为一个标志,而Python的标识则是一条缠绕的蓝白双蛇,象征着其灵活、强大且不断进化的特性。 总的来说,Python是一种多用途、高效、易学且社区活跃的语言,它在软件开发、科学研究、数据...

    Python基于遗传算法实现智能排课系统源码.zip

    在这个"Python基于遗传算法实现智能排课系统源码.zip"压缩包中,包含的是一个利用Python开发的智能排课系统,该系统应用了遗传算法来解决复杂的课程安排问题。遗传算法是一种模拟自然选择和遗传机制的优化方法,常...

    python for rhino教程

    作为迭代、生成、分析和设计进化的一个工具,编程的作用是无限的。此外,编程还提供了一种新的语言来与世界沟通,因为几乎每个学科,从科学、工程到艺术,都在使用代码作为新的、先进的沟通媒介。这本教程应该能够...

    Python发展史-一门编程语言的起源.pdf

    Python的另一个重要特点是它的模块化设计,这解决了ABC语言的可扩展性问题。Python的模块系统允许开发者将代码组织成可重用的部分,方便添加新功能。同时,Python提供了丰富的标准库,涵盖了从网络通信到文件处理的...

Global site tag (gtag.js) - Google Analytics