随笔分类 -  Python

摘要:今天模拟定义map函数.写着写着就发现Python可变长度参数的机制真是灵活而强大.假设有一个元组t,包含n个成员:t=(arg1,...,argn)而一个函数f恰好能接受n个参数:f(arg1,...,argn)f(t)这种做法显然是错的,那么如何把t的各成员作为独立的参数传给f,以便达到f(arg1,...,argn)的效果?我一开始想到的是很原始的解法,先把t的各个成员变为字符串的形式,再用英文逗号把它们串联起来,形成一个"标准参数字符串":str_t=(str(x) for x in t)str_args=",".join(str_t)str_a 阅读全文
posted @ 2013-10-25 09:55 LisPythoniC 阅读(5310) 评论(0) 推荐(0)
摘要:想法源自:http://stackoverflow.com/questions/141642/what-limitations-have-closures-in-python-compared-to-language-x-closuresPython 2.7 的闭包中的自由变量(co_freevars)只读的.Python需要某些技巧来"变相修改"自由变量:>>> def add(n): freevar=[n] def closure(): freevar[0]+=1 return freevar[0] return closure>>> 阅读全文
posted @ 2013-10-24 14:20 LisPythoniC 阅读(759) 评论(0) 推荐(0)
摘要:arr=[[1,2,3],[4,2,3],[5,2,3]]x2=sorted(arr)print 'sorted',x2print '-'*20for ar in arr: ar.append('trap')print 'arr',arrprint 'sorted',x2结果:>>> sorted [[1, 2, 3], [4, 2, 3], [5, 2, 3]]--------------------arr [[1, 2, 3, 'trap'], [4, 2, 3, 't 阅读全文
posted @ 2013-10-23 12:54 LisPythoniC 阅读(242) 评论(0) 推荐(0)
摘要:>>> def dupu(t): return t>>> t=[1,2,3]>>> s=dupu(t)>>> s[1, 2, 3]>>> t.append(4)>>> s[1, 2, 3, 4]本来只想改变t列表,结果s列表也发生相同变化了.根本原因在于变量s和t都是指向同一个list对象.如何避免这种情况,让s和t相互独立?那就要让dupu返回一个新的list对象.>>> def dupu(t): return [i for i in t]>>> t 阅读全文
posted @ 2013-10-23 12:14 LisPythoniC 阅读(142) 评论(0) 推荐(0)
摘要:import randomdef randomlist(n): return [random.randint(0,100) for i in range(n)]def isorted(arr,key=None,reverse=False): if len(arr)key(line): big.append(ar) else: small.append(ar) else: for ar in arr[1:]: if ar>line: big.append(ar) ... 阅读全文
posted @ 2013-10-23 00:11 LisPythoniC 阅读(290) 评论(0) 推荐(0)
摘要:注意,此装饰器的设计前提是:对于相同参数,函数一定返回相同的值.如果某个函数,相同参数可能返回不同值,或者修改了一些外部数据,那么最好不要用此装饰器.有时候对于一些函数,我们需要用相同参数多次调用,且不方便将其预先储存在一个变量中.例如这种,假设有函数f,g,h,m:list=[[f(i),g(f(i)),h(g(f(i))),m(f(i))] for i in range(100)]那么,在计算g(f(i)),要先重复计算一次f(i),再计算g.h(g(f(i)))同理.如果这些函数的计算过程很复杂,那么就浪费了大量资源.再例如很经典的,非尾递归形式的斐波拉契函数:def fibonacci 阅读全文
posted @ 2013-10-22 13:46 LisPythoniC 阅读(376) 评论(0) 推荐(0)