解析Python 偏函数用法全方位实现

Python的functools模块中有一种函数叫“偏函数”,自从接触它以来,发现确实是一个很有用且简单的函数,相信你看完这篇文章,你也有相见恨晚的感觉。

我们都知道,函数入参可以设置默认值来简化函数调用,而偏函数的作用就是将入参进行默认填充,降低函数使用的难度。

如int()函数,可以将字符型转换为整型,且默认的都是以十进制形式来转换,那为什么一定是十进制呢?如果想用以二进制的形式转换呢?其实我们可以看一下int函数它本身的定义偏函数,一个让你相见恨晚的实用函数

可以看到int有两种用法,可以传一个位置参数,还可以多传一个关键字参数base,也就是基于什么格式转换,默认不传base参数是以十进制转换。所以,用二进制形式转换的话只要base=2即可(见下方代码)

value = int('10000')
print(value)  # 10000

value = int('10000', base=2)
print(value)  # 16

如果每次转换的字符串的时候都要输入base参数,显得很麻烦,因此偏函数的作用就体现出来了,可以使用functools.partial()函数来重新定义

from functools import partial

int2 = partial(int, base=2)
res = int2('10000')
print(res)   # 16

到这里,你应该已经感觉到了偏函数的一点点魅力吧,那我们再从多个角度进一步看透它。

自定义函数的使用

def add(a, b, c):
  print('a=',a,'b=',b,'c=',c)
  return a + b + c

add10 = partial(add, 10)
res = add10(1, 2)   # a= 10 b= 1 c= 2

如上代码中,partial(add, 10)入参并没有指定哪个关键字参数,函数却默认的将这个值传给了第一个参数a,那就说明,当没有指定默认参数时,默认赋值给第一个参数,余下参数按位置参数赋值。

当入参为可变参数时

def sum(*args):
  s = 0
  for n in args:
    s += n
  return s

sum10 = partial(sum, 10)
print(sum10(1))  # 11
print(sum10())   # 10

按上述理解,没有指定默认参数时,默认赋给第一个参数,那么第一个参数永远是10,后面再传入参的话就从第二个参数开始计算,因此会实现10 + 1 = 11 的结果。同样,如果不继续传参的话,只有默认的10,所以结果就是10

当入参为可变关键字参数时

D = {'value1':10, 'value2':20}
V = {'Default':100}
def show(**kw):
  for k in kw:
    print(k, kw.get(k))

showDef = partial(show, **V)
showDef(**D)
# Default 100
# value1 10
# value2 20

同理,此时入参由于是可变参数,因此默认是第一个传入,先打印Default关键字,这里关注一下函数的写法,可变关键字参数要写成(**V)

当入参为限制的关键字参数时

def student(name, * , age, city):
  print('name:',name, 'age:',age, 'city:',city)

studentAge = partial(student, age=20)
studentAge('Tom','Beijing')
# TypeError: student() takes 1 positional argument but 2 positional arguments (and 1 keyword-only argument) were given

我们知道,当用*号分隔开,表示后面的关键字参数是必传的,因此对于默认参数也是同样适用,即当参数为必传时,偏函数也需要对每个关键字参数设置默认值。因此修改后为

studentAge = partial(student, age=20, city='Beijing')
studentAge('Tom') # name: Tom age: 20 city: Beijing

综上,偏函数可以将目标函数的部分参数固化后,重新定义为新的函数,降低了编码的复杂度,尤其是当参数很多的时候,或者只用到其中某些参数的场景下时,效果更为显著。

到这里,你是否有了相见恨晚的感觉呢?简单函数小技巧,非常实用的偏函数用法就介绍完了,更多相关Python 偏函数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python嵌套函数,作用域与偏函数用法实例分析

    本文实例讲述了Python嵌套函数,作用域与偏函数用法.分享给大家供大家参考,具体如下: 内嵌函数(嵌套函数): 意思:在函数里面再定义一个新的函数 如果在函数体内不调用内嵌的函数,那么无法在外部调用 def my_pr1(): print("第一层打印") def my_pr2(): print("第二层打印") my_pr2()#如果在函数体内不调用内嵌的函数,那么无法在外部调用 my_pr1() 作用域: local(局部作用域)  -->enclosi

  • 详细介绍Python中的偏函数

    Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function).要注意,这里的偏函数和数学意义上的偏函数不一样. 在介绍函数参数的时候,我们讲到,通过设定参数的默认值,可以降低函数调用的难度.而偏函数也可以做到这一点.举例如下: int()函数可以把字符串转换为整数,当仅传入字符串时,int()函数默认按十进制转换: >>> int('12345') 12345 但int()函数还提供额外的base参数,默认值为10.如果传入base参数

  • Python使用functools模块中的partial函数生成偏函数

    python 中提供一种用于对函数固定属性的函数(与数学上的偏函数不一样) # 通常会返回10进制 int('12345') # print 12345 # 使用参数 返回 8进制 int('11111', 8) # print 4681 每次都得添加参数比较麻烦, functools提供了partial的方法 import functools foo = functools.partial(int, base=8) foo('11111') # print 4681 通过这种方法生成一个固定参

  • python中偏函数partial用法实例分析

    本文实例讲述了python中偏函数partial用法.分享给大家供大家参考.具体如下: 函数在执行时,要带上所有必要的参数进行调用.但是,有时参数可以在函数被调用之前提前获知.这种情况下,一个函数有一个或多个参数预先就能用上,以便函数能用更少的参数进行调用. 例如: In [9]: from functools import partial In [10]: def add(a,b): ....: return a+b ....: In [11]: add(4,3) Out[11]: 7 In

  • Python偏函数Partial function使用方法实例详解

    Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function). 要注意,这里的偏函数和数学意义上的偏函数不一样. 在介绍函数参数的时候,我们讲到,通过设定参数的默认值,可以降低函数调用的难度.而偏函数也可以做到这一点.举例如下: int()函数可以把字符串转换为整数,当仅传入字符串时,int()函数默认按十进制转换: int('12345') 12345 但int()函数还提供额外的base参数,默认值为10.如果传入base参数,就可以做N进

  • Python中偏函数用法示例

    本文实例讲述了Python中偏函数用法.分享给大家供大家参考,具体如下: python中偏函数 当一个函数有很多参数时,调用者就需要提供多个参数.如果减少参数个数,就可以简化调用者的负担. 比如,int()函数可以把字符串转换为整数,当仅传入字符串时,int()函数默认按十进制转换: >>> int('12345') 12345 但int()函数还提供额外的base参数,默认值为10.如果传入base参数,就可以做 N 进制的转换: >>> int('12345', b

  • 解析Python 偏函数用法全方位实现

    Python的functools模块中有一种函数叫"偏函数",自从接触它以来,发现确实是一个很有用且简单的函数,相信你看完这篇文章,你也有相见恨晚的感觉. 我们都知道,函数入参可以设置默认值来简化函数调用,而偏函数的作用就是将入参进行默认填充,降低函数使用的难度. 如int()函数,可以将字符型转换为整型,且默认的都是以十进制形式来转换,那为什么一定是十进制呢?如果想用以二进制的形式转换呢?其实我们可以看一下int函数它本身的定义偏函数,一个让你相见恨晚的实用函数 可以看到int有两种

  • Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】

    本文实例讲述了Python HTML解析器BeautifulSoup用法.分享给大家供大家参考,具体如下: BeautifulSoup简介 我们知道,Python拥有出色的内置HTML解析器模块--HTMLParser,然而还有一个功能更为强大的HTML或XML解析工具--BeautifulSoup(美味的汤),它是一个第三方库.简单来说,BeautifulSoup最主要的功能是从网页抓取数据.本文我们来感受一下BeautifulSoup的优雅而强大的功能吧! BeautifulSoup安装 B

  • Python HTML解析模块HTMLParser用法分析【爬虫工具】

    本文实例讲述了Python HTML解析模块HTMLParser用法.分享给大家供大家参考,具体如下: 简介 先简略介绍一下.实际上,HTMLParser是python用来解析HTML的内置模块.它可以分析出HTML里面的标签.数据等等,是一种处理HTML的简便途径.HTMLParser采用的是一种事件驱动的模式,当HTMLParser找到一个特定的标记时,它会去调用一个用户定义的函数,以此来通知程序处理.它主要的用户回调函数的命名都是以"handle_"开头的,都是HTMLParse

  • python add_argument()用法解析

    这篇文章主要介绍了python add_argument()用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 介绍: argparse argparse 是 Python 内置的一个用于命令项选项与参数解析的模块,通过在程序中定义好我们需要的参数,argparse 将会从 sys.argv 中解析出这些参数,并自动生成帮助和使用信息.当然,Python 也有第三方的库可用于命令行解析,而且功能也更加强大,比如 docopt,Click.

  • python偏函数的实例用法总结

    说明 1.当函数的参数太多,需要简化时,使用functools.partial可以创建一个新的函数. 2.这个新的函数可以固定原始函数的部分参数,从而更容易调用. 作用是固定一个函数的某些参数(即设置默认值),返回一个新函数,调用这个新函数会更容易. 实例 >>> import functools >>> int2 = functools.partial(int, base=2) >>> int2('1000000') 64 >>>

  • python偏函数partial用法

    目录 1.什么是偏函数partial 2.偏函数的作用 3.偏函数的语法 4.案例 案例1 案例2 1.什么是偏函数partial python中提供一种对于函数固定属性的函数 2.偏函数的作用 把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数 3.偏函数的语法 使用偏函数必须先导入from functools import partial 函数格式:partial(func, *args, **kwargs) func:代表函数名 *args:func函数的不定长参数 **k

  • 深入解析Python中的多进程

    目录 前言 1.创建进程 2.多进程中的Queue 3.多进程与多线程的性能比较 4.进程池pool 5.共享内存 6.进程锁lock 前言 现在我们的计算机都是多个核的,通俗来说就是多个处理或者计算单元.为了加快运算和处理速度,我们可以将不同的任务交给多个核心进行同时处理,从而提高了运算速度和效率,多个核心同时运作就是多个进程同时进行,这就是多进程. 1.创建进程 创建进程和创建线程的方法基本一致,请看下面代码: # coding:utf-8 # 导入多进程的包,并重命名为mp import

  • python多线程用法实例详解

    本文实例分析了python多线程用法.分享给大家供大家参考.具体如下: 今天在学习尝试学习python多线程的时候,突然发现自己一直对super的用法不是很清楚,所以先总结一些遇到的问题.当我尝试编写下面的代码的时候: 复制代码 代码如下: class A():     def __init__( self ):         print "A" class B( A ):     def __init__( self ):         super( B, self ).__in

随机推荐