广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python标准库--functools
  • 750
分享到

python标准库--functools

标准pythonfunctools 2023-01-30 23:01:53 750人浏览 薄情痞子

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

摘要

官方相关地址:https://docs.python.org/3.6/library/functools.html   一.简单介绍:        functools模块用于高阶函数:作用于或返回其他函数的函数。一般而言,任何可调用对象

官方相关地址:https://docs.python.org/3.6/library/functools.html

 

一.简单介绍:
        functools模块用于高阶函数:作用于或返回其他函数的函数。一般而言,任何可调用对象都可以作为本模块用途的函数来处理。

        functools.partial返回的是一个可调用的partial对象,使用方法是partial(func,*args,**kw),func是必须要传入的,而且至少需要一个args或是kw参数。

       

  创建一个功能函数,实现三个数的相加,如果其中的一个或是多个参数不变,那么可以使用partial,实例化一个传入了add和12参数的对象,如上图所示,传入两个参数后,得到三个数的和。

二.partial源码分析

    1.__new__方法部分

class partial:
    """New function with partial application of the given arguments
    and keyWords.
    """
    ###__SLOTS__ 只允许类有此属性,不能动态的添加其他的属性
    __slots__ = "func", "args", "keywords", "__dict__", "__weakref__"     
    ###__new__方法生成实例对象
    def __new__(*args, **keywords):
    ###实例化对象时传入参数的限定,不能为空、参数的个数要大于等于2,这就解释了至少需要一个或多个args或是kw,func是一个可调用的对象,是必须要传入的
        if not args: 
            raise TypeError("descriptor '__new__' of partial needs an argument")
        if len(args) < 2:
            raise TypeError("type 'partial' takes at least one argument")
        cls, func, *args = args # args=(cls,func,*args)
        if not callable(func):
            raise TypeError("the first argument must be callable")
        ### 位置参数是以元组的形式传入的    
        args = tuple(args) 

 

###hasattr这块我也没有咋个明白,不知道可以应用到什么地方,从使用方法来看,传入的函数func要有属性或是方法,如果知道请告知我一下
    if hasattr(func, "func"):
        args = func.args + args
        tmpkw = func.keywords.copy()
        tmpkw.update(keywords)
        keywords = tmpkw
        del tmpkw
        func = func.func    
###创建一个实例对象本身
    self = super(partial, cls).__new__(cls)
###动态的添加属性
    self.func = func 
    self.args = args
    self.keywords = keywords
    return self

  上面的代码创建了一个实例对象(p=partial(func,*args,**kw)),并给对象本身添加了属性。

2. __call__方法部分

   再看可调用的部分,partial实例化的对象是一个可调用的,是因为在partial中写了__call__方法,看源码

###在使用p()时会自动调用__call__方法    
    def __call__(*args, **keywords):
        if not args:
            raise TypeError("descriptor '__call__' of partial needs an argument")
        self, *args = args
    ###将位置参数和关键字参数分别合在一起,在使用p()的时候只传入了部分的参数,这是为了我们的方便,不重复传入不变的参数,而在__call__方法中会将func所需的参数全部传入    
        newkeywords = self.keywords.copy()
        newkeywords.update(keywords)
###*self.args是partial(func,*args,**kw)中的*args
        return self.func(*self.args, *args, **newkeywords)

  在使用p(*args,**keywords)的时候,就会自动的调用__call__方法,这就是生成的对象可调用的原因,self是实例化对象本身,*args、**kw是我们传入函数func的参数,但是只是传入了部分参数,这也是partial的作用所在,所以还要将partial(func,*args,**kw)中的位置参数和关键字参数与p(*args,**keywords)一并传入到函数func中来实现函数的功能。官网中解释partial的功能实现相当于:

def partial(func, *args, **keywords):
    def newfunc(*fargs, **fkeywords):
        newkeywords = keywords.copy()
        newkeywords.update(fkeywords)
        return func(*args, *fargs, **newkeywords)
    newfunc.func = func
    newfunc.args = args
    newfunc.keywords = keywords
    return newfunc

  当调用partial函数的时候,返回的是newfunc函数对象,让f=partial(add,12),相当了f=newfunc,所以f是一个可调用的对象,因此f(1,2)-->等价于newfunc(1,2)-->将参数整合传入到func中,并返回func实现其功能。

 

--结束END--

本文标题: python标准库--functools

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

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

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

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

下载Word文档
猜你喜欢
  • python标准库--functools
    官方相关地址:https://docs.python.org/3.6/library/functools.html   一.简单介绍:        functools模块用于高阶函数:作用于或返回其他函数的函数。一般而言,任何可调用对象...
    99+
    2023-01-30
    标准 python functools
  • python标准库
    Python有一套很有用的标准库(standard library)。标准库会随着Python解释器,一起安装在你的电脑中的。它是Python的一个组成部分。这些标准库是Python为你准备好的利器,可以让编程事半功倍。 我将根据我个人的使...
    99+
    2023-01-31
    标准 python
  • python之标准库
    Python的标准安装包括一组模块,称为标准库。10.1 模块>>>emport math>>>math.sin(0)0.010.1.1 模块是程序任何python程序都可以作为模块导入。#hello.p...
    99+
    2023-01-31
    标准 python
  • Python标准库 - logging
    编写代码时, 常要跟踪下其运行过程, 记录日志是常用的方式. 较简单的就是print命令打印到终端, 或通过open函数写入文件. 但随着代码量的增加, 该方式不可控的弊端, 也凸显出来, 这也正是logging模块出现的背景.对于logg...
    99+
    2023-01-31
    标准 Python logging
  • Python标准库 - subproce
    编写Python脚本时, 经常要执行Linux操作系统命令, 如mkdir zzzz. 目前比较推荐的方法是使用subprocess模块.通过该模块的帮助文档, 可看到其主要提供了4个API, 和相应的使用说明.Main API======...
    99+
    2023-01-31
    标准 Python subproce
  • Python标准库 - re
    编写代码时, 经常要匹配特定字符串, 或某个模式的字符串, 一般会借助字符串函数, 或正则表达式完成.对于正则表达式, 有些字符具有特殊含义, 需使用反斜杠字符'\'转义, 使其表示本身含义. 如想匹配字符'\', 却要写成'\\\\', ...
    99+
    2023-01-31
    标准 Python
  • python常用标准库
    -------------------系统内建函数-------------------1、字符串str='这是一个字符串数据测试数据'对应str[0]:获取str字符串中下标为0的字符。str[3]:获取str字符串中下标为3的字符。st...
    99+
    2023-01-31
    常用 标准 python
  • Python标准库大全
    以下是Python标准库大全 文本 string:通用字符串操作 re:正则表达式操作 difflib:差异计算工具 textwrap:文本填充 unicodedata:Unicode字符数据库 stringprep:互联网字符串准备工具 ...
    99+
    2023-10-26
    python 开发语言
  • python 标准库简介
    操作系统接口 os 模块提供了许多与操作系统交互的函数: >>> >>> import os >>> os.getcwd() # Return the current ...
    99+
    2023-01-31
    标准 简介 python
  • python 标准库大全
    文本 string:通用字符串操作 re:正则表达式操作 difflib:差异计算工具 textwrap:文本填充 unicodedata:Unicode字符数据库 stringprep:互联网字符串准备工具 readline:GNU...
    99+
    2023-01-31
    标准 大全 python
  • Python标准库之os
    文章目录 1. OS标准库简介2. OS标准库常用函数和属性2.1 文件和目录2.1.1 `os.getcwd()`2.1.2 `os.mkdir(path, mode=0o777, *, d...
    99+
    2023-09-04
    python linux 标准库 os 常用函数
  • python标准库--logging模块
    logging模块的几个级别,默认情况下Logging模块有6个级别,代码如下#!/usr/bin/env python # coding: utf-8 __author__ = '...
    99+
    2023-01-30
    模块 标准 python
  • python中的标准库html
    目录python之标准库html__init__.py文件提供两个函数:html库中的 entities 模块html库中的 parser 模块python之标准库html html...
    99+
    2022-11-10
  • Python标准库之数据库 sqlite3
    目录1、创建数据库 2、插入数据3、查询4、更新与删除Python自带一个轻量级的关系型数据库SQLite。这一数据库使用SQL语言。SQLite作为后端数据库,可以搭配P...
    99+
    2022-11-12
  • Python标准库14 数据库 (sqlite3)
    Python自带一个轻量级的关系型数据库SQLite。这一数据库使用SQL语言。SQLite作为后端数据库,可以搭配Python建网站,或者制作有数据存储需求的工具。SQLite还在其它领域有广泛的应用,比如HTML5和移动端。Python...
    99+
    2023-06-02
  • 10个常用python标准库
    Python的标准库包含了大量的模块和函数,这些模块和函数为Python提供了丰富的功能和工具。以下是10个常用的Python标准库:os模块:提供了许多与操作系统交互的函数,例如访问文件系统、创建文件夹、获取环境变量等。sys模块:提供了...
    99+
    2023-10-25
    标准库 python
  • Python标准库学习之urllib
    本系列以python3.4为基础urllib是Python3的标准网络请求库。包含了网络数据请求,处理cookie,改变请求头和用户代理,重定向,认证等的函数。urllib与urllib2:python2.x用urllib2,而pytho...
    99+
    2023-01-31
    标准 Python urllib
  • Python标准库笔记(11) — Op
    Operator——标准功能性操作符接口. 代码中使用迭代器时,有时必须要为一个简单表达式创建函数。有些情况这些函数可以用一个lambda函数实现,但是对于某些操作,根本没必要去写一个新的函数。因此operator模块定义了一些函数...
    99+
    2023-01-30
    笔记 标准 Python
  • python标准库ElementTree处理xml
    目录1. 示例用法Element对象具有如下属性和操作遇到非法格式的xmlExpatError: no element foundExpatError: mismatched tag...
    99+
    2022-11-11
  • 200个Python 标准库总结
    目录1.文本2.数学3.函数式编程4.文件与目录5.持久化6.压缩7.加密8.操作系统工具9.并发10.进程间通信11.互联网12.互联网协议与支持13.多媒体14.国际化15.编程...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作