程序员的冷笑话 python版本
在伯乐在线上看到了个冷笑话,感觉很有意思。
void tellStory()
{
printf("从前有座山\n");
printf("山上有座庙\n");
printf("庙里有个老和尚和一个小和尚\n");
printf("有一天\n");
printf("小和尚对老和尚说\n");
printf("\"给我讲个故事吧\"\n");
printf("于是, 老和尚说: \n");
tellStory();
}
原代码是C写的,试着转换成了python:
#!/bin/env
# encoding: utf-8 def tellStory(cnt):
print "从前有座山\n"
print "山上有座庙\n"
print "庙里有个老和尚和一个小和尚\n"
print "有一天\n"
print "小和尚对老和尚说\n"
print "\"给我讲个故事吧\"\n"
print "于是, 老和尚说: \n"
print "-----------\n在%s年前\n" % cnt
cnt += 2
tellStory(cnt) if __name__ == '__main__':
tellStory(1)
不过由于python编译器对递归最大嵌套层数的限制,这个版本执行的并不理想,于是几经google有了以下版本:
#!/bin/env
# encoding: utf-8 from sys import maxint def tellStory(cnt):
rtn_str = ''
rtn_str += "从前有座山\n"
rtn_str += "山上有座庙\n"
rtn_str += "庙里有个老和尚和一个小和尚\n"
rtn_str += "有一天\n"
rtn_str += "小和尚对老和尚说\n"
rtn_str += "\"给我讲个故事吧\"\n"
rtn_str += "于是, 老和尚说: \n"
rtn_str += "-----------\n在%s年前\n" % cnt
yield rtn_str if __name__ == '__main__':
for i in xrange(1, maxint, 2):
for e in tellStory(i):
print e
使用yield+xrange代替print+range,避免出现中间变量过大导致的MemoryError。
这个版本会无限执行下去,直到达到py的最大整数"9223372036854775807"或系统内存不足。
总结:
1、Python中++运算符作用与其他语言有很大不同:
>>> i = 1
>>> ++i
1
>>> i++
File "<stdin>", line 1
i++
^
SyntaxError: invalid syntax
>>>
要实现自加或自减运算,最好使用+=或-=。
2、Python中range方法会直接生成一个list供遍历或其他操作,而xrange的工作方式类似使用了yield的生成器,每次调用时计算一个值返回。因此在遍历时,xrange的性能要优于range,特别是数据量巨大的情况下。
程序员的冷笑话 python版本的更多相关文章
- C程序员眼里的Python
注释 Phython的注释和C语言非常不同,第一种 #开头的注释,类似于C的//开头,而"""对 包围注释,类似于C的/* */,以及xml类的<!-- -- ...
- [python]通过微信公众号“Python程序员”,编写python代码
今天发现微信公众号中,居然可以编写python代码,很是惊喜,觉得蛮有趣的. 步骤如下: 1.关注微信公众号“Python程序员” 2.关注成功后,点击右下角的“潘多拉”->"Pyth ...
- 资深程序员:学Python我推荐你用这几款编辑器
Python使用什么编辑比较好,Python编辑器推荐 各位 Pythoner 好啊!在这个烦躁的时代,相聚就是缘分,很高兴各位 Pythoner 能相聚于此,希望接下来的路,我们一起走下去,使用 P ...
- java程序员快速掌握python系列——概述
这一系列主要是总结学习python过程中的方方面面(已经学完,时间大概是一周左右).当然限于个人水平java也就是够用,python短时间内也不可能深入到哪里去.所以这次的分享的目的是能够快速使用py ...
- 给Lisp程序员的Python简介
给Lisp程序员的Python简介 作者:Peter Norvig,译者:jineslong<zzljlu@gmail.com> 这是一篇为Lisp程序员写的Python简介(一些Pyth ...
- Python/Java程序员面试必备常用问题解析与答案
转自AI算法联盟,理解python技术问题,以及一些常见的java面试中经常遇到的问题,这些面试问题分为四类: 是什么(what) 如何做(how) 说区别/谈优势(difference) 实践操作( ...
- 30个有关Python的小技巧,给程序员的 30 个基本 Python 贴士与技巧
30个有关Python的小技巧 2013/07/04 · Python, 开发 · 4 评论 · Python 分享到: 66 本文由 伯乐在线 - Kevin Sun 翻译.未经许可,禁止转载!英文 ...
- Python超级程序员使用的开发工具
我以个人的身份采访了几个顶尖的Python程序员,问了他们以下5个简单的问题: 当前你的主要开发任务是什么? 你在项目中使用的电脑是怎样的? 你使用什么IDE开发? 你将来的计划是什么? 有什么给Py ...
- 程序员带你十天快速入门Python,玩转电脑软件开发(三)
声明:本次教程主要适用于已经习得一门编程语言的程序员.想要学习第二门语言.有梦想,立志做全栈攻城狮的你 . 如果是小白,也可以学习本教程.不过可能有些困难.如有问题在文章下方进行讨论.或者添加QQ群5 ...
随机推荐
- 【[USACO08NOV]奶牛混合起来Mixed Up Cows】
首先我们能够一眼看到4 <= N <= 16,那么就是它了,我们要压缩的状态就是它了 那么之后能我们用这个状态表示什么呢,我们要表示的显然是每只奶牛是否在队伍中 比如说10吧,转成二进制后 ...
- docker-2-安装
安装之前确定Centos的相关问题: CentOS Docker 安装 Docker支持以下的CentOS版本: CentOS 7 (64-bit) CentOS 6.5 (64-bit) 或更高的版 ...
- 理解JavaScript闭包(closure)
闭包听了很多次了,可是到底有那些具体的用法还是不清楚,看了<JavaScript高级程序设计>,有点明白了. 1.闭包的定义: 闭包其实就是一个函数,而这个函数有点特别,它能够访问另一个函 ...
- generator 函数
可以看做一个状态机, 生成的是一个迭代器对象, 可以用来遍历状态机里面的各种状态 创建方式 在函数名前面添加 * , 内部使用 yeild 来标注状态 特性 yield 只能在 generator 中 ...
- 在eclipse中配置Tomcat时,出现“Cannot create a server using the selected type”的错误。
出现原因:Tomcat重新安装,并且安装目录改变了. 解决方案:在“Window->preferences->Server->Runtime Environment”,编辑Tomca ...
- JVM 内部原理
1.JVM的组成: JVM 由类加载器子系统.运行时数据区.执行引擎以及本地方法接口组成. 2.JVM的运行原理: JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器.它是一种基 ...
- hdu 2098 分拆素数和(一个偶数拆分成两个不同素数和 拆法数量)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2098 分拆素数和 Time Limit: 1000/1000 MS (Java/Others) ...
- STM32平台SD卡的FatFS文件系统开发
STM32平台SD卡的FatFS文件系统开发 系统平台: STM32系列的STM32F103ZE SPI方式与SD卡通信 SD上移植FatFS系统 1 FatFS文件系统 1.1 FatFS简介 Fa ...
- MySQL高可用之MGR安装测试
Preface We've learned the machenism of MGR yesterday,Let's configurate an environment and have s ...
- Ajax实现下载进度条
可以通过设置一个XMLHttpRequest对象的 responseType 属性来改变一个从服务器上返回的响应的数据类型.可用的属性值为空字符串 (默认), "arraybuffer&qu ...