当前位置:首页 > 科技  > 软件

六个Python开发者很少用到但功能强大的模块

来源: 责编: 时间:2024-05-28 09:10:55 92观看
导读一、前言每种流行的通用编程语言都有一个功能丰富、组织良好的标准库,可以帮助开发者使用预先开发的函数或类来提高编码效率。一些编程语言提供预导入的对象或函数来访问标准库,例如JavaScript。而有些语言则提供单独的

一、前言

每种流行的通用编程语言都有一个功能丰富、组织良好的标准库,可以帮助开发者使用预先开发的函数或类来提高编码效率。一些编程语言提供预导入的对象或函数来访问标准库,例如JavaScript。而有些语言则提供单独的可导入模块。Python的标准库中有许多有用的预开发的可导入模块,提供各种自解释的类和函数。y2b28资讯网——每日最新资讯28at.com

每个Python开发者通常都了解一些流行的通用标准库模块,如re、datetime、math、random等。这些只是Python标准库提供的众多模块中的一小部分。Python提供了许多内置的标准模块,可以提高编码效率,并减少外部依赖。y2b28资讯网——每日最新资讯28at.com

在这篇文章中,将列举一些鲜为人知但很有帮助的内置Python标准库模块,可以使用它们来提高编码效率!y2b28资讯网——每日最新资讯28at.com

二、使用ipaddress模块处理IP地址数据

开发者经常使用Python创建DevOps自动化脚本和计算机网络相关程序,因此存储和操作IP地址数据成为Python中的一般需求。内置的ipaddress模块为IPv4和IPv6提供了预开发的类,用于存储和操作IP地址和网络配置。y2b28资讯网——每日最新资讯28at.com

例如,你可以从字符串或整数创建一个IPv4地址对象,如下所示。y2b28资讯网——每日最新资讯28at.com

import ipaddressaddr_1 = ipaddress.ip_address('192.150.1.2')addr_2 = ipaddress.ip_address(202)print(addr_1)        # 192.150.1.2print(addr_2)        # 0.0.0.202print(type(addr_1))  #

我们可以使用传统的算术运算符与IP地址对象进行比较和数据操作。例如,你可以增加/减少和比较IP地址对象,如以下代码片段所示。y2b28资讯网——每日最新资讯28at.com

import ipaddressaddr = ipaddress.ip_address('192.150.1.2')print(addr + 2)   # 192.150.1.4print(addr - 10)  # 192.150.0.248print(addr - 2 == ipaddress.ip_address('192.150.1.0') )  # Trueprint(addr <= ipaddress.ip_address('192.150.1.0') )      # False

该模块还允许你使用CIDR表示法来处理计算机网络,并提供网络配置。例如,以下代码片段将打印192.150.100.0/24网络配置中的所有可用主机IP。y2b28资讯网——每日最新资讯28at.com

import ipaddressnet = ipaddress.ip_network('192.150.100.0/24')print(type(net))    # for h in net.hosts():    print(h)

三、使用cmd模块创建交互式shell

有两种类型的命令行界面(CLI)程序:基于进程的程序和交互式shell。基于进程的CLI程序通常提供各种命令和选项来执行进程,这些进程在执行后会终止CLI程序。与此同时,交互式CLI程序通过运行一个永无止境的命令执行循环来接受命令。官方的Python REPL是一个很好的交互式shell示例。y2b28资讯网——每日最新资讯28at.com

内置的cmd模块提供了一个预先开发的类,用于在Python中创建交互式shell。你可以用自己的Python类扩展cmd.Cmd类,并按如下方式执行命令。y2b28资讯网——每日最新资讯28at.com

import cmdclass Calc(cmd.Cmd):    prompt = 'calc > '    intro = 'Welcome to Calc. Use add, sub, and help commands'        def do_add(self, args):        'Adds two integers and returns the result'        a, b = map(int, args.split())        print(a + b)            def do_sub(self, args):        'Subtracts two integers and returns the result'        a, b = map(int, args.split())        print(a - b)if __name__ == '__main__':    Calc().cmdloop()

上述交互式CLI程序实现了add和sub命令,每个命令接受两个参数。例如,你可以输入add 10 5来执行10和5的算术加法运算。这个命令行shell创建类非常灵活,而且可以自定义——它允许你自定义提示符和欢迎信息,如上面的代码片段所示。y2b28资讯网——每日最新资讯28at.com

该模块还能自动创建帮助命令,打印每条命令的相关信息,通过运行可用命令来尝试使用上面的代码。y2b28资讯网——每日最新资讯28at.com

使用cmd模块创建的交互式shell示例使用cmd模块创建的交互式shell示例y2b28资讯网——每日最新资讯28at.com

你可以通过创建一个带有do_前缀的函数来添加新命令,并为帮助命令使用doc注释。cmd模块并不能以开发者友好的方式解析命令行选项,但毫无疑问,你可以将argparse模块与cmd集成,以实现可用命令的选项。y2b28资讯网——每日最新资讯28at.com

四、使用decimal和fractions模块进行算术处理

通常,每种流行的编程语言都提供了内置的浮点类型来表示浮点数。但是,这些内置的浮点数在内部使用C语言的硬件级double或float数据类型,该类型使用IEEE-754标准浮点表示法。这种标准会导致某些十进制数四舍五入的问题。y2b28资讯网——每日最新资讯28at.com

print(0.1 + 0.2 == 0.3)    # Falseprint(0.1 + 0.2)           # 0.30000000000000004

内置的decimal模块提供了另一种基于软件的实现方式,可以处理小数,而不会出现四舍五入的问题,从而使小数计算更加精确。y2b28资讯网——每日最新资讯28at.com

from decimal import Decimalprint(Decimal('0.1') + Decimal('0.2'))  # 0.3

从上面的示例中可以看出,你可以对十进制对象使用传统的算术运算符。y2b28资讯网——每日最新资讯28at.com

内置的fractions模块可以帮助我们存储和计算有理数。该模块提供的Fraction类具有以下构造函数,可以轻松创建有理数。y2b28资讯网——每日最新资讯28at.com

class fractions.Fraction(numerator=0, denominator=1)class fractions.Fraction(other_fraction)class fractions.Fraction(float)class fractions.Fraction(decimal)class fractions.Fraction(string)

如以下代码片段所示,Fraction类也可以使用与Decimal类类似的算术运算符。y2b28资讯网——每日最新资讯28at.com

from fractions import Fractionprint(Fraction('1/2') + Fraction('1/6'))  #  2/3print(Fraction(1, 8) * 2)                 #  1/4print(Fraction(0.1) / Fraction(0.2))      #  1/2

fractions模块利用math标准模块中的一些函数,基于Python实现。y2b28资讯网——每日最新资讯28at.com

分数加法的源代码分数加法的源代码y2b28资讯网——每日最新资讯28at.com

五、使用Enum模块创建枚举

大多数编程语言都提供内置的枚举类型,用于创建一组可以轻松赋值给其他标识符的常量。例如,你可以使用枚举对象表示工作日或预定义的颜色集。过去,Python没有提供创建枚举的内置方式,因此开发者不得不使用常量、字典和自定义枚举类等替代方法。y2b28资讯网——每日最新资讯28at.com

Python在3.4版本中引入了标准的enum模块,提供了一个功能完备的解决方案来创建枚举值。y2b28资讯网——每日最新资讯28at.com

enum模块支持基于类和函数的方式初始化枚举集。y2b28资讯网——每日最新资讯28at.com

from enum import Enumclass AppMode(Enum):    DEBUG = 1    PRODUCTION = 2    TEST = 3mode = AppMode.DEBUGprint(mode == AppMode.DEBUG)       # TruePriority = Enum('Priority', ['LOW', 'MEDIUM', 'CRITICAL'])    print([e.name for e in Priority])  # ['LOW', 'MEDIUM', 'CRITICAL']

你甚至可以使用这个模块的Flag类创建支持位运算的标志。这个功能在开发Python库时非常有帮助,可以创建支持位运算的选项。y2b28资讯网——每日最新资讯28at.com

请看下面的例子,它使用位运算在单个标识符上存储了多个标志值。y2b28资讯网——每日最新资讯28at.com

from enum import Flag, autoclass LauncherConfig(Flag):    CENTERED_WINDOW = auto()    SHOW_FRAME = auto()    DARK_THEME = auto()    config = LauncherConfig.SHOW_FRAME | LauncherConfig.DARK_THEMEprint(config)                               # LauncherConfig.DARK_THEME|SHOW_FRAMEprint(LauncherConfig.DARK_THEME in config)  # True

六、使用inspect模块进行生产力式元编程

元编程指的是一种将程序结构本身作为数据处理的编程概念。元编程概念通过减少特定开发需求所需的代码行数来帮助提高编码效率。例如,你可以通过检查对象的方法来调用对象的所有可用方法,而不必手工静态编写每个类的方法。y2b28资讯网——每日最新资讯28at.com

Python提供了一些内置函数用于基本的元编程。它还提供了功能丰富的inspect模块用于高级元编程需求。y2b28资讯网——每日最新资讯28at.com

请看下面的代码片段,它调用了一个简单对象的所有方法。y2b28资讯网——每日最新资讯28at.com

import inspectclass A:    def a(self):        print('a')    def b(self):        print('b')    def c(self):        print('c')        a = A()for _, m in inspect.getmembers(a, predicate=inspect.ismethod):    m() # a b c

这个模块提供了一种高效的方式来检查可调用函数。请看下面的示例代码片段,它将在控制台上打印函数参数。y2b28资讯网——每日最新资讯28at.com

import inspectdef display(name: str, score: int = 50):    print('Hello %s, your score is %d.' % (name, score))sig = inspect.signature(display)for p in sig.parameters.values():    print(p)

signature()函数使用有序字典数据结构返回给定可调用函数的所有参数。它提取参数名称、类型提示和默认值,如下图所示。y2b28资讯网——每日最新资讯28at.com

使用inspect模块检查函数参数使用inspect模块检查函数参数y2b28资讯网——每日最新资讯28at.com

PythonFire开源项目利用inspect模块将Python源代码转换为功能齐全的命令行程序,可以尝试使用inspect模块构建一些超棒的程序。y2b28资讯网——每日最新资讯28at.com

七、使用textwrap和colorsys便利模块

有时,编程语言提供预先开发的函数或类来实现流行的通用算法,以提高开发者的工作效率。Python提供了包含文本包装算法的textwrap模块和包含颜色系统转换算法的colorsys模块。y2b28资讯网——每日最新资讯28at.com

textwrap模块提供了预先开发的函数,用于对文本数据进行包装、缩短、缩进和删除。请看下面这段代码,它对一个长段落进行了包装。y2b28资讯网——每日最新资讯28at.com

import textwraps = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam pulvinar tellus sit amet libero viverra feugiat. Curabitur id ultrices metus. Donec lacinia, turpis et fermentum porta, nisl turpis eleifend orci, vel bibendum sapien massa et nisi'print(textwrap.fill(s, width=50))

上述代码片段根据给定的宽度应用了换行字符,并打印出格式正确的段落,如下所示。y2b28资讯网——每日最新资讯28at.com

使用Python中的textwrap模块包装段落y2b28资讯网——每日最新资讯28at.com

该模块还提供了一个函数,可根据给定的字符数和后缀缩短长段落,如以下代码片段所示。y2b28资讯网——每日最新资讯28at.com

print(textwrap.shorten(s, 20, placeholder='...'))# Lorem ipsum dolor...

Python还通过colorsys模块提供了几个颜色转换方便函数,用于在流行的颜色系统(如RGB、HSV等)之间转换颜色值。y2b28资讯网——每日最新资讯28at.com

请看下面的示例代码片段,它将HSV颜色值转换为RGB。y2b28资讯网——每日最新资讯28at.com

import colorsysprint(colorsys.hsv_to_rgb(1, 0.5, 0.2)) # (0.2, 0.1, 0.1)

该模块没有提供内置函数将这些0-1缩放的值转换为十六进制表示法,但你可以通过将值乘以255来轻松完成转换。y2b28资讯网——每日最新资讯28at.com

import colorsysprint('#%.2x%.2x%.2x' % tuple(round(x * 255) /        for x in colorsys.hsv_to_rgb(1, 0.5, 0.2))) # #331a1a

本文链接:http://www.28at.com/showinfo-26-91167-0.html六个Python开发者很少用到但功能强大的模块

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 简化你的工作,七种常用的 JS 代码片段

下一篇: 深度解析:Elasticsearch 写入请求处理流程

标签:
  • 热门焦点
  • 官方承诺:K60至尊版将会首批升级MIUI 15

    官方承诺:K60至尊版将会首批升级MIUI 15

    全新的MIUI 15今天也有了消息,在官宣了K60至尊版将会搭载天玑9200+处理器和独显芯片X7的同时,Redmi给出了官方承诺,K60至尊重大更新首批升级,会首批推送MIUI 15。也就是说虽然
  • 2023年Q2用户偏好榜:12+256G版本成新主流

    2023年Q2用户偏好榜:12+256G版本成新主流

    3月份的性能榜、性价比榜和好评榜之后,就要轮到2023年的第二季度偏好榜了,上半年的新机潮已经过去,最明显的肯定就是大内存和存储的机型了,另外部分中端机也取消了屏幕塑料支架
  • 把LangChain跑起来的三个方法

    把LangChain跑起来的三个方法

    使用LangChain开发LLM应用时,需要机器进行GLM部署,好多同学第一步就被劝退了,那么如何绕过这个步骤先学习LLM模型的应用,对Langchain进行快速上手?本片讲解3个把LangChain跑起来
  • JavaScript学习 -AES加密算法

    JavaScript学习 -AES加密算法

    引言在当今数字化时代,前端应用程序扮演着重要角色,用户的敏感数据经常在前端进行加密和解密操作。然而,这样的操作在网络传输和存储中可能会受到恶意攻击的威胁。为了确保数据
  • 每天一道面试题-CPU伪共享

    每天一道面试题-CPU伪共享

    前言:了不起:又到了每天一到面试题的时候了!学弟,最近学习的怎么样啊 了不起学弟:最近学习的还不错,每天都在学习,每天都在进步! 了不起:那你最近学习的什么呢? 了不起学弟:最近在学习C
  • 雅柏威士忌多款单品价格大跌,泥煤顶流也不香了?

    雅柏威士忌多款单品价格大跌,泥煤顶流也不香了?

    来源 | 烈酒商业观察编 | 肖海林今年以来,威士忌市场开始出现了降温迹象,越来越多不断暴涨的网红威士忌也开始悄然回归市场理性。近日,LVMH集团旗下苏格兰威士忌品牌雅柏(Ardbeg
  • 网传小米汽车开始筛选交付中心 建筑面积不低于3000平方米

    网传小米汽车开始筛选交付中心 建筑面积不低于3000平方米

    7月7日消息,近日有微博网友@长三角行健者爆料称,据经销商集团反馈,小米汽车目前已经开始了交付中心的筛选工作,要求候选场地至少有120个车位,建筑不能低
  • 华为Mate 60系列用上可变灵动岛:正式版体验将会更出色

    华为Mate 60系列用上可变灵动岛:正式版体验将会更出色

    这段时间以来,关于华为新旗舰的爆料日渐密集。据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将
  • 超闭合精工铰链 彻底消灭缝隙 三星Galaxy Z Flip5与Galaxy Z Fold5发布

    超闭合精工铰链 彻底消灭缝隙 三星Galaxy Z Flip5与Galaxy Z Fold5发布

    2023年7月26日,三星电子正式发布了Galaxy Z Flip5与Galaxy Z Fold5。三星新一代折叠屏手机采用超闭合精工铰链,让折叠后的缝隙不再可见。同时,配合处
Top