包含python修饰符函数的词条

python 中 @ 是什么意思修饰符,比如说
class A:
@staticmethod
def m(self):
pass
就相当于
class A:
def m(self):
pass
【包含python修饰符函数的词条】m = staticmethod(m)
其实就是一调用一个函数参数为下行的变量 , 并且替换它
扩展资料:
函数修饰符
@用做函数的修饰符,可以在模块或者类的定义层内对函数进行修饰,出现在函数定义的前一行,不允许和函数定义在同一行 。
一个修饰符就是一个函数,它将被修饰的函数作为参数,并返回修饰后的同名函数或其他可调用的东西 。
在Python的函数中偶尔会看到函数定义的上一行有@functionName的修饰,当解释器读到@这样的修饰符的时候会优先解除@后的内容 , 直接就把@的下一行的函数或者类作为@后边函数的参数,然后将返回值赋给下一个修饰的函数对象 。
参考资料来源:百度百科-Python (计算机程序设计语言)
Python中的“ @”(@)符号有什么作用?【@】符号在python中是装饰器的意思 。
装饰器对一个可调用对象(函数、方法、类等等)进行装饰,它返回的也是一个可调用对象 。
一般情况下,装饰器是对被装饰对象的修饰与增强 。用现实事物类比的话 , 可以类比为中间商:中间商不生产产品 , 它将工厂生产的产品进行包装、运输后再销售给顾客 。装饰器不实现核心功能,它提供对目标函数调用的封装与强 。
它装饰的方法返回值是一个对象(BillList、Bill、List[BillDetail]等),而装饰器【enabled_cache】的作用如它的名称一样:使用缓存 。可以看到,这个装饰器函数中定义了一个函数【wrapper】然后将这个wrapper作为返回值 。这样,原本调用ProductionBos.bill_with_last_week的代码就不需要做任何改变就能享受到ProductionBos.bill_with_last_week原有的功能(得到一个BillList对象)和enabled_cache提供的附加功能(如果该对象有缓存,就不再从数据库查询) 。
Python中的lazy property 我们都知道 , 在Python的类中,dict 保存了一个对象所有的属性,如下面的例子,我们建立了一个Circle的对象 , 对象的字典中保存着半径这个k-v值:
对于类中的方法,我们有时候希望它可以像属性一样被调用,这时候我们通常给类的方法添加@property修饰符:
但是这么做,虽然area可以当作一个属性访问,但是并不是真正的变成了一个属性 , 同时,我们每次调用circle.area , 都会从头到尾执行一遍函数,我们来看下面的例子:
输出为:
可以发现,每次执行circle.area,整个函数流程都会被执行一次的,同时area也没有真正变成对象的属性, dict 中并没有area 。
那么我们有没有办法把一个类中的函数真正变成对象的属性,同时只有在第一次调用时进行一次计算,而之后每次调用不会重复计算呢?这就是Python中的lazy property 。本文介绍两种方法 。一种是使用python描述符,另一种是使用python修饰符 。
输出为:
可以看到 , area只在第一次调用时计算了一次,同时在调用以后area变成了对象的一个属性,同时值并不随半径的变化而变化 。
输出为:
可以看到,area只在第一次调用时计算了一次,同时在调用以后area变成了对象的一个属性,同时值并不随半径的变化而变化 。
python修饰符函数的介绍就聊到这里吧 , 感谢你花时间阅读本站内容,更多关于、python修饰符函数的信息别忘了在本站进行查找喔 。

    推荐阅读