python 中的匿名函数lamda和functools模块
为什么 要把匿名函数和functools模块写在一起?
因为 lamda函数和functools模块都是对函数一种增强或者是简化。
匿名函数:
为了解决那些功能很简单的需求而设计一次性的需求函数
#"有名函数"
def calc(n):
return n**n
print(calc(10)) #换成匿名函数
calc = lambda n:n**n
print(calc(10))

函数名 = lambda 参数 :返回值 #参数可以有多个,用逗号隔开
#匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值
#返回值和正常的函数一样可以是任意数据类型 functools模块
偏函数partial
partial函数可以重新绑定函数的可选参数,生成一个callable的partial对象,这也认为是一个新函数(部分参数被固定的新函数)。
functools.partial(func[,*args][, **keywords])
Return a new partial object which when called will behave like funccalled with the positional arguments args and keyword arguments keywords.
If more arguments are supplied to the call, they are appended to args. If additional keyword arguments are supplied, they extend and override keywords.
# /usr/bin/env Python3
# -*- encoding:UTF-8 -*-
from functools import partial
def sum(*args):
s = 0
for n in args:
s = s + n
return s sum_add_10 = partial(sum, 10) # 10 作用在sum第一个参数的位置
sum_add_10_20 = partial(sum, 10, 20) # 10 20 分别作用在sum第一个和第二个参数的位置
print('A____________我们看下原函数sum的函数地址入口:')
print(sum)#<function sum at 0x000001C9761E2400>
print('B______我们看下partial函数返回函数的地址入口:')
print(partial(sum, 10))#functools.partial(<function sum at 0x000001C9761E2400>, 10)
print(sum_add_10(1, 2, 3, 4, 5)) # --> 10 + 1 + 2 + 3 + 4 + 5 = 25
有几点要注意的:
绑定参数按顺序不能跳跃。所以也不怎么好用。
reduce函数
和内置函数reduce一样,据说是为了兼容性。

reduce的工作过程是 :在迭代sequence(tuple ,list ,dictionary, string等可迭代物)的过程中,首先把 前两个元素传给 函数参数,函数加工后,然后把得到的结果和第三个元素作为两个参数传给函数参数, 函数加工后得到的结果又和第四个元素作为两个参数传给函数参数,依次类推。 如果传入了 initial 值, 那么首先传的就不是 sequence 的第一个和第二个元素,而是 initial值和 第一个元素。经过这样的累计计算之后合并序列到一个单一返回值
from functools import reduce
result = reduce(lambda x, y: str(x) + "" + str(y), [1, 2, 3, 4, 5])
print(result)
((((1+2)+3)+4)+5)
要想尝试其他玩法参考博客:https://www.cnblogs.com/lonkiss/p/understanding-python-reduce-function.html
python 中的匿名函数lamda和functools模块的更多相关文章
- Python中的匿名函数lambda的用法
一.lambda函数的简介 对lambda函数,它其实是一个类似于def的函数,只不过lambda是一个不需要定义函数名的匿名函数.当我们在有些时候,需要做一些简单的数学计算时,如果定义一个def函 ...
- Python 中的匿名函数,你滥用了吗?
概念 我们从一个例子引入. 这里有一个元素为非空字符串的列表,按字符串最后一个字母将列表进行排序.如果原列表是 ['abc', 'g', 'def'],则结果应该是 ['abc', 'def', 'g ...
- python中的匿名函数
python 使用 lambda 来创建匿名函数. 所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数. lambda 只是一个表达式,函数体比 def 简单很多. lambda的主体是一 ...
- python中lambda匿名函数与函数之间的关系
- python中变量、函数、类名、模块名等命名方式
摘要:模块名:小写字母,单词之间用_分割ad_stats.py包名:和模块名一样类名:单词首字母大写AdStatsConfigUtil全局变量名(类变量,在java中相当于static变量):大写字母 ...
- Python中关于Lambda函数的使用总结
lambda表达式是一种匿名函数,对应python中的自定义函数def,是定义某个函数时比较高级的一种写法.作为python初学者,本文整理了lambda的一些基本用法和特点. lambda和def的 ...
- Python之路Python作用域、匿名函数、函数式编程、map函数、filter函数、reduce函数
Python之路Python作用域.匿名函数.函数式编程.map函数.filter函数.reduce函数 一.作用域 return 可以返回任意值例子 def test1(): print(" ...
- Python中的lambda函数介绍
Lambda函数,即Lambda 表达式(lambda expression),是一个匿名函数(不存在函数名的函数),Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lam ...
- jquery'中的匿名函数
//jquery'中的匿名函数 (function(){ alert("this is a test"); })(); //和这个基于jQuery的比较下: $(funct ...
随机推荐
- Oracle的查询-子查询
--子查询 --子查询返回一个值 --查询出工资和scott一样的员工信息 select * from emp where sal in (select sal from emp where enam ...
- centos8自定义目录安装nginx
1.安装工具和库 # PCRE是一个Perl库,包括 perl 兼容的正则表达式库.nginx 的 http 模块使用 pcre 来解析正则表达式 # zlib库提供了很多种压缩和解压缩的方式, ng ...
- python 字典所有操作
# 字典的创建# dict1 = {}# print(type(dict1))## dict2 = {# 'name':'汪峰',# 'sex':'男',# 'hiredate':'1997-10-2 ...
- 指针生成网络(Pointer-Generator-Network)原理与实战
指针生成网络(Pointer-Generator-Network)原理与实战 阅读目录 0 前言 1 Baseline sequence-to-sequence 2 Pointer-Generat ...
- 作业10:String类
一.基本案例 1.new String("helloworld") 与 "helloworld" public static void main(String[ ...
- DotNet跨平台 - .net core项目部署到centos7
环境说明 系统:CentOS Linux release 7.2.1511 (Core) 相关工具:VS2017 xftp 服务器软件:.net core2.0,nginx 准备.net core应 ...
- mysql 8.0.13开启远程连接 配置方式
1:linux登录mysql [root@localhost mysql]# mysql -u root -p Enter password: Welcome to the MySQL monitor ...
- JavaScript实现按照指定长度为数字前面补零输出的方法
本文实例讲述了JavaScript实现按照指定长度为数字前面补零输出的方法.分享给大家供大家参考.具体分析如下: 例如我们希望输出的数字长度是固定的,假设为10,如果数字为123,则输出0000000 ...
- springboot-异步、发送邮件(二)
@Test //发送复杂邮件 void contextLoads2() throws MessagingException { MimeMessage mimeMessage = mailSender ...
- JS 实现继承的方法 ES6 and ES5
继承 ES6 方法 (类的继承) ES6中有一个属性的 extends 语法: • class Father {} • class Son extends Father{} 注意:是子类 ...