iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python中为我们提供解决方案的方法特性有哪些
  • 430
分享到

Python中为我们提供解决方案的方法特性有哪些

2024-04-02 19:04:59 430人浏览 独家记忆

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

摘要

python中为我们提供解决方案的方法特性有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。实际上,在日常的工作中,我们很多需求,无论是常见

python中为我们提供解决方案的方法特性有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

实际上,在日常的工作中,我们很多需求,无论是常见的、还是不常见的,Python 都为我们提供了一些独特的解决方案,既不需要自己造轮子,也不需要引入新的依赖(引入新的依赖势必会增加项目的复杂度)。

但是 Python 有太多功能和特性被我们忽略了,导致我们在遇到问题的时候,没法第一时间作出良好的决策。

所以,干脆来一起扫清这些被我们忽略的 Python 死角。

装饰器的妙用

我们经常会想完成一些注册&调用的功能,比如我们有四个函数:

Python中为我们提供解决方案的方法特性有哪些

现在我们想将这四个函数和 +、-、*、/ 四个操作符绑定,那么我们该怎么做?

可能我们第一反应是这样:

Python中为我们提供解决方案的方法特性有哪些

但这样写起来,有一个很大的问题就是太不美观了。因为直接对于 dict 的操作从实际上来讲可维护性是很差的,那么我们这个地方应该怎么做?

在改进这段代码之前,我们首先要明确 Python 中一个很重要的概念,即:函数/方法是:First Class Member 。用不精确的话来讲,就是函数/方法可以作为参数被传递、被使用。

举个例子:

Python中为我们提供解决方案的方法特性有哪些

大家可以看到我们将 print_func 这个函数作为参数传递给 execute 函数并被调用。

那么我们来改造下之前的代码:

Python中为我们提供解决方案的方法特性有哪些

好了,大家看看,目前整体代码的可读性以及可维护性是不是改了很多?

但是我们现在的问题在于,每次都需要在单独调用一次 reGISter_operator 函数,这样也太烦了吧!要不要再改进一下?要得。我们可以用装饰器来改进一下。

首先,看一个最简单的装饰器例子:

Python中为我们提供解决方案的方法特性有哪些

我们能看到这段函数的意义是计算函数的执行时间。那么这个原理是什么?

实际上装饰器是一个语法糖,具体可以参见 PEP318 Decorators for Functions and Methods。

简而言之,实际上是 Python 替我们做了一个替换过程。以上面的例子为例,这个替换过程就是 add=execute(add) 。

好了,我们就用这个知识点来改进下之前的代码:

Python中为我们提供解决方案的方法特性有哪些

这样我们这段代码的注册过程是不是就显得更优雅了?

嗯,是的!实际上 Python 中有很多特性会帮助我们的代码更简洁,更优美。

接下来这个例子很可能帮我们减轻工作量。

聊聊 OrderedDict

dict 是我们经常使用的一种数据解构。但是在 Python 3.6 之前 dict 都是无序的,即我插入的顺序,和数据在 dict 中存放的顺序并无关联(笔者注:Python 3.6 dict 有序只是新版实现的顺带产物,Python 3.7 正式作为 feature 被固定下来)。

但是很多时候,比如在验签等场景,我们需要保证 dict 数据存放顺序,和我们插入顺序是一致的。那么我们该怎么办?

老板有需求下来了,我们肯定不能告诉老板这个需求没法做。那我们就自己实现一个 ordereddict 吧。于是,想了想,写了如下的代码:

Python中为我们提供解决方案的方法特性有哪些

通过额外维护一个 list 来维护 key 插入的顺序。这段代码,看似完成了我们的需求,但是实则存在很大问题。大家可以猜猜问题在哪?

3,2,1!

揭晓答案,这段代码利用 list 来保证 key 的有序性,在删除的时候, list 的删除操作,是一个时间复杂度 O(n) 的操作。换句话说,我们的删除操作随着内部数据的增多,所需的删除时间也变得越长。这对于某些性能敏感的场景是无法接受的。

那要怎么办呢?事实上,Python 在很早之前就已经内置了有序字典,即很多人可能都用过的 collections.OrderedDict 。

在 OrderedDict 中, Python 维护了一个双向链表解构,来保证插入的有序性,如下图所示:

Python中为我们提供解决方案的方法特性有哪些

在最左侧维护一个卫兵节点,卫兵节点的 next 指针恒指向于数据中最后插入的节点。那么插入新的数据时,我们将新的数据插入到卫兵节点之后,从而达成维护插入顺序的目的。

在删除的时候,通过额外维护的一个字典找到待删除的 key 所对应的节点。这个操作是 O(1) 的复杂度,然后大家都知道,双向链表删除一个节点的时间复杂度也是 O(1) 。通过这样保证我们在即便有大量数据的情况下,也能保证相应的性能。

好了,我们按照这个思路来做一个最简单的实现:

Python中为我们提供解决方案的方法特性有哪些

这只是一个 OrderedDict 的简化版,如果想完成一个完整的 OrderedDict 还有很多很多的 corner case 要去处理。不过现在,我们可以使用内置的数据结构去完成我们需求。怎么样,是不是有了一种幸福的感觉?

随意聊聊

通过今天的两个例子,我们发现 Python 提供了相当多的功能去帮助我们完成日常的工作与学习任务。同时通过去深入地了解 Python 内部的一些功能实现,以便我们能更好地去学习一些知识。

看完上述内容,你们掌握Python中为我们提供解决方案的方法特性有哪些的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网Python频道,感谢各位的阅读!

--结束END--

本文标题: Python中为我们提供解决方案的方法特性有哪些

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

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

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

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

下载Word文档
猜你喜欢
  • Python中为我们提供解决方案的方法特性有哪些
    Python中为我们提供解决方案的方法特性有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。实际上,在日常的工作中,我们很多需求,无论是常见...
    99+
    2024-04-02
  • 如何在Java教程中使用路径容器?我们为您提供最全面的解决方案!
    Java作为一种广泛使用的编程语言,它的应用领域越来越广泛。在Java编程中,路径容器是一个非常常用的组件。它可以方便地管理文件路径,帮助程序员更好地实现文件操作。在本篇文章中,我们将为大家提供一份最全面的解决方案,帮助你在Java教程中更...
    99+
    2023-10-28
    教程 path 容器
  • python中有哪些特有方法
    这篇文章给大家介绍python中有哪些特有方法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,专注的是解决问题,而不是搞明白语言本身。2.面向...
    99+
    2023-06-14
  • PXC中提供的特性、兼容性和限制有哪些
    这篇文章给大家分享的是有关PXC中提供的特性、兼容性和限制有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 Percona XtraDB Clu...
    99+
    2024-04-02
  • Python性能提升的方法有哪些
    本篇内容介绍了“Python性能提升的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!时序分析优化之前,首先要找到是哪部分代码拖慢了...
    99+
    2023-06-16
  • python中有哪些特殊方法
    python中的特殊方法有:1.init方法;2.next方法;3.len方法;4.str方法;5.abs方法;6.bool方法;7.complex方法;8.floa方法;9.hash方法;10.setitem方法;11.delitem方法...
    99+
    2024-04-02
  • 如何在LeetCode中提高Python开发技能,成为高效的算法解决方案提供者?
    LeetCode是一个著名的算法训练平台,它提供了各种算法题目,可以帮助开发者提升算法解决能力。Python是一种流行的编程语言,具有简单易学、功能强大、易于扩展等优点。本篇文章将介绍如何在LeetCode中提高Python开发技能,成为高...
    99+
    2023-07-19
    leetcode 开发技术 大数据
  • MySQL 中有哪些不同的状态变量为我们提供了事件相关操作的计数?
    以下是 MYSQL 中的状态变量,它们为我们提供与事件相关的操作的计数 - com_create_event 它为我们提供了自上次服务器重新启动以来执行的 CREATE EVENT 语句的数量。Com_alter_event - 它为我们提...
    99+
    2023-10-22
  • 微软为用户提供的一键解决问题的方案
    微软在Windows系统如XP和Vista中引入了诊断和修复机制,在出现问题时可以提 Enable Media Center DVD Library Fix it Live Enable 10 Int...
    99+
    2023-05-24
    一键 方案 问题 微软 用户
  • 大数据同步问题困扰你?Python path 提供了哪些解决方案?
    随着大数据时代的到来,数据同步成为了一个非常重要的问题。无论是在企业内部,还是在不同企业之间,数据同步都是必不可少的。而 Python path 是一款非常实用的 Python 库,可以帮助我们解决数据同步问题。在本文中,我们将深入探讨 ...
    99+
    2023-10-12
    path 大数据 同步
  • Java File类提供的方法与操作有哪些
    这篇“Java File类提供的方法与操作有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java ...
    99+
    2023-07-05
  • 阿里云独享共享ECS为企业提供弹性计算解决方案
    阿里云独享共享ECS是阿里云推出的一款云计算服务,它为企业提供了一种灵活、可扩展、低成本的计算资源。通过独享共享ECS,企业可以根据业务需求灵活地调整计算资源,实现资源的最大化利用。 在当前的数字化时代,企业对计算资源的需求越来越高,无论是...
    99+
    2023-11-12
    阿里 独享 弹性
  • 提升MySQL性能的方法有哪些
    这篇文章主要介绍“提升MySQL性能的方法有哪些”,在日常操作中,相信很多人在提升MySQL性能的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”提升MySQL性能的...
    99+
    2024-04-02
  • Golang中多态特性的实现方法有哪些?
    如何在Golang中实现多态特性?多态是面向对象编程中的一个重要特性,它允许我们使用同一种类型但具有不同实现的对象,并且能够在运行时动态选择使用哪个对象。在很多面向对象编程语言中,如Java和C++,多态是一种自然且常用的特性。但是,在Go...
    99+
    2023-12-29
    Golang中的接口(Interface) Golang中的结构体(Struct) Golang中的类型断言(Type
  • 提高mysql性能的方法有哪些
    本篇内容主要讲解“提高mysql性能的方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“提高mysql性能的方法有哪些”吧!一、问题的提出 在应用系统开发...
    99+
    2024-04-02
  • 弹性云服务器服务提供的主要功能有哪些方面的特点
    弹性扩容:用户可以根据业务需要动态扩展服务器数量,以应对业务高峰期的负载压力。 资源监控:弹性云服务器可以实时监控服务器资源的使用情况,包括CPU、内存、磁盘等资源的使用情况,并能够根据实时数据进行自动化调整。 弹性升级:弹性云服务器可以...
    99+
    2023-10-27
    主要功能 弹性 服务器
  • 亚马逊物流服务:为您提供全方位的物流解决方案
    1. 仓储服务 亚马逊物流提供全球范围内的仓储服务,包括长期仓储和短期仓储。无论您是个人卖家还是大型企业,亚马逊都能为您提供灵活的仓储解决方案。您可以将商品存放在亚马逊的仓库中,亚马逊将负责商品的存储、管理和保护。亚马逊的仓储服务还包括库...
    99+
    2023-10-27
    亚马逊 为您提供 物流服务
  • Alma Linux中的存储解决方案和配置方法有哪些
    Alma Linux中可以使用多种存储解决方案和配置方法,以下是其中一些常见的: LVM(Logical Volume Manag...
    99+
    2024-04-24
    Alma Linux
  • 提高电脑性能的方法有哪些
    提高电脑性能的方法有以下几种:1. 清理磁盘空间:删除无用的文件和程序,清理浏览器缓存等,以释放磁盘空间。2. 使用优化软件:可以使...
    99+
    2023-09-06
    电脑
  • win7中毒的解决方法有哪些
    在Windows 7中,解决中毒问题的方法有以下几种:1. 安装和更新杀毒软件:安装一个可靠的杀毒软件,并确保它是最新版本。定期更新...
    99+
    2023-09-12
    win7
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作