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 中 @ 是什么意思修饰符 , 比如说
class A:
@staticmethod
def m(self):
pass
就相当于
class A:
def m(self):
pass
m = staticmethod(m)
其实就是一调用一个函数参数为下行python的函数修饰符的变量,并且替换它
扩展资料python的函数修饰符:
函数修饰符
@用做函数的修饰符,可以在模块或者类的定义层内对函数进行修饰,出现在函数定义的前一行,不允许和函数定义在同一行 。
一个修饰符就是一个函数,它将被修饰的函数作为参数 , 并返回修饰后的同名函数或其他可调用的东西 。
在Python的函数中偶尔会看到函数定义的上一行有@functionName的修饰,当解释器读到@这样的修饰符的时候会优先解除@后的内容,直接就把@的下一行的函数或者类作为@后边函数的参数,然后将返回值赋给下一个修饰的函数对象 。
参考资料来源python的函数修饰符:百度百科-Python (计算机程序设计语言)
这些python操作符都是什么意思或作用?True, False是布尔值,None是空值 。没有floats, lists, numbers, strings的定义 。不过它们分别是一种变量的类型,不过你加了s就不好说了
()括号,同时也可以表示元组
{}主要用于正则表达式
[]数组
@在函数前面做修饰符
:块的上一行结尾
,在print时表示下个字符连接打印,并加个空格
=赋值
=在原基础上加后再赋值给原变量
;没有意义
.表示类的变量或者是包的类,子类
*=在原基础上乘,再赋值给原变量
//=等同于/=
-=在原基础上减 , 再赋值给原变量
/=在原基础上除 , 再赋值给原变量
%=整除,再赋值给原变量
**=与自身相乘,再赋值
and, or, not都是逻辑符
if elif else是分支语句
in是数组集合
as 配合with使用
import导入库或者是包
is相当于==
assert断言
raise,finally, except与try是异常陷阱
print打印
lambda是一句话嵌入函数
break, continue, for是循环语句
exce执行,eval评估
def,return 函数定义
class 类定义
del删除变量
pass空语句
from导入包中的类或者是函数或者是变量
while条件循环语句
yield是产生iterial数组类型的一个方法
global全局变量引用修饰符
with是简化了.的使用,比如
with A() as a, B() as b:
suite
Python中的“ @”(@)符号有什么作用?【@】符号在python中是装饰器的意思 。
装饰器对一个可调用对象(函数、方法、类等等)进行装饰,它返回的也是一个可调用对象 。
一般情况下,装饰器是对被装饰对象的修饰与增强 。用现实事物类比的话,可以类比为中间商:中间商不生产产品,它将工厂生产的产品进行包装、运输后再销售给顾客 。装饰器不实现核心功能,它提供对目标函数调用的封装与强 。
它装饰的方法返回值是一个对象(BillList、Bill、List[BillDetail]等) , 而装饰器【enabled_cache】的作用如它的名称一样:使用缓存 。可以看到,这个装饰器函数中定义了一个函数【wrapper】然后将这个wrapper作为返回值 。这样,原本调用ProductionBos.bill_with_last_week的代码就不需要做任何改变就能享受到ProductionBos.bill_with_last_week原有的功能(得到一个BillList对象)和enabled_cache提供的附加功能(如果该对象有缓存,就不再从数据库查询) 。
【python的函数修饰符的简单介绍】关于python的函数修饰符和的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- 电商推广工资如何,电商公司推广
- Linux怎取消命令操作,linux取消当前命令
- 食品小吃工厂直播带货文案,食品小吃工厂直播带货文案简短
- python传值函数吗 python函数值传递
- 怎么将安卓手机卡槽拿出来,安卓手机手机卡怎么拿出来
- 如何运营公司新媒体账号,新媒体公司运营模式
- 体育游戏耐力,耐力游戏教案
- php提交的数据乱码 php提交的数据乱码怎么回事
- gis找不到afcore,gis找不到图像在哪