廖雪峰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的更多相关文章

  1. python学习笔记011——函数式编程

    1 函数式编程 面向对象 ,面向过程 ,函数式编程 侧重函数的作用,注重函数结果的传递 函数可以被赋值,也可以接受其他的值 2 函数式编程特点 1.函数是一等公民 与其他变量一样,可以赋值和被赋值,可 ...

  2. Python学习笔记之函数式编程

    python中的高阶函数 高阶函数就是 变量名指向函数,下面代码中的变量abs其实是一个函数,返回数字的绝对值,如abs(-10) 返回 10 def add(x,y,f): return f(x) ...

  3. python学习笔记(六) 函数式编程

    一 函数对象 函数同样可以作为对象复制给一个变量,如下: f = abs; print(f(-10)) f = 'abs'; print(f) def add(a,b,f): return f(a) ...

  4. python学习笔记1 -- 函数式编程之高阶函数 sorted排序

    python提供了很强大的内置排序函数,妈妈再也不担心我不会写冒泡排序了呀,sorted函数就是这个排序函数,该函数参数准确的说有四个,sorted(参数1,参数2,参数3,参数4). 参数1 是需要 ...

  5. python学习笔记1 -- 函数式编程之高阶函数 map 和reduce

    我用我自己,就是高阶函数,直接表现就是函数可以作为另一个函数的参数,也可以作为返回值 首先一个知识点是 函数的表现形式,印象中的是def  fw(参数)这种方式定义一个函数 python有很多的内置函 ...

  6. python学习笔记1 -- 函数式编程之高阶函数 使用函数作为返回值

    使用函数作为返回值,看起来就很高端有木有,前面了解过函数名本身就是一个变量,就比如abs()函数,abs只是变量名,而abs()才是函数调用,那么我们如果把ads这个变量作为返回值返回会怎么样呢,这就 ...

  7. python学习笔记1 -- 函数式编程之高阶函数 filter

    filter 函数用于过滤序列,与map 和reduce函数类似,作为高阶函数,他们也是同样的使用方法,filter(参数1, 参数2),参数1是一个函数,而参数2是一个序列. filter的作用是根 ...

  8. python学习笔记(七):面向对象编程、类

    一.面向对象编程 面向对象--Object Oriented Programming,简称oop,是一种程序设计思想.在说面向对象之前,先说一下什么是编程范式,编程范式你按照什么方式来去编程,去实现一 ...

  9. Clojure学习笔记(二)——函数式编程

    定义 “函数式编程”是一种编程范式(programming paradigm),即如何编写程序的方法论.主要思想是把运算过程尽量写成一系列嵌套的函数调用. 举例来说,现在有这样一个数学表达式: (1 ...

随机推荐

  1. 解决Python开发中,Pycharm中无法使用中文输入法问题

    Pycharm是开发Python程序的利器,但有时会遇到无法输入中文的情况.表现为:在Ubuntu系统可以正常输入中文,却在Pycharm内写注释的时候,切换不出中文.下面演示如何解决此问题. 1.在 ...

  2. SQL Server 创建 修改 删除数据表

    1. 图形界面方式操作数据表 (1)创建和修改数据表 列名中如果有两个以上单词时,最好用下划线连接,否则可能会给将来的查询维护带来不便.我们公司美国佬做的数据库就很烦,所有列名都有空格,一旦忘记用方括 ...

  3. DDR基础知识

    1.前言 DDR的全称为Double Data Rate SDRAM,也就是双倍速率的SDRAM,SDRAM在一个CLK周期传输一次数据,而DDR在一个CLK周期传输两次数据,分别在上升沿和下降沿各传 ...

  4. 一.OS运行机制

    运行机制: 1.中断(外部) =====一种通知行为(例如插入键盘) 2.系统调用(主动反应) ===一种请求行为 3.异常(内部) =====一种错误处理行为 系统调用和程序接口的关系,接口把系统调 ...

  5. SSM整合教程

    接着一直next下去 创建各个目录 pom.xml文件中引入各种包 <?xml version="1.0" encoding="UTF-8"?> & ...

  6. WPF DataGrid使用DataTable为数据源,添加CheckBox列使用Delete删除行的方法

    首先将CanUserDeleteRows设置为False, 其次是设置KeyUp事件 并自定义DataGrid.Columns修改如下 <DataGrid x:Name="DG&quo ...

  7. kali渗透综合靶机(十七)--HackInOS靶机

    kali渗透综合靶机(十七)--HackInOS靶机 靶机下载地址:https://www.vulnhub.com/hackinos/HackInOS.ova 一.主机发现 1.netdiscover ...

  8. xshell使用zmodem拖拽上传

    一.目的 windows向centos_linux服务器上传文件可以用ftp上传,但是没zmodem方便,zmodem拖拽上传,可以上传到指定的目录下. 二.安装使用 执行下面的命令安装后就可以使用了 ...

  9. Ansible Jinja2 模板

    1.jinja2渲染NginxProxy配置文件 jinja2 房屋建筑设计固定的? jinja2模板与Ansible关系 Ansible如何使用jinja2模板 template模块 拷贝文件? t ...

  10. 十一:外观模式详解(Service,action与dao)

    定义:外观模式是软件工程中常用的一种软件设计模式.它为子系统中的一组接口提供一个统一的高层接口.这一接口使得子系统更加容易使用. 该定义引自百度百科,它的表现很简单,将一系列子接口的功能进行整理,从而 ...