lxgs3
发表于 2017-11-4 18:39:26
装饰器 decorator或者称为包装器,是对函数的一种包装。
它能使函数的功能得到扩充,而同时不用修改函数本身的代码。
它能够增加函数执行前、执行后的行为,而不需对调用函数的代码做任何改变。
brankwong
发表于 2017-11-6 22:49:26
import time
class timeslong:
def __init__(self,func):
self.f = func
def __call__(self):
start = time.clock()
print("It's time starting ! ")
self.f()
print("It's time ending ! ")
end = time.clock()
return "It's used : %s ." % (end - start)
@timeslong
def f():
y = 0
for i in range(10):
y = y + i + 1
print(y)
return y
print(f())
g=timeslong(f)
g()
#这个程序在运行g()的时候,会把it’s time starting和 it’s time ending这句话打两遍,不知道为什么?
RichardCheung
发表于 2017-11-15 10:35:48
第二大段程序勘误:
1.没有引进 import time
2.声明类的首字母要大写
3.缩进问题
铁棍阿童木
发表于 2017-11-23 10:40:12
早起的达仙僧 发表于 2017-3-19 10:51
一开始的例子可以写成这样啊,没看懂为什么要用装饰器
我也是这么觉得,感觉修饰符有点脱裤子放屁,多此一举!
小鱼丁丁
发表于 2017-12-3 19:41:36
完全看不懂,为什么不专门讲一节课
小鱼丁丁
发表于 2017-12-3 19:54:09
看了大家的回复,没有搞懂的人占多数,那么长时间都没有细致地讲一下,看来小甲鱼对装饰器这个东西也是含含糊糊,没办法讲清楚吧
payton24
发表于 2017-12-6 10:53:33
def call()
return call()
这个嵌套有点多余啊,请问有什么作用吗?不写也不影响。
payton24
发表于 2017-12-6 11:59:17
内置修饰符讲得很泛,不好理解啊。
代码其实可以更加简洁点,而且代码的缩进有问题。 另外def print_hello(cls): 里面的(cls)怎么理解,现在还有点晕晕的。
class Hello:
@classmethod
def print_hello(cls):
print('Hello')
Hello.print_hello()
旋转风
发表于 2017-12-17 16:44:50
看懂了@classmethod,本来类的方法,必须在类实例化对象之后才能调用,现在可以直接通过类来调用,不需要实例化具体的对象,应该是这样的吧{:10_279:}
1017630959
发表于 2017-12-21 09:20:14
本贴可能有错误,@classmethod语句之前应加一个缩进符
付盼
发表于 2017-12-24 17:13:28
不太懂
ych
发表于 2017-12-31 20:24:30
自从学了编程,感觉智商越来越不够用了
小进同学
发表于 2018-1-7 13:55:49
没看懂,需要把逻辑解释清楚
zou11356
发表于 2018-1-11 23:48:21
是我智商不够还是没解释清楚,
zou11356
发表于 2018-1-11 23:52:18
前面课程都秒懂的,怎么到这就一点也看不懂啊,小甲鱼,快出来解释清楚点T_T
Fire_Lang
发表于 2018-1-24 17:40:48
还可以!!!支持小甲鱼!!!
蜗牛斌
发表于 2018-3-5 20:56:01
读了好几遍才看懂。
结合其他的解说
风雪飘飘
发表于 2018-3-5 23:37:42
#修饰符的例子,这个比较容易懂
def fun1(f):
print("fun1的传入参数:", f)
def fun2(f):
print("fun2的传入参数:", f)
return 2
def fun3(f):#第一步执行fun3时,传入的参数是fun5的函数体
print("fun3的传入参数:", f)
return 3
@fun1 #第三步 执行fun1, 把返回值付给fun5这个字符串(如果有返回值,没有为None)
@fun2 #第二步 执行fun2,并将其返回值作为参数传入fun1
@fun3 #第一步 把fun5函数体作为参数传入fun3,运行fun3并将其返回值作为参数 传入fun2
def fun5():
pass
print(fun5) #这里不能像这样fun5()调用了,fun5=fun1(fun2(fun3)), fun5相当于fun1的返回值了,是一个字符串
风雪飘飘
发表于 2018-3-6 10:26:17
#楼主内置的修饰符那里缩进不对,所以类方法的例子无法运行,下面改了以下,可以运行了
class Hello(object):
def __init__(self):
pass
@classmethod
def print_hello(cls):
print("Hello")
Hello.print_hello()
cjj233
发表于 2018-3-12 15:08:22
看不太懂
页:
1
2
3
4
5
[6]
7
8
9
10
11
12
13
14
15