map的用法

def fn(x):
return x*2
L1 = [1,2,3,4,5,6]
L2 = list(map(fn,L1))
L2
[2, 4, 6, 8, 10, 12]

通过上面的运行,可以知道map就是把一个数组内所有的元素都执行map加入的方法。

用法如下 map(方法,数组)

reduce的用法

先看例子

from functools import reduce
def add(x,y):
return x + y
L1 = [1,2,3,4,5,6] L2 = reduce(add,L1)
L2
21

通过上面的例子,直观的来看,我们可以发现reduce和map方法有一些不一样。

  1. map是python自带的函数,而reduce需要引入functools
  2. map 返回的是一个map对象,而reduce是返回的一个数字
  3. map函数需要一个参数,而reduce的参数需要两个。

map是对一个集合中的每个元素执行指定的方法。而reduce则是依次对集合的元素调用指定的方法。先把前两个参数执行reduce以后形成的返回之作为第一个参数,再和第三个参数形成返回值,依次执行。

filter函数

filter则是对集合的每个元素执行一次判断,能让filter指定的函数返回真值则返回,否则则不出现在返回集合中。

def fn(x):
return x%2 ==0
L1 = [1,2,3,4,5,6,7,8]
F1 = filter(fn,L1)
print(F1)
print(list(F1))
<filter object at 0x7f1d38369358>
[2, 4, 6, 8]

sorted

顾名思义排序。用法如下

sorted(集合,key=排序的算法,reverse=True) #reverse=True如果添加反向排序

返回函数(闭包)

def fn(x):
def add(y):
return x + y
return add
a = fn(5)
a(6)
11

需要注意的是闭包的代码是到最后执行a(6)的时候,才调用了函数里面的执行。举个例子

def fn():
rs = []
for i in range(4):
def sub():
return i
rs.append(sub)
return rs
a,b,c,d = fn() print(a())
print(b())
print(c())
print(d())
3
3
3
3

从上面的例子中,我们如果没有理解到返回的函数是在最后加上括号的时候才调用,可能以为返回之是0,1,2,3



但是实际上def sub()里面的内容一直都没执行,但是外面的i 一直到了3.当调用a()的时候。开始执行。所以如上面的返回结果。

def efn():
i = 1
def sub():
i = i + 1
return i
return sub t = efn()
t()
---------------------------------------------------------------------------

UnboundLocalError                         Traceback (most recent call last)

<ipython-input-15-7574f0a729df> in <module>()
7
8 t = efn()
----> 9 t() <ipython-input-15-7574f0a729df> in sub()
2 i = 1
3 def sub():
----> 4 i = i + 1
5 return i
6 return sub UnboundLocalError: local variable 'i' referenced before assignment

上面的报错,需要引入关键词nonlocal 如下:

def efn():
i = 1
def sub():
#关键字
nonlocal i
i = i + 1
return i
return sub t = efn()
print(t())
print(t())
2
3

匿名函数

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函数或者匿名函数的意义

f = lambda x,y:x + y
f(5,6)
11

我们大概可以看到lambda函数的:前面相当于参数,后面的是返回数值

装饰器

我的理解类似java中的AOP或者.net中的面向切片编程

'''比如调用一个方法的时候,我们期望另外一个方法也被调用。比如我们执行一个操作,期望不改变任何代码,就可以打印出来这个方法的日志'''
def log(func):
def wraper(*args,**kw):
print(func.__name__+' is call to log')
return func(*args,**kw)
return wraper @log
def fn():
print('this is fn') fn()
fn is call to log
this is fn
''' 如果我们希望往log里面传递参数'''
def log(text):
def decorator(func):
def wraper(*args,**kw):
print(func.__name__+' is call to log ' + text)
return func(*args,**kw)
return wraper
return decorator
@log('hello')
def fn():
print('fn')
fn()
fn.__name__
fn is call to log hello
fn 'wraper'

fn的名称发生了改变,要保持不变,需要@functools.wraps(func)

''' 如果我们希望往log里面传递参数'''
import functools
def log(text):
def decorator(func):
@functools.wraps(func)
def wraper(*args,**kw):
print(func.__name__+' is call to log ' + text)
return func(*args,**kw)
return wraper
return decorator
@log('hello')
def fn():
print('fn')
fn()
fn.__name__
fn is call to log hello
fn 'fn'

以上的内容参考学习 廖学峰的学习网站


python的一些高阶用法的更多相关文章

  1. Python高阶用法总结

    目录 1. lambda匿名函数 1.1 函数式编程 1.2 应用在闭包 2. 列表解析式 3. enumerate内建函数 4. 迭代器与生成器 4.1 迭代器 4.3 生成器 5. 装饰器 前言: ...

  2. Python 函数式编程 & Python中的高阶函数map reduce filter 和sorted

    1. 函数式编程 1)概念 函数式编程是一种编程模型,他将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念.wiki 我们知道,对象是面向对象的第一型,那么函数式编程也是一样,函数是函数 ...

  3. Python中的高阶函数与匿名函数

    Python中的高阶函数与匿名函数 高阶函数 高阶函数就是把函数当做参数传递的一种函数.其与C#中的委托有点相似,个人认为. def add(x,y,f): return f( x)+ f( y) p ...

  4. Python入门篇-高阶函数

    Python入门篇-高阶函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.高级函数  1>.First Class Object 函数在Python中是一等公民 函数也 ...

  5. ASP.NET Core 6框架揭秘实例演示[33]:异常处理高阶用法

    NuGet包"Microsoft.AspNetCore.Diagnostics"中提供了几个与异常处理相关的中间件,我们可以利用它们将原生的或者定制的错误信息作为响应内容发送给客户 ...

  6. python 常用的高阶函数

    前言 高阶函数指的是能接收函数作为参数的函数或类:python中有一些内置的高阶函数,在某些场合使用可以提高代码的效率. map() map函数可以把一个迭代对象转换成另一个可迭代对象,不过在pyth ...

  7. python字符串反转 高阶函数 @property与sorted(八)

    (1)字符串反转 1倒序输出 s = 'abcde' print(s[::-1]) #输出: 'edcba' 2 列表reverse()操作 s = 'abcde' lt = list(s) lt.r ...

  8. 说说 Python 中的高阶函数

    高阶函数(higher-order function)指的是:接受一个函数为参数,或者把函数作为结果值返回的函数. 1 sorted() 比较常见的高阶函数是 sorted(),其内部的关键字参数 k ...

  9. Python学习笔记 - 高阶函数

    高阶函数英文叫Higher-order function.什么是高阶函数?我们以实际代码为例子,一步一步深入概念. 变量可以指向函数 以Python内置的求绝对值的函数abs()为例,调用该函数用以下 ...

随机推荐

  1. 解决移动端1px边框问题的几种方法

    1.边框粗细原因 在移动端下设置border为1px,在某些设备上看比1px粗. 这些由于不同的手机有不同的像素密度.在window对象中有一个devicePixelRatio属性,他可以反应css中 ...

  2. Java 对象序列化机制详解

    对象序列化的目标:将对象保存到磁盘中,或允许在网络中直接传输对象. 对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久的保存在磁盘上,通过网络将这种二进制流传 ...

  3. H3C PAP验证配置示例

  4. uva 624 CD (01背包)

      CD  You have a long drive by car ahead. You have a tape recorder, but unfortunately your best musi ...

  5. webpack优化 -- compression-webpack-plugin 开启gzip

    webpack优化 -- compression-webpack-plugin 开启gzip 打包的时候开启gzip可以大大减少体积,非常适合于上线部署.下面以vue-cli2.x项目为例,介绍如何在 ...

  6. linux scull 代码write 方法

    write, 象 read, 可以传送少于要求的数据, 根据返回值的下列规则: 如果值等于 count, 要求的字节数已被传送. 如果正值, 但是小于 count, 只有部分数据被传送. 程序最可能重 ...

  7. Spring Boot Admin-应用健康监控后台管理

    Spring Boot Admin 用于监控基于 Spring Boot 的应用,它是在 Spring Boot Actuator 的基础上提供简洁的可视化 WEB UI. 1. 什么是Spring ...

  8. setTimeout第三个参数

    在廖雪峰大神的官方网站看nodejs的时候,发现自己对Promise函数不甚了解,于是转去看Promise函数,看到了这段代码: function multiply(input) { return n ...

  9. vue 项目使用局域网多端访问并实时自动更新(利用 browser-sync)

    在写vue的项目中时,虽然vue会自动更新页面,但是切换页面切来切去也很麻烦,有时候我们还要在公司另一台电脑或者手机上调试,这时候利用browser-sync插件,无需改动vue的代码即可实现: 1. ...

  10. vue-cli常用插件集合

    element - 饿了么出品的Vue2的web UI工具套件 Vux - 基于Vue和WeUI的组件库 mint-ui - Vue 2的移动UI元素 iview - 基于 Vuejs 的开源 UI ...