Python中偏函数用法示例

 更新时间:2018年06月07日 10:05:44   作者:有一种宿命叫无能为力  
这篇文章主要介绍了Python中偏函数用法,结合实例形式分析了Python基于functools模块创建和使用偏函数的相关操作技巧与注意事项,需要的朋友可以参考下

本文实例讲述了Python中偏函数用法。分享给大家供大家参考,具体如下:

python中偏函数

当一个函数有很多参数时,调用者就需要提供多个参数。如果减少参数个数,就可以简化调用者的负担。

比如,int()函数可以把字符串转换为整数,当仅传入字符串时,int()函数默认按十进制转换:

>>> int('12345')
12345

int()函数还提供额外的base参数,默认值为10。如果传入base参数,就可以做 N 进制的转换:

>>> int('12345', base=8)
5349
>>> int('12345', 16)
74565

假设要转换大量的二进制字符串,每次都传入int(x, base=2)非常麻烦,于是,我们想到,可以定义一个int2()的函数,默认把base=2传进去:

def int2(x, base=2):
  return int(x, base)

这样,我们转换二进制就非常方便了:

>>> int2('1000000')
64
>>> int2('1010101')
85

functools.partial就是帮助我们创建一个偏函数的,不需要我们自己定义int2(),可以直接使用下面的代码创建一个新的函数int2:

>>> import functools
>>> int2 = functools.partial(int, base=2)
>>> int2('1000000')
64
>>> int2('1010101')
85

所以,functools.partial可以把一个参数多的函数变成一个参数少的新函数,少的参数需要在创建时指定默认值,这样,新函数调用的难度就降低了。

任务

在第7节中,我们在sorted这个高阶函数中传入自定义排序函数就可以实现忽略大小写排序。请用functools.partial把这个复杂调用变成一个简单的函数:

sorted_ignore_case(iterable)

要固定sorted()cmp参数,需要传入一个排序函数作为cmp的默认值。

参考代码:

#!/usr/bin/python
#coding: utf-8
import functools
# cmp = lambda s1, s2: cmp(s1.upper(), s2.upper()) 最左边一定要有cmp = , 这样执行print的时候会执行
# 匿名函数中的cmp函数,关于为什么使用cmp = ,请看上面的例子中,base = 2, 如果说没有base = 的话,结果
# 肯定会出错
# cmp函数释义:
# cmp(x,y) 函数用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1
# 用于排序中,默认从小到大
sorted_ignore_case = functools.partial(sorted, cmp = lambda s1, s2: cmp(s1.upper(), s2.upper()))
print(sorted_ignore_case(['bob', 'about', 'Zoo', 'Credit']))
# 不使用偏函数的时候
'''
def cmp_ignore_case(s1, s2):
  u1 = s1.upper()
  u2 = s2.upper()
  if u1 > u2:
    return 1
  if u1 < u2:
    return -1
  return 0
print sorted(['bob', 'about', 'Zoo', 'Credit'], cmp_ignore_case)
'''

运行结果:

['about', 'bob', 'Credit', 'Zoo']

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python面向对象程序设计入门与进阶教程》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程

希望本文所述对大家Python程序设计有所帮助。

相关文章

  • 在Windows中安装Spire.XLS for Python的操作指南

    在Windows中安装Spire.XLS for Python的操作指南

    Spire.XLS for Python 是一款专业的 Python Excel 库,可用于在各种 Python 应用程序中读取、创建、编辑和转换 Excel (.xls & .xlsx) 文件,本文将介绍如何在 Windows 中安装 Spire.XLS for Python,需要的朋友可以参考下
    2025-02-02
  • python 列表的查询操作和切片

    python 列表的查询操作和切片

    这篇文章主要介绍了python 列表的查询操作和切片,列表是python内置的数据结构,相当于数组,列表中所有数据都是按顺序有序排列,列表属于序列类型,接下来一起学习下面的文章内容吧
    2022-01-01
  • python学习教程之使用py2exe打包

    python学习教程之使用py2exe打包

    py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具,下面这篇文章主要给大家介绍了关于python学习教程之使用py2exe打包的相关资料,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2017-09-09
  • python GUI库图形界面开发之PyQt5中QWebEngineView内嵌网页与Python的数据交互传参详细方法实例

    python GUI库图形界面开发之PyQt5中QWebEngineView内嵌网页与Python的数据交互传参详细方法

    这篇文章主要介绍了python GUI库图形界面开发之PyQt中QWebEngineView内嵌网页与Python的数据交互详细方法实例,需要的朋友可以参考下
    2020-02-02
  • python实现动态创建类的方法分析

    python实现动态创建类的方法分析

    这篇文章主要介绍了python实现动态创建类的方法,结合实例形式分析了Python动态创建类的原理、实现方法及相关操作技巧,需要的朋友可以参考下
    2019-06-06
  • 一文搞懂Pandas数据透视的4个函数的使用

    一文搞懂Pandas数据透视的4个函数的使用

    今天主要和大家分享Pandas中四种有关数据透视的通用函数,在数据处理中遇到这类需求时,能够很好地应对,快跟随小编一起学习一下吧
    2022-06-06
  • Python Paramiko模块的使用实际案例

    Python Paramiko模块的使用实际案例

    这篇文章主要介绍了Python Paramiko模块的使用实际案例,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • python使用itchat实现手机控制电脑

    python使用itchat实现手机控制电脑

    这篇文章主要为大家详细介绍了python使用itchat实现手机控制电脑,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • Python 冷门魔术方法小结

    Python 冷门魔术方法小结

    本文主要介绍了Python 冷门魔术方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-04-04
  • Python字符串查找和统计方法详解

    Python字符串查找和统计方法详解

    本教程将详细介绍Python中三种常用的字符串查找和统计方法:count()统计字符串出现次数、find()和index()检测子串位置,无论你是Python初学者还是想要巩固基础知识的程序员,这篇教程都能帮助你全面理解这些操作,需要的朋友可以参考下
    2025-04-04

最新评论