我的理解,希望对你有帮助
不带参数的装饰器调用 decorator(function)
带参数的装饰器调用 decorator (parameter)(function)
原因是 decorator的结构改变了
不带参数的时候是直接返回修改后的函数
带参数的时候先接受参数后在用闭包返回一个函数用于做装饰器来接受函数,然后在二层函数里面就可以直接操作最外层的参数了
不带参数的装饰器调用 decorator(function)
带参数的装饰器调用 decorator (parameter)(function)
原因是 decorator的结构改变了
不带参数的时候是直接返回修改后的函数
带参数的时候先接受参数后在用闭包返回一个函数用于做装饰器来接受函数,然后在二层函数里面就可以直接操作最外层的参数了
2017-11-20
def performance(f): #定义装饰器 f 就是源函数
def fn(x): #为源函数添加具体功能
a=time.time() #获取时间
f(x) # 执行源函数
b=time.time() #执行后的时间
print 'call %s () in %s' % (f.__name__,(b-a)) # 打印(%s表示字符串类型)
return f(x) #返回源函数
return fn #返回修改后的函数
def fn(x): #为源函数添加具体功能
a=time.time() #获取时间
f(x) # 执行源函数
b=time.time() #执行后的时间
print 'call %s () in %s' % (f.__name__,(b-a)) # 打印(%s表示字符串类型)
return f(x) #返回源函数
return fn #返回修改后的函数
2017-11-20
def __sub__(self, r):
return Rational(self.p*r.q-self.q*r.p,self.q*r.q)
def __mul__(self, r):
return Rational(self.p*r.p,self.q*r.q)
def __div__(self, r):
return Rational(self.p*r.q,self.q*r.p)
def __str__(self):
return '%s/%s' %(self.p,self.q)
return Rational(self.p*r.q-self.q*r.p,self.q*r.q)
def __mul__(self, r):
return Rational(self.p*r.p,self.q*r.q)
def __div__(self, r):
return Rational(self.p*r.q,self.q*r.p)
def __str__(self):
return '%s/%s' %(self.p,self.q)
2017-11-18
def __init__(self, p, q):
if p<q:
t=p
else:
t=q
while t>1:
if p%t==0 and q%t==0:
p=p/t
q=q/t
t-=1
self.p = p
self.q = q
if p<q:
t=p
else:
t=q
while t>1:
if p%t==0 and q%t==0:
p=p/t
q=q/t
t-=1
self.p = p
self.q = q
2017-11-18
import time
def performance(f):
def fn(x):
a=time.time()
f(x)
b=time.time()
print 'call %s() in %fs'%(f.__name__,(b-a))
return f(x)
return fn
@performance
def factorial(n):
return reduce(lambda x,y: x*y, range(1, n+1))
print factorial(10)
def performance(f):
def fn(x):
a=time.time()
f(x)
b=time.time()
print 'call %s() in %fs'%(f.__name__,(b-a))
return f(x)
return fn
@performance
def factorial(n):
return reduce(lambda x,y: x*y, range(1, n+1))
print factorial(10)
2017-11-18
def __init__(self, num):
self.num=num
self.t=[0,1]
i=2
while i<self.num:
t=self.t[i-1]+self.t[i-2]
self.t.append(t)
i+=1
print self.t
def __len__(self):
return len(self.t)
self.num=num
self.t=[0,1]
i=2
while i<self.num:
t=self.t[i-1]+self.t[i-2]
self.t.append(t)
i+=1
print self.t
def __len__(self):
return len(self.t)
2017-11-18
class Rational(object):
def __init__(self, p, q):
self.p = p
self.q = q
def __int__(self):
return self.p // self.q
def __float__(self):
return float(self.p) / self.q
print float(Rational(7, 2))
print float(Rational(1, 3))
def __init__(self, p, q):
self.p = p
self.q = q
def __int__(self):
return self.p // self.q
def __float__(self):
return float(self.p) / self.q
print float(Rational(7, 2))
print float(Rational(1, 3))
2017-11-18
def calc_prod(lst): #此函数放回到是a函数所以需要用函数的方式调用即可
def a():
return reduce((lambda x,y: x*y),lst)
return a
f = calc_prod([1, 2, 3, 4])
print f()
def a():
return reduce((lambda x,y: x*y),lst)
return a
f = calc_prod([1, 2, 3, 4])
print f()
2017-11-17
def calc_prod(lst):
return reduce((lambda x,y: x*y),lst) #这里是直接返回结果了,所以要print f 不是print f() 因为return的不是函数
f = calc_prod([1, 2, 3, 4])
print f
return reduce((lambda x,y: x*y),lst) #这里是直接返回结果了,所以要print f 不是print f() 因为return的不是函数
f = calc_prod([1, 2, 3, 4])
print f
2017-11-17
讲的很简单啊怎么评论不懂。 难点在于 我来这里一下就把装饰器看懂了。 可能是我js稍微好点的原因吧。
# 方法二: 重写原函数
f1 = newF1(f1)
f1()
# 装饰器 @ 就是方法二的语法糖:
@newF1
def f2():
print '这是原函数'
# 方法二: 重写原函数
f1 = newF1(f1)
f1()
# 装饰器 @ 就是方法二的语法糖:
@newF1
def f2():
print '这是原函数'
2017-11-17