1-高阶函数

  变量可以指向函数。   def add(x, y, f): 例如f参数为函数

编写高阶函数,就是让函数的参数能够接收别的函数。

Python内建了map()reduce()高阶函数。

1.1 将list每项相乘

def f(x):
return x*x
r = map(f, [1,2,3,4,5,6,7])
list(r) #[1, 4, 9, 16, 25, 36, 49] 每个变量的平方

1.2 把int转成字符串

list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9])) #把int转成字符串

1.3 把str转换为int的函数:

from functools import reduce
def fn(x, y):
return x * 10 + y def char2num(s):
digits = {'': 0, '': 1, '': 2, '': 3, '': 4, '': 5, '': 6, '': 7, '': 8, '': 9}
return digits[s] print(reduce(fn, map(char2num, '')))把str转换为int的函数:

1.4 filter使用

def not_empty(s):
return s and s.strip()
list(filter(not_empty, ['A','B ','',None,'C',' ']))

1.5 sorted使用

print(sorted([1,22,33,21,8])) #默认排序
print(sorted(['a','Z','B','c'],key=str.lower)) #按小写排序
print(sorted(['a','Z','B','c'],key=str.lower,reverse=True)) #按小写反向排序 def my_Sorted(item):
return item[0]
L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
sorted(L,key=my_Sorted) #自定义的排序

1.6 闭包

def count():
fs = []
for i in range(1, 4):
def f():
return i*i
fs.append(f)
return fs f1, f2, f3 = count() # 9 9 9 a,b,c = [1,2,3] #a=1,b=2,c=3

1.7 匿名函数  如: f= lambda x: x*x

list(map(lambda x: x*x, [1,2,3,4,5,6,7,8,9]))#[1, 4, 9, 16, 25, 36, 49, 64, 81]

1.8 装饰器 (装饰现有函数,返回一个新的函数。)

import functools
def log(func):
@functools.wraps(func) #相当wrapper.__name__ = func.__name__
def wrapper(*args,**kw):
print("call %s():" % func.__name__);
return func(*args, **kw)
return wrapper
@log
def now():
print('2018-05-11')
now() #相当 now = log(now)

带参装饰器

import functools
def log1(text):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kw):
print('%s %s:' % (text, func.__name__))
return func(*args, **kw)
return wrapper
return decorator @log1('exceue')
def now1():
print('2018-5-5')
now1() #now = log('execute')(now)
#我们来剖析上面的语句,首先执行log('execute'),返回的是decorator函数,
#再调用返回的函数,参数是now函数,返回值最终是wrapper函数。

1.9 偏函数(通过设定参数的默认值,可以降低函数调用的难度。而偏函数也可以做到这一点)

int('',base=2) #结果23, 以2进行进行转换

import functools
int2 = functools.partial(int, base=2)#自定义的偏函数
print(int2('')) #结果23,

python-4函数式编程的更多相关文章

  1. python基础-函数式编程

    python基础-函数式编程  高阶函数:map , reduce ,filter,sorted 匿名函数:  lambda  1.1函数式编程 面向过程编程:我们通过把大段代码拆成函数,通过一层一层 ...

  2. 可爱的 Python : Python中函数式编程,第一部分

    英文原文:Charming Python: Functional programming in Python, Part 1 摘要:虽然人们总把Python当作过程化的,面向对象的语言,但是他实际上包 ...

  3. Python的函数式编程: map, reduce, sorted, filter, lambda

    Python的函数式编程 摘录: Python对函数式编程提供部分支持.由于Python允许使用变量,因此,Python不是纯函数式编程语言. 函数是Python内建支持的一种封装,我们通过把大段代码 ...

  4. python 10函数式编程

                                                                               函数式编程 函数是Python内建支持的一种封装, ...

  5. python之函数式编程

    python提供了支持函数式编程的简单机制: 1. map函数 2. filter函数 3. reduce函数. 典型的M/R计算模型. 但还是有点简单...

  6. 可爱的 Python : Python中函数式编程,第二部分

    英文原文:Charming Python: Functional programming in Python, Part 2,翻译:开源中国 摘要:  本专栏继续让David对Python中的函数式编 ...

  7. python专题-函数式编程

    函数式编程是使用一系列函数去解决问题,按照一般编程思维,面对问题时我们的思考方式是"怎么干",而函数函数式编程的思考方式是我要"干什么". 至于函数式编程的特点 ...

  8. Python进阶 函数式编程和面向对象编程等

    函数式编程 函数:function 函数式:functional,一种编程范式.函数式编程是一种抽象计算机的编程模式. 函数!= 函数式(如计算!=计算机) 如下是不同语言的抽象 层次不同 高阶函数: ...

  9. 【python】函数式编程

    No1: 函数式编程:即函数可以作为参数传递,也可以作为返回值  No2: map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的 ...

  10. python,函数式编程

    函数式编程: 特点:允许传递的参数是函数,且允许返回一个函数. 由于Python允许使用变量,因此,Python不是纯函数式编程语言,同样的输入可能输出不同,有副作用.纯函数式编程语言没有变量,输入和 ...

随机推荐

  1. html meta标签实现页面跳转

    refresh用于刷新与跳转(重定向)页面 refresh出现在http-equiv属性中,使用content属性表示刷新或跳转的开始时间与跳转的网址 <!DOCTYPE html> &l ...

  2. VueJs组件prop验证简单理解

    今天看了vuejs的组件,看到了prop组件,主要作用是在传入数据的时候对传入的值做判断,写了个小例子. <div id="app"> <my-child :nu ...

  3. Smile with face. Smile with mind.

    Smile with face. Smile with mind.微笑不仅是挂在脸上的,更是发自心底的.

  4. http头部如何对缓存的控制

    文章自于我的个人博客 使用缓存的目的就是在于减少计算,IO,网络等时间,可以快速的返回,特别是流量比较大的时候,可以节约很多服务器带宽和压力. 一个请求从缓存的方面来说,有三个过程. 本地检查缓存是否 ...

  5. ListView优化的时候ViewHolder的简洁写法

    在ListVIew做复用优化的时候,经常会写ViewHolder,还需要很麻烦的去findview,我最讨厌写一堆的这样代码了,今天看到了一个极简的写法,很好用,很简洁啊!!! public stat ...

  6. html中如何使用python屏蔽一些基本功能

    进行数据解析的理由不计其数,相关的工具和技巧也同样如此.但是,当您需要用这些数据做一些新的事情时,即使有“合适的”工具可能也是不够的.这一担心对于异类数据源的集成同样存在.用来做这项工作的合适工具迟早 ...

  7. 利用XShell和WinSCP连接本机和Linux虚拟机——Kali部署

    1.XShell支持在本机直接连接Linux终端,加快速度,支持命令的复制粘贴 2.WinSCP 支持本机与Linux的文件复制粘贴 关键:使用SSH协议,所以要在Linux开启ssh服务,下面以Ka ...

  8. IOS NSThread 线程间通信

    @interface HMViewController () @property (weak, nonatomic) IBOutlet UIImageView *imageView; @end @im ...

  9. 进程—内存描述符(mm_struct)

    http://blog.csdn.net/qq_26768741/article/details/54375524 前言 上一篇我们谈论了task_struct这个结构体,它被叫做进程描述符,内部成员 ...

  10. HDU 3639 Hawk-and-Chicken(强连通分量+缩点)

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u013480600/article/details/32140501 HDU 3639 Hawk-a ...