年利率是定值20%,不需要从input接收
另外你的input和print里的汉字都是多余的,即使代码无bug,也不会通过的。要严格按照它给的输入输出的样子来写。
不必一次掌握,理解完上面再来看这种用法不会那么复杂
多装饰器指的是每个装饰器的函数对象都是其下面那个装饰器的,多装饰器的加载是从下至上开始的,而执行是从上执行,下面代码说明:
# 先从下面调用装饰器的部分看
def timmer(func): # func = wrapper2
print('this is timmer decuretion')
def wrapper1(*args,**kwargs):
print('这里是timmer函数的wrapper1')
func() # 调用wrapper2函数
return wrapper1
def login(func): # func = index
print('this is login decuretion')
def wrapper2(*args,**kwargs):
print('这里是login函数的wrapper2')
func() # 调用index函数
return wrapper2 # 加上序号更加清晰说明
# 先演示装饰器的效果,这里只是加载
# 这里是重点!!!!多装饰器加载从下至上看
@timmer # 2:注意:这里并不是向timmer传递index,而是传递login拿到的函数对象wrapper2
@login # 1:向login函数传递index的函数对象,拿到wrapper2函数对象
def index():
print('this is index')
打印结果为:
'this is login decuretion'
'this is timmer decuretion'
# 为什么是这样呢,因为叠加装饰器是从下至上加载,也就是语法糖指向的函数
# 它们拿到了对应的函数对象,但是并未调用
print(index)查看index属于哪一个函数
# 注意看过装饰器用法后后就会知道,经过装饰以后,我们看到的index函数,调用时却不是调用它。
<function timmer.<locals>.wrapper1 at 0x7fdc5160ee50>
# 由于从下至上加载后,index指向的就是最上面那个装饰器的wrapper1函数对象
调用效果:
print('=' * 30) # 划开界线
index() # 调用index
# 可以看到,装饰器加载完毕外部函数是从下至上,调用执行装饰函数是从上至下
this is login decuretion
this is timmer decuretion
==============================
# 调用后的结果,从上至下执行wrapper函数
这里是timmer函数的wrapper1
这里是login函数的wrapper2
this is index
你怎么输入的,输入的内容无法转换为浮点,是不是你输入的不是数字,或者有别的符号?比如输了%号?