我在Python 2.7中有以下示例:
import time
@timing
def my_test_function():
return 5+5
def timing(f):
def wrap(*args):
time1 = time.time()
ret = f(*args)
time2 = time.time()
print '%s function took %0.3f ms' % (f.func_name, (time2-time1)*1000.0)
return ret
return wrap
这失败了。
NameError: name 'timing' is not defined
但是,这显然不会失败:
def a():
result = b()
return result
def b():
return 'foo'
如果装饰者是功能,那么这里的区别是什么?
答案 0 :(得分:6)
函数 do 必须在调用之前声明。唯一的区别是装饰器通常比其他函数更早被调用。
在您的示例中,在创建/* entire container, keeps perspective */
.flip-container {
perspective: 1000;
-webkit-transform-style: preserve-3d;
transform-style: preserve-3d;
}
/* UPDATED! flip the pane when .flipped class applied */
.flip-container.flipped .back {
-webkit-transform: rotateY(0deg);
transform: rotateY(0deg);
}
.flip-container.flipped .front {
-webkit-transform: rotateY(180deg);
transform: rotateY(180deg);
}
.flip-container, .front, .back {
width: 7.1428rem;
height: 10rem;
}
/* flip speed goes here */
.flipper {
-webkit-transition: 200ms;
transition: 200ms;
-webkit-transform-style: preserve-3d;
transform-style: preserve-3d;
position: relative;
}
时调用装饰器(可能是导入时间),而my_test_function
在调用b
之前不会被调用。
如果您执行了以下操作,您会看到a
就像装饰器一样:
NameError