搞笑的程序猿:看看你是哪种Python程序员

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

编程新手

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

大英帝国程序员

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)) //面向对象,但就此题来说,又长又臭。
(0)

相关推荐

  • 搞笑的程序猿:看看你是哪种Python程序员

    不久前,在互联网上出现了一篇有趣的文章,讲的是对于同一个问题,不同层次的Python程序员编出的Python代码,显示出了不同的风格,代码都很简单,有趣.下面让我们一起来看看一个Python程序猿进阶的全过程吧.(偷笑) 编程新手 def factorial(x): if x == 0: return 1 else: return x * factorial(x - 1) //不简单啊,迭代,新手哦. print factorial(6) 一年编程经验(学Pascal的) def factori

  • 一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)

    松哥的书里边,其实有涉及到 Vue,但是并没有详细说过,原因很简单,Vue 的资料都是中文的,把 Vue.js 官网的资料从头到尾浏览一遍该懂的基本就懂了,个人感觉这个是最好的 Vue.js 学习资料 ,因此在我的书里边就没有多说.但是最近总结小伙伴遇到的问题,感觉很多人对前后端分离开发还是两眼一抹黑,所以今天松哥想和大家聊一下前后端分离以及 Vue.js 的一点事,算是一个简单的入门科普吧. 前后端不分 后端模板:Jsp.FreeMarker.Velocity 前端模板:Thymeleaf 前

  • 对python程序内存泄漏调试的记录

    问题描述 调试python程序时,用下面这段代码,可以获得进程占用系统内存值.程序跑一段时间后,就能画出进程对内存的占用情况. def memory_usage_psutil(): # return the memory usage in MB import psutil,os process = psutil.Process(os.getpid()) mem = process.memory_info()[0] / float(2 ** 20) return mem 发现进程的内存占用一直再上

  • python程序文件扩展名知识点详解

    python程序文件的扩展名称是什么 python程序的扩展名有.py..pyc..pyo和.pyd..py是源文件,.pyc是源文件编译后的文件,.pyo是源文件优化编译后的文件,.pyd是其他语言写的python库. 扩展名 在写Python程序时我们常见的扩展名是py, pyc,其实还有其他几种扩展名.下面是几种扩展名的用法. py:py就是最基本的源码扩展名.windows下直接双击运行会调用python.exe执行. pyw:pyw是另一种源码扩展名,跟py唯一的区别是在windows

  • 详解如何在Java中调用Python程序

    Java中调用Python程序 1.新建一个Maven工程,导入如下依赖 <dependency> <groupId>org.python</groupId> <artifactId>jython-standalone</artifactId> <version>2.7.0</version> </dependency> 2.在java中直接执行python代码片段 import org.python.util

  • pyinstaller将python程序打包为可执行文件

    目录 前言 pyinstaller简介 pyinstaller下载 pyinstaller使用 准备好程序代码 打包程序 小结 前言 对于专业的python程序员来说,python打包工具或许用得并不多.但是对于非专业人士来说,你给他写个python项目,要让他安装python.安装依赖等等,估计人都会抓狂.或者说,如果你不想暴露自己的项目代码,python打包工具就派上用场了,市面上有多种打包工具,这里就讲讲最常用的pyinstaller的使用方法吧. pyinstaller简介 pyinst

  • 值得Java程序猿阅读的书籍

    学习的最好途径就是看书 "学习的最好途径就是看书",这是我自己学习并且小有了一定的积累之后的第一体会.个人认为看书有两点好处: 1.能出版出来的书一定是经过反复的思考.雕琢和审核的,因此从专业性的角度来说,一本好书的价值远超其他资料 2.对着书上的代码自己敲的时候方便 "看完书之后再次提升自我的最好途径是看一些相关的好博文",我个人认为这是学习的第二步,因为一本书往往有好几百页,好的博文是自己看书学习之后的一些总结和提炼,对于梳理学习的内容很有好处,当然这里不是说自

  • VSCode程序猿彩虹屁插件rainbow fart体验篇

    最近一款VSCode内置语音插件rainbow fart横空出世,rainbow fart翻译过来就是彩虹屁,该插件的定位就是:真*程序员鼓励师,在您枯燥的编程时刻,它可以根据代码关键字播放贴近代码意义的可爱的女孩子的真人语音,夸你写代码牛逼! 推荐软件:VSCode Rainbow Far(VSCode彩虹屁扩展)v1.2.2 免费最新版 快速安装 目前VSCode的插件商场已经上架这个插件了,因此只需要在插件商场搜索 rainbow fart即可. 插件安装成功后,Ctrl + Shift

  • 程序猿必须要掌握的多线程安全问题之锁策略详解

    一.常见的锁策略 1.1 乐观锁 乐观锁:乐观锁假设认为数据一般情况下不会产生并发冲突,所以在数据进行提交更新的时候,才会正 式对数据是否产生并发冲突进行检测,如果发现并发冲突了,则让返回用户错误的信息,让用户决定如 何去做.乐观锁的性能比较高. 悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会 上锁,这样别人想拿这个数据就会阻塞直到它拿到锁. 悲观锁的问题:总是需要竞争锁,进而导致发生线程切换,挂起其他线程:所以性能不高. 乐观锁的问题:并不总是能处理

  • 程序猿新手学习必备的Python工具整合

    目录 1. IDLE 使得在 Python 中入门变得非常简单 2. Scikit-learn scikit-learn是一个建立在Scipy基础上的用于机器学习的Python模块 3. Theano Theano是一个较为老牌和稳定的机器学习python库之一 4. Selenium Selenium 是自动化的最佳 python 工具之一 5. Test complete 支持 Web.移动和桌面自动化测试的自动化比较好的Python 工具之一 6. Beautiful soup Beaut

随机推荐