摘要: 首先:def f(): print('first')def g(): f()g()def f(): print('second')g()结果:>>> firstsecond又来:def g(): f()g()def f(): print('second')g()结果:NameError: global name 'f' is not defined再来:def g(): f()def f(): print('second')g()结果:>>> second 阅读全文
posted @ 2013-11-06 21:23 LisPythoniC 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 几天前自己写了个将阿拉伯数字转为中文财务数字的程序.用的递归,不幸的是它是树形递归.虽然实际过程中不太可能出现金额数字大到让Python递归栈溢出,但是始终是一块心病,这玩意终究在理论上是受限制的.我持续地零散地思考过这个问题,今天终于将其一举拿下,并且还是两个版本,一个是函数式(尾递归),一个是命令式.总算是解决一个心病了.关键在于哪?原来的思路是从左到右转换数字,这种思路用树形递归表示并不难,但是你尝试转化为尾递归时会让你欲仙欲死..反正我是没有弄出来,还浪费了很多时间.不知怎么的,我突然想到尝试从右到左转换,一下子就豁然开朗了.我首先写出了个命令式版本,随后轻松翻译为尾递归版本..这让我 阅读全文
posted @ 2013-11-06 18:51 LisPythoniC 阅读(510) 评论(0) 推荐(0) 编辑
摘要: 不知哪儿看到一个说法,大概是当map的函数参数可以直接引用一个已有的函数变量时(比如内建函数int,str之类的),用map更优美些,否则还是用列表解析更直观和快速.我同意此说法.昨天在写一个函数时,最开始用的是map:def process_messages(arr,msgs,mode): return map(lambda msg:process_message(arr,msg,mode),msgs)可以看到,那个lambda显得笨拙而庞大.今天起来转念一想,用列表解析不是更好么:def process_messages(arr,msgs,mode): return [proc... 阅读全文
posted @ 2013-11-06 10:16 LisPythoniC 阅读(593) 评论(0) 推荐(0) 编辑
摘要: TRE=Tail Recursion Elimination创始人是不愿意实现TRE的.他专门用了一篇文章来阐述原因.http://neopythonic.blogspot.com/2009/04/tail-recursion-elimination.html1.不利于查BUG.2.现有的1000递归深度够用.3.递归不是所有编程的基础,也不是一个日常工具.4.他举了个例子说明第四点,大概是指Python动态的特性不适合递归:def f(x): print 'original' if x > 0: return f(x-1) return 0g = fdef f... 阅读全文
posted @ 2013-11-05 00:41 LisPythoniC 阅读(360) 评论(0) 推荐(0) 编辑
摘要: learning python,5e中讲到.Python的函数参数传递机制是对象引用.Arguments are passed by assignment (object reference). In Python, argumentsare passed to functions by assignment (which, as we’ve learned, means by objectreference). As you’ll see, in Python’s model the caller and function share objectsby references, but th 阅读全文
posted @ 2013-11-02 12:06 LisPythoniC 阅读(324) 评论(0) 推荐(0) 编辑
摘要: 据说requests是一个很吊的处理网络问题的第三方库.我折腾了半天.终于在Win上安装好了.网上找到的都不详细,我是反复尝试才成功的.还是自己写一个傻瓜式的指南吧:1.安装 Setuptoolshttp://www.pip-installer.org/en/latest/installing.html#install-or-upgrade-setuptools下载ez_setup.py,双击即可 2.安装 piphttp://www.pip-installer.org/en/latest/installing.html#install-or-upgrade-pip下载get-pip.py,双 阅读全文
posted @ 2013-11-01 22:51 LisPythoniC 阅读(11133) 评论(2) 推荐(1) 编辑
摘要: 来自:http://blog.jobbole.com/50705/看下面这个图片”“在这个图片里我们有不同高度的墙。这个图片由一个整数数组所代表,数组中每个数是墙的高度。上边的图可以表示为数组[2,5,1,2,3,4,7,7,6]”“假如开始下雨了,那么墙之间的水坑能够装多少水呢?”“以1×1的方块为单位计算容积。所以,在上边的图中下标为1以左的都会漏掉。下标7以右的也会漏掉。剩下的只有在1和6之间的一坑水,容积是10”---------------------------------------------------------------我大概用了30分钟想到了解法,但是翻译成 阅读全文
posted @ 2013-11-01 18:26 LisPythoniC 阅读(570) 评论(0) 推荐(0) 编辑
摘要: 以前想不通,今天在写代码时不知怎么的,偶然就发现了答案..比如说把某个字符串s中所有"00"及更长的'00'统统换为'0'.最后结果中不能包含'00'.00001100-->0110显然,s.replace('00','0')是不够的.命令式解法:def wrapperI(v): while 1: if '00' in v: v=v.replace('00','0') else: break return v函数式解法:def wrapper 阅读全文
posted @ 2013-10-31 22:44 LisPythoniC 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 现在心情还是有点小小激动的.因为我发现递归开始渗透到有实际意义的问题的求解中了.把数字1111转换为"壹仟壹佰壹拾壹",这应该是银行记录和打印数字的基础环节了.我以前看有人说,递归不是人类自然的思考方式。现在我感到非常不可理解,因为我感觉完全相反.在今天这个程序的实现上,我是自然而然地想到用递归来求解这个复杂的问题.因为我一开始只知道一些简单的情况该怎么做,例如:如果给的是1位数,显然非常简单,按照numDic字典直接给结果就行.如果给的是2位数,也不难.取十位数,按照numDic字典返回字符,然后和单位"十"连接,最后再和个位数字符连接.如果给的是3位 阅读全文
posted @ 2013-10-31 21:45 LisPythoniC 阅读(2224) 评论(0) 推荐(1) 编辑
摘要: 那就是,调整代码很方便.这个感慨来自于今天在知道上回答一个网友的问题:http://zhidao.baidu.com/question/2201936720543592228.html?sort=6&old=1#here其他人的答案都是命令式.结果提问者针对他们的回答,一会说我是py3.0,str出错,一会又说最后结果要有Done!字符.虽然这是提问者自己不善于提问,但是我可以根据需求的变化,修改一两个字符就OK.然而命令式就没这么简单了...到处都需要修改.这是我的答案:def show(a,b): reverse= True if a>b else False res=[] 阅读全文
posted @ 2013-10-31 11:54 LisPythoniC 阅读(398) 评论(0) 推荐(0) 编辑