作者回复: 是的应该为i_can_sleep函数名,感谢指正🙏
作者回复: 您好, 不能通过一句话来概括和解释 函数、闭包、装饰器三者的关系。但是“闭包跟函数区别,是从原来传递变量变成传递函数。 装饰器对比闭包,就是从原来传递变量变成传递函数。”这两个说法单独拿出来都是不准确的 先看闭包和函数的区别: 首先闭包必须是函数内部的函数,闭包必须在内部函数引用外部函数中定义的值,返回值方面闭包函数必须返回嵌套函数。 装饰器和闭包的区别? 装饰器就是闭包,但是装饰器强调不修改原函数的基础上 增加功能,关注的是嵌套函数的外部函数
作者回复: @timmer 执行了一次,timmer(i_can_sleep) 又执行了一次。 装饰器体现的是“定义时”装饰,不是“运行时”装饰。这个方面要多理解一下。
作者回复: 就是字面上的意思 @装饰器函数名 def 被装饰函数() 实际上运行就是 装饰器函数名=装饰器函数(被装饰函数)
作者回复: 不行,实现装饰器必须要引入闭包这个功能(概念),装饰器实际是 外部函数名=外部函数名(内部函数名), 在外部函数的定义过程,内部函数必须在内存中装饰器才成立
作者回复: 把lamda表达式整个通过return返回 如: def a_line(a,b): return lambda x: a*x+b
作者回复: 是不是把传可调用对象写成了调用? 如: def hello(): pass 可调用对象是hello,函数调用时hello()
作者回复: 这里比较复杂的就是tpl,它是linux终端定义格式的固定写法,直接套用即可
作者回复: stop_time和start_time都是一个时间戳,也就是执行那一刻记录了当前时间;sleep之后时间发生了改变,这里的减法就是统计时间变化的
作者回复: 函数名字不是固定的,但是这种调用方法是固定的