Python学习笔记6 函数式编程_20170619
廖雪峰python3学习笔记:
# 高阶函数
- 将函数作为参数传入,这样的函数就是高阶函数(有点像C++的函数指针)
def add(x, y):
return x+y def mins(x, y):
return x-y # 高阶函数
def computex, y, f):
return f(x) + f(y)
>>> computex(1,2,add)
3 >>> compute(4, 1, mins)
3 f = add
>>>f(1,2)
3
# map() 是一种高阶函数。第二个list参数内的元素都执行 f 操作
def f(x):
return x*x >>>map(f, [1,2,3,4,5])
[1,4,9,16,25]
# reduce 也是一种高阶函数。不好描述,看代码说明
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
# filter 高阶函数。过滤。第一个参数是true,保留。
def is_odd(n):
return n % 2 == 1 list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
# sort 排序
>>>sorted([1,5,2,6,0])
[0,1,2,5,6] >>>sorted([1,5,2,6,0], reverse = True)
[6, 5, 2, 1, 0] >>>sorted(['bob', 'about', 'Zoo', 'Credit'])
['Credit', 'Zoo', 'about', 'bob'] >>>sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)
['about', 'bob', 'Credit', 'Zoo']
# 函数作为函数的返回值
def lazy_sum(*args):
def sum():
ax = 0
for n in args:
ax = ax + n
return ax
return sum >>>f = lazy_sum(1, 3, 5, 7, 9)
# 不会被执行,lazy_sum 的函数实现和局部变量都保存在f中。 >>>f() # 才会执行
25
- 闭包 相关的参数和变量(外部的)都包含在返回的函数(内部的)中的情况称为“闭包”。注意局部变量的值
# 廖雪峰的例子
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
# 因为f1f2f3中的局部变量都是i,但是当f3生成后,i的值是3
返回闭包时牢记的一点就是:返回函数不要引用任何循环变量,或者后续会发生变化的变量。(廖雪峰)
# 匿名函数 lambda表达式
>>> list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
[1, 4, 9, 16, 25, 36, 49, 64, 81] # lambda 输入参数x : 函数体x*x
>>> f = lambda x: x * x # 没有函数冲突问题
>>> f
<function <lambda> at 0x101c6ef28>
>>> f(5)
25
# 装饰器 (还不大理解其存在的意义)
在不修改函数的前提上,增加函数的功能。
# 来自廖雪峰的代码
def log(func):
def wrapper(*args, **kw):
print('call %s():' % func.__name__) # 函数的名字属性
return func(*args, **kw)
return wrapper @log # @ 语法 相当于 now = log(now)
def now():
print('2015-3-25') # 调用
>>> now()
call now():
2015-3-25
# 偏函数(把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数)
# 数值转化
>>> int('', base=8) # 将字符串当做8进制数
5349
>>> int('', 16) # 16 进制
74565 # 偏函数
import functools
int2 = functools.partial(int, base=2) # 偏函数,固定参数为二进制转化。 # 调用
>>> int2('')
5349
Python学习笔记6 函数式编程_20170619的更多相关文章
- python学习笔记011——函数式编程
1 函数式编程 面向对象 ,面向过程 ,函数式编程 侧重函数的作用,注重函数结果的传递 函数可以被赋值,也可以接受其他的值 2 函数式编程特点 1.函数是一等公民 与其他变量一样,可以赋值和被赋值,可 ...
- 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 ...
随机推荐
- luoguP2852 [USACO06DEC]Milk Patterns
题意 显然如果有一个子串出现过\(k\)次,那么它必定是一个至少长为k的后缀序的\(LCP\),求出所有相邻的长为\(k-1\)的\(height\)数组的最小值,在其中取最大值即可 code: #i ...
- 使用Python写yaml用例
1.打开cmd,进入本机安装python的目录,执行 pip install pyyaml ,安装pyyaml第三方包. 2.在Pycharm中新建一个项目(已有的话就不需要啦) 新建yaml文件 ...
- JS中的undefined,null,"",0,'0'和false
){ console.log(); } '){ console.log() } '){ console.log() } if(false==0.0){ console.log() } if(false ...
- C#教程之C#属性(Attribute)用法实例解析
引用:https://www.xin3721.com/ArticlecSharp/c11686.html 属性(Attribute)是C#程序设计中非常重要的一个技术,应用范围广泛,用法灵活多变.本文 ...
- HTML连载32-背景颜色、背景图片、背景填充
一.背景 1.如何设置标签的背景颜色 (1)在CSS中有一个background-color:属性值:,就是专门用来设置标签的背景颜色. (2)取值:具体单词.RGB.RGBA.十六进制 例子: &l ...
- CMPT 300 – Operating Systems
Assignment 4 – Create Simple YetFunctional File SystemCMPT 300 – Operating SystemsPlease submit a zi ...
- Mongodb--内存管理MMAP
MongoDB使用的是内存映射存储引擎,即Memory Mapped Storage Engine,简称MMAP. MMAP可以把磁盘文件的一部分或全部内容直接映射到内存,这样文件中的信息位置就会在内 ...
- k8s笔记之chartmuseum搭建
一.下载安装包 #在master节点中执行,以下这条命令就是下载文件到当前目录而已,下载完成之后让我们将chartmuseum赋予权限,就是可执行了chmod chartmuseum,然后移动到/us ...
- 利用 Symbol Type Viewer 工具实现将 pdb 文件 转换为 c\c++ 头文件
利用 Symbol Type Viewer 工具实现将 pdb 文件 转换为 c\c++ 头文件 一.得到符号 二.将符号转换为 .h 文件 三.得到 c\c++ 头文件,之后编程时直接导入这个文件即 ...
- Docker 镜像-管理-导入-导出
目录 Docker 镜像基本概念 Docker 镜像加速 Docker 镜像 常用命令 Docker 镜像的创建和导出导入 Docker 镜像基本概念 我们使用的容器都是基于镜像的,镜像是由多层组成的 ...