python之有关匿名函数和偏函数的定义,优点,以及使用方法

简介: python之有关匿名函数和偏函数的定义,优点,以及使用方法
匿名函数(lambda)的定义:

在python中,不用通过def来声明函数名字,而是通过lambda关键字来定义的函数称为匿名函数,lambda函数能接收任何数量的参数,但只能返回一个表达式的值,该变量就成了一个函数对象。


语法:lambda 参数:表达式(多个参数中间用逗号连接)

使用lambda函数的优点:

可以省去函数的定义,不需要像其他函数一样西先声明再使用,而可以在写函数的同时直接使用函数。

使用场景:

1.需要将一个函数对象作为参数来传递时,可以直接定义一个lambda函数(作为函数的参数或返回值)

举例:

def test(a,b,opt): #opt当做参数传递
    print(a)
    print(b)
    print(opt(1,8))
test(10,100,lambda x,y:x+y)#匿名函数作为参数
10
100
9

2.要解决的问题符合lambda函数的情况(任意多个参数和一个返回值),并且只有一个地方会使用这个函数,不会在其他地方重用,可以使用lambda函数

举例:

def add(m,n):#普通函数实现两数相加
    return m + n
print(add(1,9))
result = lambda m,n:m+n#匿名函数实现两数相加
print(result(1,9))
10
10

3.与一些Python的内置函数配合使用,提高代码的可读性

举例:

stus = [
    {"name":"zhangsan","age":28},
    {"name":"wangwu","age":20},
    {"name":"laowang","age":35}]
print("排列之前的顺序:")
print(stus)
print('根据名称:')
stus.sort(key=lambda m:m['name'])
print(stus)
print("根据年龄:")
stus.sort(key=lambda g:g['age'])
print(stus)
排列之前的顺序:
[{'name': 'zhangsan', 'age': 28}, {'name': 'wangwu', 'age': 20}, {'name': 'laowang', 'age': 35}]
根据名称:
[{'name': 'laowang', 'age': 35}, {'name': 'wangwu', 'age': 20}, {'name': 'zhangsan', 'age': 28}]
根据年龄:
[{'name': 'wangwu', 'age': 20}, {'name': 'zhangsan', 'age': 28}, {'name': 'laowang', 'age': 35}]
偏函数的定义:

在python中,如果在设置某个函数的时候,需要把函数的某个参数设置为固定的值,就可以使用偏函数来实现。

使用偏函数的好处:

将函数里面部分参数固定起来(默认值),后面再进行调用,简化函数的调用

偏函数实现:

1:import functools
2:from functools import partial(只导入了偏函数的库),partial(函数名称,参数=固定值)

例一:求两个数之和

from functools import partial
def add(a,b):
    return a + b
z=add(9,100)#普通函数调用
print(z)
a = partial(add,b=100) #偏函数调用,将b设置为固定的值,通过a参数绑定partial(add,100)返回一个新的函数,再调用执行
res = a(9)
print(res)
109
109

例二:求数字1010的二进制值是多少

from functools import partial
print(int('1010',base = 2))#直接转化,int(字符串或者整形,进制数) 不写默认十进制
def int2(str,base):#通过定义函数实现
    return int(str,base)
print(int2('1111',base=2))#调用函数
res = partial(int2,base=2)#通过使用偏函数,将进制设为预先可知变量
print(res('1111'))
10
15
15
相关文章
|
25天前
|
Java Go C++
【Python】函数的定义和调用、形参和实参、函数的返回值、多元赋值、全局和局部变量
【Python】函数的定义和调用、形参和实参、函数的返回值、多元赋值、全局和局部变量
17 0
|
3月前
|
数据安全/隐私保护 开发者 Python
在 Python 中定义封装?
【8月更文挑战第29天】
28 8
|
3月前
|
存储 程序员 Python
Python类的定义_类和对象的关系_对象的内存模型
通过类的定义来创建对象,我们可以应用面向对象编程(OOP)的原则,例如封装、继承和多态,这些原则帮助程序员构建可复用的代码和模块化的系统。Python语言支持这样的OOP特性,使其成为强大而灵活的编程语言,适用于各种软件开发项目。
31 1
|
3月前
|
数据采集 机器学习/深度学习 Java
Python中的偏函数及其广泛应用方式
Python 中的 functools.partial 函数不仅仅是一种实用工具,更是贯穿于各类编程场景的核心构件。 无论是在函数式编程、装饰器设计、GUI 编程、Web 开发、异步任务处理,还是数据预处理和机器学习等领域,偏函数都能助力开发者简化代码结构、增强代码可读性和可维护性,进而提升整体编程效率。 通过灵活运用偏函数,我们可以更好地封装和复用代码逻辑,打造出更为优雅、高效的程序。
|
3月前
|
对象存储 Python
Python代码解读-理解-定义一个User类的基本写法
以上描述清晰地阐述了如何在Python中定义 `User`类的基本方法以及如何创建和使用该类的实例。这是面向对象编程中的核心概念,是紧密结合抽象和实现,封装数据并提供操作数据的接口。由于用简单通用的语言易于理解,这样的解释对于初学者而言应该是友好且有帮助的。
36 4
|
3月前
|
SQL JSON C语言
Python中字符串的三种定义方法
Python中字符串的三种定义方法
|
3月前
|
机器学习/深度学习 计算机视觉 Python
深度学习项目中在yaml文件中定义配置,以及使用的python的PyYAML库包读取解析yaml配置文件
深度学习项目中在yaml文件中定义配置,以及使用的python的PyYAML库包读取解析yaml配置文件
80 0
|
3月前
|
NoSQL 开发工具 Redis
【Azure 环境】【Azure Developer】使用Python代码获取Azure 中的资源的Metrics定义及数据
【Azure 环境】【Azure Developer】使用Python代码获取Azure 中的资源的Metrics定义及数据
|
4月前
|
开发者 Python
Python函数与模块使用方法
【7月更文挑战第24天】Python 是一种功能强大的编程语言,拥有丰富的函数和模块,使得开发者能够轻松地构建复杂的应用程序。本文将介绍 Python 中函数和模块的基本使用方法,并提供一些代码实例。
42 3
|
3月前
|
存储 Python
Python 中的用户定义异常
【8月更文挑战第23天】
26 0