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 ...
随机推荐
- 浅谈C++ STL queue 容器
浅谈C++ STL queue 容器 本篇随笔简单介绍一下\(C++STL\)中\(queue\)容器的使用方法和常见的使用技巧.\(queue\)容器是\(C++STL\)的一种比较基本的容器.我们 ...
- angular 运行报错
angular 运行时报错ERROR in node_modules/rxjs/internal/types.d.ts(81,44): error TS1005: ';' expected. node ...
- Codeforces Round #553 (Div. 2) E 贡献
https://codeforces.com/contest/1151/problem/E 题意 一条长n的链,每个点上有值\(a[i]\),定义\(f(l,r)\)为该区间的\(值\)所代表的点留下 ...
- 剑指offer:剪绳子(找规律,贪心算法,动态规划)
1. 题目描述 /* 题目描述 给你一根长度为n的绳子,请把绳子剪成m段(m.n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m].请问k[0]xk[1] ...
- yum安装软件报错Error: Nothing to do
今天在一台新服务器上装一些常用软件,一开始安装ncdu(一个很好用的磁盘分析工具,用来查找大文件),报错如下: 在网上找了各种办法,什么更新yum啊,清理yum缓存啊的,统统没用 最后的找到的问题是, ...
- geth 基本使用
概要 geth 是以太坊的官方 golang 客户端. 通过 geth 的使用可以直观的了解以太坊, 乃至区块链的运作. 下面, 通过 geth 来构造一次搭建私链, 创建账户, 挖矿, 交易的流程. ...
- io机制沉思录:分层与管理
io模型的核心是内核kernel与应用(线程)的关系: 内核与应用的联系:数据状态信号和数据本身: 一.分层模型: 应用层——内核层——设备层 https://www.cnblogs.com/feng ...
- 阿里云(百度云)Linux系统挂载磁盘
阿里云(百度云)Linux系统挂载磁盘
- [CrackMe]160个CrackMe之001
吾爱破解专题汇总:[反汇编练习]160个CrackME索引目录1~160建议收藏备用 一.Serial/Name 之 暴力破解 1. 熟悉界面:很常规的一个界面,输入完账号密码之后会进行验证. 2. ...
- WPF中获取Hwnd与窗体,Uid获取控件
void MapControl_Loaded(object sender, RoutedEventArgs e) { this.OnApplyTemplate(); CurrentMapChanged ...