广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python编程通过懒属性提升性能
  • 586
分享到

Python编程通过懒属性提升性能

2024-04-02 19:04:59 586人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录为什么需要懒加载如何使用懒加载最后的话懒加载是一种编程范式,它推迟加载操作,直到不得不这样做。通常,当操作开销很大,需要耗费大量时间或空间时,惰性求值是首选实现。例如,在 pyt

懒加载是一种编程范式,它推迟加载操作,直到不得不这样做。通常,当操作开销很大,需要耗费大量时间或空间时,惰性求值是首选实现。例如,在 python 中,涉及惰性求值的最著名技术之一是生成器。生成器不是为迭代创建整个序列,而是懒惰地一次生成一个元素。

Python 世界之外,许多其他面向对象编程语言,例如 Swift 和 Kotlin,都具有与对象相关的惰性求值。具体来说,你可以指定自定义实例对象的特定属性是惰性的,这意味着在显式访问这些属性之前不会创建这些属性。

为什么需要懒加载

在我们开始讨论懒属性之前,有些人可能想知道为什么它很重要,或者我们为什么要使用懒属性。

比如在社交网站中,一个功能是查看一个人的关注者,以列表的形式呈现。当我们点击一个用户时,我们可以在弹出窗口中查看该用户的个人资料。获取用户个人资料数据的操作可能很昂贵,不仅需要访问远程服务器,还需要将数据存储在内存中。

那么在编程实现时可以把关注者的个人资料作为懒属性,仅在点击特定用户名时才获取该属性。

这就是为什么我们需要懒属性。

如何使用懒加载

方法 1:

使用 @property

@property 是一个装饰器,可以将常规函数转化为属性,比如支持点符号访问。因此,严格来说,创建属性并不是真正创建懒属性本身。相反,它只是提供一个接口来简化数据处理的问题。让我们先看看下面的代码。


class User:
    def __init__(self):
        self._profile_data = None
    @property
    def profile_data(self):
        if self._profile_data is None:
            print("执行耗时操作...")
            self._profile_data = 'profile data'
        return self._profile_data
demo = User()
print("init done")
print(demo.profile_data)
#init done
#执行耗时操作...
#profile data

初始化完成后并不会执行耗时操作,对应的加载用户列表就不会觉得卡。只有在获取用户资料(点击操作)时,程序会先判断是否已经存在 _profile_data,没有才会执行耗时操作,如果有直接返回,大大提升了效率。

方法 2:

使用 __getattr__ 特殊方法

在 Python 中,名称前后有双下划线的函数称为魔术方法。__getattr__ 可以帮助我们实现懒属性。

对于自定义类,实例对象的属性保存在字典中,可以访问实例对象的 __dict__ 属性获取。值得注意的是,如果__dict__ 不包含指定的属性,Python 将会调用魔术方法 __getattr__,写个代码你就明白了:


class User:
    def __init__(self):
        self._profile_data = None
        self.name = 'None'
     def __getattr__(self, item):
        print("called __getattr__")
        if item == 'profile_data':
            if self._profile_data is None:
                print("执行耗时操作...")
                self._profile_data = 'profile data'
            return self._profile_data
 user = User()
print("init done")
print(user.__dict__)
print(user.profile_data)
print(user.__dict__)
print(user.name)

输出结果如下:


init done
{'_profile_data': None, 'name': 'None'}
called __getattr__
执行耗时操作...
profile data
{'_profile_data': 'profile data', 'name': 'None'}
None

和方法 1 一样,初始化完成后并不会执行耗时操作,我们在获取 profile_data 属性时,由于 profile_data 不在 __dict__ 中,因此会执行 __getattr__ 方法获取,而 name 在  __dict__ 获取 name 属性时根本就不会执行  __getattr__ 方法。

怎么判断一个属性是不是在 __dict__ 中呢,只要没有显式的定义该属性,或者使用 setattr 来设置属性,它就不会在 __dict__  中。

因此可以借助魔术方法 __getattr__ 来创建懒属性 profile_data。

需要注意,Python 还有一个类似的魔术方法 __getattribute__,与 __getattr__ 方法不同的是, 每次获取属性时都会调用 __getattribute__ 方法。


class User:
    def __init__(self):
        self._profile_data = None
        self.name = 'None'
    def __getattribute__(self, item):
        print("called __getattr__")
user = User()
print("init done")
print(user.profile_data)
print(user.name)

程序输出如下:

init done
called __getattr__
None
called __getattr__
None

此功能仅在你期望属性非常频繁地更改并且只有最新数据相关时才有用。在这些情况下,我们可以通过定义相关函数来实现效果。换句话说,我不建议你尝试使用它,因为很容易陷入无限递归循环。

最后的话

在本文中,我们重点讨论了在 Python 中实现懒属性的两种实用方法:一种使用 @property 装饰器,另一种使用 __getattr__ 特殊方法。

就我个人而言,我更喜欢使用属性装饰器,它更直接、更容易理解。但是,当你需要定义多个懒属性时,该 getattr 方法更好,因为它提供了一个集中的地方来管理这些懒属性。

以上就是Python编程通过懒属性提升性能的详细内容,更多关于Python懒属性提升性能的资料请关注编程网其它相关文章!

--结束END--

本文标题: Python编程通过懒属性提升性能

本文链接: https://www.lsjlt.com/news/135665.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python编程通过懒属性提升性能
    目录为什么需要懒加载如何使用懒加载最后的话懒加载是一种编程范式,它推迟加载操作,直到不得不这样做。通常,当操作开销很大,需要耗费大量时间或空间时,惰性求值是首选实现。例如,在 Pyt...
    99+
    2022-11-12
  • PHP8如何通过JIT编译提升Web应用的性能?
    PHP8如何通过JIT编译提升Web应用的性能?随着Web应用的不断发展和需求的增加,提升Web应用的性能成为了开发者关注的焦点之一。PHP作为一种常用的服务器端脚本语言,一直以来都备受开发者喜爱。而PHP8中引入了JIT(即时编译)编译器...
    99+
    2023-10-22
    性能 Web应用 PHP JIT编译
  • 如何通过Partition分区提升MySQL性能
    如何通过Partition分区提升MySQL性能,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。  什么是分区  数据库分区是一...
    99+
    2022-10-19
  • Java中怎么通过创建对象来提升程序性能
    本篇文章给大家分享的是有关Java中怎么通过创建对象来提升程序性能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在 Java 中有多种方式可以创建对象,总结起来主要有下面的 4...
    99+
    2023-06-16
  • 通过Golang的同步机制提升程序的并发能力与性能
    在Golang中,可以使用同步机制来提升程序的并发能力和性能。下面是一些可用的同步机制:1. 互斥锁(Mutex):互斥锁可以用来保...
    99+
    2023-10-10
    Golang
  • PHP 异步编程真的能提升性能吗?
    随着互联网的发展,Web 应用程序的用户量越来越大,同时用户对于 Web 应用程序的速度和响应时间要求也越来越高。在这个背景下,PHP 异步编程技术逐渐被广泛应用,其目的就是为了提高 Web 应用程序的性能和响应速度。 那么,PHP 异步...
    99+
    2023-09-15
    异步编程 path 分布式
  • EF Core通过显式编译提高查询性能
    今天,我将向您展示这些EF Core中一个很酷的功能,通过使用显式编译的查询,提高查询性能。 不过在介绍具体内容之前,需要说明一点,EF Core已经对表达式的编译使用了缓存;当您的...
    99+
    2022-11-13
  • 能否通过异步编程接口提高ASP在Windows下的性能?
    在Windows下,ASP作为一种流行的Web开发框架,它的性能一直是人们关注的焦点。为了提高ASP的性能,可以考虑采用异步编程接口。那么,能否通过异步编程接口提高ASP在Windows下的性能呢?本文将探讨这个问题。 首先,我们需要了解什...
    99+
    2023-10-01
    windows 异步编程 接口
  • 异步编程如何提升 ASP shell 的性能?
    异步编程是一种非常常见的技术,它可以在执行某些操作时,让程序继续执行其他操作,从而提高程序的性能。在 ASP shell 中,异步编程同样可以提升程序的性能,本文将介绍如何使用异步编程来提升 ASP shell 的性能。 一、什么是异步编程...
    99+
    2023-10-23
    shell 并发 异步编程
  • 通过MySQL优化提升系统性能的项目经验分享
    通过MySQL优化提升系统性能的项目经验分享引言:在当今信息化的时代,大量的数据涌入系统,对于数据库的管理和性能优化变得尤为重要。MySQL作为一款广受欢迎的关系型数据库管理系统,具有开源、稳定、高性能等特点,被广泛应用于各个行业中。本文将...
    99+
    2023-11-02
    MySQL优化 系统性能 项目经验
  • 提升Python程序性能的习惯有哪些
    本篇内容介绍了“提升Python程序性能的习惯有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、使用局部变量尽量使用局部变量代替全局变...
    99+
    2023-07-06
  • 如何在Python异步编程中利用Linux编程算法提升应用性能?
    Python是一种高级编程语言,广泛用于各种应用程序的开发。在Python编程中,异步编程是一种重要的编程技术,它可以提高应用程序的性能和响应速度。在本文中,我们将介绍如何在Python异步编程中利用Linux编程算法来提升应用性能。 一、...
    99+
    2023-09-22
    异步编程 linux 编程算法
  • EF Core如何通过显式编译提高查询性能
    这篇文章主要讲解了“EF Core如何通过显式编译提高查询性能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“EF Core如何通过显式编译提高查询性能”吧!在介绍具体内容...
    99+
    2023-06-29
  • 如何通过禁止死锁检测来提升高并发MySQL性能
    如何通过禁止死锁检测来提升高并发MySQL性能,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 在一个高并发的MySQL服务器...
    99+
    2022-10-18
  • Java、Linux和大数据:如何通过路径设置提升处理性能?
    在现代计算机系统中,Java和Linux已经成为了最受欢迎的编程语言和操作系统之一。同时,大数据处理也在不断发展,因此,如何提升处理性能已经成为了非常关键的问题。在本文中,我们将会探讨如何通过路径设置来提升处理性能。 路径设置是指在操作系...
    99+
    2023-06-21
    path linux 大数据
  • 如何通过技术手段提升数据库性能:Oracle vs. MySQL比较
    如何通过技术手段提升数据库性能:Oracle vs. MySQL比较引言:数据库是现代应用程序的核心组成部分,负责存储和管理数据。当数据量增加或者并发用户增加时,数据库性能可能会变得缓慢。在这种情况下,提升数据库性能变得尤为重要。本文将比较...
    99+
    2023-10-22
    MySQL Oracle 数据库性能
  • 赛程刚过 1/3,什么操作让性能提升 150+ 倍?
    作者:Yao Wei 11 月初我们开启了一项社区新活动「TiDB 性能挑战赛」(Performance Challenge Program,简称 PCP),这项积分赛将持续 3 个月,选手将完成一系列难度不同的任务,赢得相应的积分。目前赛...
    99+
    2018-09-07
    赛程刚过 1/3,什么操作让性能提升 150+ 倍?
  • DB2性能优化 – 如何通过db2优化工具提升SQL查询效率
           我们都知道,应用系统在运行一段时间后,用户报告系统运行会变慢,使他们不能完成所有的工作,完成事务和处理查询花费过长时间,或者应用程序...
    99+
    2022-10-18
  • 如何利用 Python 接口框架 load 提升程序性能?
    Python 是一门高效、简洁的编程语言,但是在实际的开发中,我们还需要考虑程序的性能问题。为了优化程序的性能,我们可以使用 Python 接口框架 load。本文将介绍如何利用 load 提升程序性能。 一、什么是 load? Load ...
    99+
    2023-07-25
    接口 框架 load
  • 分布式编程算法:Python shell 能否提高性能?
    随着数据量的不断增加,单机的计算能力已经无法满足大规模数据处理的需求。分布式计算作为一种解决方案,已经成为了数据处理领域的主流技术之一。而在分布式计算中,分布式编程算法则是其中的核心部分。 Python 作为一种广泛使用的编程语言,在分布...
    99+
    2023-10-08
    shell 分布式 编程算法
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作