来源:Manjusaka
链接:manjusaka.itscoder.com/2016/11/18/Someone-tell-me-that-you-think-Python-is-simple/(点击尾部阅读原文前往)
已获转载授权
前言
最近觉得 Python 太“简单了”,于是在师父川爷面前放肆了一把:“我觉得 Python 是世界上最简单的语言!”。于是川爷嘴角闪过了一丝轻蔑的微笑(内心 OS:Naive!,作为一个 Python 开发者,我必须要给你一点人生经验,不然你不知道天高地厚!)于是川爷给我了一份满分 100 分的题,然后这篇文章就是记录下做这套题所踩过的坑。
1.列表生成器
描述
下面的代码会报错,为什么?
classA(object):
x=1
gen=(xfor_inxrange(10))# gen=(x for _ in range(10))
if__name__=="__main__":
print(list(A.gen))
答案
这个问题是变量作用域问题,在 gen=(x for _ in xrange(10)) 中 gen 是一个 generator ,在 generator 中变量有自己的一套作用域,与其余作用域空间相互隔离。因此,将会出现这样的 NameError: name 'x' is not defined 的问题,那么解决方案是什么呢?答案是:用 lambda 。
classA(object):
x=1
gen=(lambdax:(xfor_inxrange(10)))(x)# gen=(x for _ in range(10))
if__name__=="__main__":
print(list(A.gen))
2.装饰器
描述
我想写一个类装饰器用来度量函数/方法运行时间
importtime
classTimeit(object):
def__init__(self,func):
self._wrapped=func
def__call__(self,*args,**kws):
start_time=time.time()
result=self._wrapped(*args,**kws
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|