python学习笔记(2): 函数式编程
函数式编程
高阶函数
map()
map接受一个函数和一个可迭代对象(Iterable),返回一个map对象(Iterator)
def f(x):
return x*x
list(map(f, [1,2,3]))
#1,4,9
reduce()
reduce接受一个函数(这个函数只能接受两个参数)和一个可迭代对象(Iterable),结果如下:
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
filter()
reduce接受一个函数(这个函数返回True或False)和一个可迭代对象(Iterable),返回True保留元素,否则删除元素。返回一个迭代器。看一个素数筛的例子(太牛了):
def _odd_iter():
n = 1
while True:
n = n + 2
yield n
def _not_divisible(n):
return lambda x: x % n > 0
def primes():
yield 2
it = _odd_iter() # 初始序列
while True:
n = next(it) # 返回序列的第一个数
yield n
it = filter(_not_divisible(n), it) # 构造新序列
sorted()
sorted([-1,4,2], key = abs, reverse = True)
参数key是根据key返回结果进行排序,上述例子是按绝对值排序。
返回函数
返回函数就是一个函数的返回值可以是另一个函数对象,且返回的函数内部可以使用母函数的局部变量。
def f():
a = 10
def ff():
return a*a
return ff
注意子函数内部避免使用循环变量!
def count():
fs = []
for i in range(1, 4):
def f():
return i*i
fs.append(f)
return fs
f1, f2, f3 = count()
f1() #9
f2() #9
f3() #9
因为都使用了局部变量,fx运行是在count函数之后,count函数运行完时i的值是3,所以三个函数的返回值都是3。
还要注意内层函数要写外层函数的变量时,必须要用 # nonlocal x 声明x是外层变量。
匿名函数
lambda 参数 : 返回值
# 注意不写return
装饰器
语法是在函数定义上一行写上:@装饰器名称,装饰器是一个接受函数参数的函数。
def log(f):
def wrapper(*args, **kw):
print('call %s:' % f.__name__)
return f(*args, **kw)
return wrapper
@log
def sqrt(x):
return x*x
#等价于 sqrt = log(sqrt)
如果装饰器想接收参数,可以写一个函数,这个函数接收参数,并且返回值是一个装饰器。
def log(text):
def decorator(f):
def wrapper(*args, **kw):
print('call %s:' % f.__name__)
return f(*args, **kw)
return wrapper
return decorator
@log('want to say')
def sqrt(x):
return x*x
#等价于 sqrt = log('want to say')(sqrt)
偏函数
偏函数就是把一个函数的某些参数固定后的函数:
int2 = functools.partial(int, base = 2)
#得到将二进制字符串转换为10进制整数的函数等价于
def int2(x, base = 2):
return int(x, base)
python学习笔记(2): 函数式编程的更多相关文章
- python学习笔记011——函数式编程
1 函数式编程 面向对象 ,面向过程 ,函数式编程 侧重函数的作用,注重函数结果的传递 函数可以被赋值,也可以接受其他的值 2 函数式编程特点 1.函数是一等公民 与其他变量一样,可以赋值和被赋值,可 ...
- Python学习笔记6 函数式编程_20170619
廖雪峰python3学习笔记: # 高阶函数 将函数作为参数传入,这样的函数就是高阶函数(有点像C++的函数指针) def add(x, y): return x+y def mins(x, y): ...
- Python学习笔记之函数式编程
python中的高阶函数 高阶函数就是 变量名指向函数,下面代码中的变量abs其实是一个函数,返回数字的绝对值,如abs(-10) 返回 10 def add(x,y,f): return f(x) ...
- python学习笔记(六) 函数式编程
一 函数对象 函数同样可以作为对象复制给一个变量,如下: f = abs; print(f(-10)) f = 'abs'; print(f) def add(a,b,f): return f(a) ...
- python学习笔记1 -- 函数式编程之高阶函数 sorted排序
python提供了很强大的内置排序函数,妈妈再也不担心我不会写冒泡排序了呀,sorted函数就是这个排序函数,该函数参数准确的说有四个,sorted(参数1,参数2,参数3,参数4). 参数1 是需要 ...
- python学习笔记1 -- 函数式编程之高阶函数 map 和reduce
我用我自己,就是高阶函数,直接表现就是函数可以作为另一个函数的参数,也可以作为返回值 首先一个知识点是 函数的表现形式,印象中的是def fw(参数)这种方式定义一个函数 python有很多的内置函 ...
- python学习笔记1 -- 函数式编程之高阶函数 使用函数作为返回值
使用函数作为返回值,看起来就很高端有木有,前面了解过函数名本身就是一个变量,就比如abs()函数,abs只是变量名,而abs()才是函数调用,那么我们如果把ads这个变量作为返回值返回会怎么样呢,这就 ...
- python学习笔记1 -- 函数式编程之高阶函数 filter
filter 函数用于过滤序列,与map 和reduce函数类似,作为高阶函数,他们也是同样的使用方法,filter(参数1, 参数2),参数1是一个函数,而参数2是一个序列. filter的作用是根 ...
- python学习笔记(七):面向对象编程、类
一.面向对象编程 面向对象--Object Oriented Programming,简称oop,是一种程序设计思想.在说面向对象之前,先说一下什么是编程范式,编程范式你按照什么方式来去编程,去实现一 ...
- Clojure学习笔记(二)——函数式编程
定义 “函数式编程”是一种编程范式(programming paradigm),即如何编写程序的方法论.主要思想是把运算过程尽量写成一系列嵌套的函数调用. 举例来说,现在有这样一个数学表达式: (1 ...
随机推荐
- Wamp MySQL 报错 Got a packet bigger than 'max_allowed_packet' bytes
点击电脑右下角wamp图标,然后进入mysql 下面的 my.ini 转移数据发现报这个错,字面意思允许的不够大.网上很多说法不起作用,解决方法如下: [mysqld] port=3306 expli ...
- Linux离线安装MySQL(5.7.22)
1.下载tar包 (1)Window PC下载(PC需要联网) MySQL官网地址:https://www.mysql.com/ MySQL社区版下载地址: https://dev.mysql.com ...
- 【译】宣布推出适用于 .NET 的 Azure Migrate 应用程序和代码评估工具
原文 | Olia Gavrysh 翻译 | 郑子铭 我们很高兴地宣布发布一款新工具,可以帮助您将本地 .NET 应用程序迁移到 Azure. 适用于 .NET 的 Azure Migrate 应用程 ...
- 借助Rich库实现Pandas DataFrame颜值升级
pandas的DataFrame功能强大自不必说,它可以帮助我们极大的提高统计分析的效率. 不过,使用DataFrame开发我们的分析程序的时候,经常需要打印出DataFrame的内容,以验证和调试数 ...
- .NET 团队公布.NET 9开发目标 并发布.NET9的首个预览版
在一篇博文中我们对 .NET 9 的愿景[1]: .NET团队概述了.NET 9的开发目标和最终愿景,涵盖两大重点领域:云原生和智能应用程序开发.它在继.NET 8之后,继续强化对云原生应用和性能的支 ...
- CF1089K King Kog's Reception 题解
题目传送门 前置知识 线段树 解法 第一眼感觉和 luogu P1083 [NOIP2012 提高组] 借教室 很像.本题同样采用线段树维护,\(sum_{l,r}(1 \le l \le r \le ...
- NC204418 新集合
题目链接 题目 题目描述 集合 \(s\) 中有整数 \(1\) 到 \(n\) ,牛牛想从中挑几个整数组成一个新的集合. 现在牛妹给牛牛加了 \(m\) 个限制 ,每个限制包含两个整数 \(u\) ...
- 一文总结 C++ 常量表达式、constexpr 和 const
TLDR 修饰变量的时候,可以把 constexpr 对象当作加强版的 const 对象:const 对象表明值不会改变,但不一定能够在编译期取得结果:constexpr 对象不仅值不会改变,而且保证 ...
- 使用RBF神经网络实现函数逼近
python实现的RBF神经网络见:基于tensorflow的RBF神经网络案例 1 一元函数逼近 1.1 待逼近的函数 1.2代码 %%%%%%%%%%一元函数逼近%%%%%%%%%% clear, ...
- win32 - 使用GDI+从资源中获取图像并加载
很多时候我们习惯使用GDI+中Image类来加载本地文件,但是有时候我们需要资源中从加载png格式的图片时,却无法使用该类. 我们可以使用FindResource,LoadResource和LockR ...