摘要: 对于一些貌似很简单常见的函数,最好还是去读一下Python文档,否则当你被某个BUG折磨得死去活来时,还不知根源所在.尤其是Python这种不断更新的语言.(python 2.7 的round和3.3.2不一样)3.3.2官方文档对round的定义round(number[,ndigits])Return the floating point valuenumberrounded tondigitsdigits after the decimal point. Ifndigitsis omitted, it defaults to zero. Delegates tonumber.__roun 阅读全文
posted @ 2013-11-19 01:04 LisPythoniC 阅读(10687) 评论(1) 推荐(2) 编辑
摘要: idict是dict的子类,它的键值和属性是同步的,并且有强大的默认值机制.例如,假设x是idict的一个实例,且x['a']['b']=12,则有x.a.b=12.反之亦然;假设'c'不在x的键集合,那么尝试访问x['c']或者x.c,均会直接初始化默认值.class idict(dict): "super dict class, attributes and keys are equal" def __init__(self,d={},dft=None): idict.dft=dft for k,v in 阅读全文
posted @ 2013-11-17 23:27 LisPythoniC 阅读(1315) 评论(0) 推荐(0) 编辑
摘要: 定义标准类dict的一个子类c:>>> class c(dict): pass>>> y=c({1:2,3:4})>>> y{1: 2, 3: 4}>>> y.__dict__{}>>> z={1:2,3:4}>>> z.__dict__Traceback (most recent call last): File "", line 1, in z.__dict__AttributeError: 'dict' object has no attribu 阅读全文
posted @ 2013-11-17 22:19 LisPythoniC 阅读(451) 评论(0) 推荐(0) 编辑
摘要: 我之前只知道设置初始值0.今天偶然在Python算法书上看到这个片段,从100个随机数里面找2个最靠近的自然数(不相等):from random import randrange seq = [randrange(10**10) for i in range(100)] dd = float("inf") for x in seq: for y in seq: if x == y: continue d = abs(x-y) if d >> float('-Inf')==-float('Inf')True顺便还收获了NaN的概念, 阅读全文
posted @ 2013-11-12 11:05 LisPythoniC 阅读(40616) 评论(0) 推荐(0) 编辑
摘要: 这应该是我编程以来完成的难度最大的一个函数了.因为可能存在的情况非常多,需要设计合理的参数来控制解析流程.经验概要:1.大胆假设一些子功能能够实现,看能否建立整个框架.如果在假设的基础上都无法建立,那么必定需要更换思路.2.穷举所有可能的情况,想清楚该怎么应对它们.如果写完了整个程序才发现,啊!漏了一种情形.代价或许就是全部推翻重写.我算是能够理解为什么教科书上推荐设计程序之前要先画流程图,那实际是要求你编程之前要先知道解法,并以一种直观的形式保存.这样,你在将解法翻译为代码时,思路才清晰,效率才高.什么?难道有人会在不知道解法的情况下就编程?显然有这种人的,我这次就是这样干的.我这次是吃够了 阅读全文
posted @ 2013-11-11 01:03 LisPythoniC 阅读(1018) 评论(0) 推荐(0) 编辑
摘要: python 为何要设计这种?正确:def f(a=2,b=2,c=3): return a+b+cprint(f(*(1,1),c=1))错误:def f(a=2,b=2,c=3): return a+b+cprint(f(*(1,1),1))会被提示:而这个会被提示:def f(a=2,b=2,c=3): return a+b+cprint(f(a=1,*(1,1)))>>> Traceback (most recent call last): File "C:\Users\un_ieval.py", line 91, in print(f(a=1,* 阅读全文
posted @ 2013-11-10 20:34 LisPythoniC 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 待处理:>>> re.findall(r'[-+]*\d+(?:\.\d+)?','-++++---+123.012')['-++++---+123.012']>>> re.findall(r'[-+]*\d+(\.\d+)?','-++++---+123.012')['.012'] 阅读全文
posted @ 2013-11-08 18:02 LisPythoniC 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 前几天看一个网友提问,如何计算'1+1'这种字符串的值,不能用eval函数.我仿佛记得以前新手时,对这个问题完全不知道如何下手.我觉得处理括号实在是太复杂了,多层嵌套括号怎么解析呢?一些多余的括号呢?而在没有括号的情况下,处理不同运算符之间的优先级又很头疼.而'**'这种占2个字符的运算符,还有着奇特的优先级规则,x**y**z应先计算y**z,并且如果z后面还跟着**的话,则不能先计算y**z..这是最难的地方!但是,今天我竟然把它实现了!而且是用最原始的函数实现的,它们是:str,s.isdigit,s.find,s.count,dict,floatif,i 阅读全文
posted @ 2013-11-08 00:40 LisPythoniC 阅读(989) 评论(0) 推荐(0) 编辑
摘要: 下面这个错误是由于在正则[...]的内部,减号'-'是一个有特殊含义的字符(代表字符范围)所以如果需要在[...]内匹配减号'-',需要用反斜杠'\'转义.>>> import re>>> re.split(r'[+\-*/%]','+a-b-c')['', 'a', 'b', 'c']>>> re.split(r'[+-*/%]','+a-b-c')Tracebac 阅读全文
posted @ 2013-11-06 22:20 LisPythoniC 阅读(936) 评论(0) 推荐(0) 编辑
摘要: 是吗?def f(x,y,z): return x+y+zt=(200,300)print(f(1,2,3))print(f(1,*t))结果:>>> 6501这是我某个编程细节的简化版本..我原本打算这样做:def f(x,y,z): return x+y+zt=(200,300)print(f(1,2,3))y,z=tprint(f(1,y,z))但我想,万一Python支持这种写法呢?于是我尝试,果然能行!Python真是方便得... 阅读全文
posted @ 2013-11-06 21:28 LisPythoniC 阅读(680) 评论(0) 推荐(0) 编辑