python partial函数

Python 提供了一个 functools 的模块,该模块为高阶函数提供支持,partial 就是其中的一个函数,该函数的形式如下:

functools.partial(func[,*args][, **kwargs])

这里先举个例子,看看它是怎么用的。

假设有如下函数:

def multiply(x, y):
    return x * y

现在,我们想返回某个数的双倍,即:

>>> multiply(3, y=2)
6
>>> multiply(4, y=2)
8
>>> multiply(5, y=2)
10

上面的调用有点繁琐,每次都要传入 y=2,我们想到可以定义一个新的函数,把 y=2 作为默认值,即:

def double(x, y=2):
    return multiply(x, y)

现在,我们可以这样调用了:

>>> double(3)
6
>>> double(4)
8
>>> double(5)
10

事实上,我们可以不用自己定义 double,利用 partial,我们可以这样:

from functools import partial

double = partial(multiply, y=2)

partial 接收函数 multiply 作为参数,固定 multiply 的参数 y=2,并返回一个新的函数给 double,这跟我们自己定义 double 函数的效果是一样的。所以,简单而言,partial 函数的功能就是:把一个函数的某些参数给固定住,返回一个新的函数。需要注意的是,我们上面是固定了 multiply 的关键字参数 y=2,如果直接使用:

double = partial(multiply, 2)

则 2 是赋给了 multiply 最左边的参数 x,不信?我们可以验证一下:

from functools import partial

def subtraction(x, y):
    return x - y

f = partial(subtraction, 4)  # 4 赋给了 x
>>> f(10)   # 4 - 10
-6
(0)

相关推荐

  • 什么是Python函数?内容介绍!

    学习Python的时候我们会接触到很多没有听说过的词汇,比如函数.那么什么是Python函数?定义函数需要遵循哪些原则呢?我们一起来看看吧. 什么是Python函数? Python函数是指组织好的.可 ...

  • 详解Python 函数如何重载?

    什么是函数重载?简单的理解,支持多个同名函数的定义,只是参数的个数或者类型不同,在调用的时候,解释器会根据参数的个数或者类型,调用相应的函数. 重载这个特性在很多语言中都有实现,比如 C++.Java ...

  • 面试题-python3 内置函数map reduce filter 如何使用?

    前言 面试时候经常会考到 map reduce filter 这三个内置函数的使用 map() 函数 map() 会根据提供的函数对指定序列做映射. 第一个参数 function 以参数序列中的每一个 ...

  • Python 中的函数装饰器和闭包

    函数装饰器可以被用于增强方法的某些行为,如果想自己实现装饰器,则必须了解闭包的概念. 装饰器的基本概念 装饰器是一个可调用对象,它的参数是另一个函数,称为被装饰函数.装饰器可以修改这个函数再将其返回, ...

  • Python的函数思想及基本用法,划重点!

    函数是一段可重复使用的.具有特定功能的语句块,通过函数名来定义和调用.经过定义,函数内的语句块成为一个整体,即"函数体",可以通过使用函数名的调用从而实现函数内部语句块的重复使用. ...

  • 零基础学Python:函数精讲

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 1. 位置参数与关键字参数 尽管这种方式很常见,但是位置参数的一个弊端是必须熟记每个位置的参 ...

  • Python学习——函数及调用

    经过之前Python学习--十分钟入门Python一文的学习相信大家对于Python都有了大概的了解.这节课芒果带大家一起来学习Python函数. 函数是带名字的代码块,用来完成某项具体任务的.当我们 ...

  • Python sorted函数及用法

    sorted() 作为 Python 内置函数之一,其功能是对序列(列表.元组.字典.集合.还包括字符串)进行排序. sorted() 函数的基本语法格式如下: list = sorted(itera ...

  • python:函数传参是否会改变函数外参数的值

    参考链接: https://blog.csdn.net/u012614287/article/details/57149290 https://blog.csdn.net/qq915697213/ar ...

  • 为什么 Python 没有函数重载?如何用装饰器实现函数重载?

    英文:https://arpitbhayani.me/blogs/function-overloading 作者:arprit 译者:豌豆花下猫("Python猫"公众号作者) 声 ...

  • Python ord() 函数

    Python 内置函数描述ord() 函数是 chr() 函数(对于8位的ASCII字符串)或 unichr() 函数(对于Unicode对象)的配对函数,它以一个字符(长度为1的字符串)作为参数,返 ...

  • Python zip函数及用法

    zip()函数是Python内置函数之一,它可以将多个序列(列表.元组.字典.集合.字符串以及range()区间构成的列表)"压缩"成一个zip对象.所谓"压缩" ...

  • Python reversed函数及用法

    reserved()是Pyton内置函数之一,其功能是对于给定的序列(包括列表.元组.字符串以及range(n)区间),该函数可以返回一个逆序序列的迭代器(用于遍历该逆序序列). reserved() ...