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. 在springmvc中 @RequestMapping(value={"", "/"})是什么意思

    这个意思是说请求路径 可以为空或者/ 我给你举个例子:比如百度知道的个人中心 访问路径是 http://zhidao.baidu.com/ihome,当然你也可以通过 http://zhidao.ba ...

  2. 2019-8-31-dotnet-通过-WMI-获取设备厂商

    title author date CreateTime categories dotnet 通过 WMI 获取设备厂商 lindexi 2019-08-31 16:55:59 +0800 2019- ...

  3. Streamy障碍二:超大排序合并

  4. hdu 1254 推箱子(嵌套搜索,bfs中有dfs)

    推箱子 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  5. jackson java转json hibernate懒加载造成的无限递归问题

    @JsonIgnore @JsonFilter @JsonBackReference @JsonManagedReference @JsonIgnoreProperties jackson中的@Jso ...

  6. [转]Jquery属性选择器(同时匹配多个条件,与或非)(附样例)

    1. 前言 为了处理除了两项不符合条件外的选择,需要用到jquery选择器的多个条件匹配来处理,然后整理了一下相关的与或非的条件及其组合. 作为笔记记录. 2. 代码 1 2 3 4 5 6 7 8 ...

  7. [C++] 检查随机内存溢出

    C++程序的随机内存溢出是非常难处理的,windows提供了一些工具来缓解这个问题. windows debuger提供的Global Flags可以设置"enable heap tail ...

  8. UVa 1627 - Team them up!——[0-1背包]

    Your task is to divide a number of persons into two teams, in such a way, that: everyone belongs to ...

  9. ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(2)之创建项目

    我们在创建项目的时候一定要遵循层次和命名的原则,同时也要有统一的规范,无论是多人项目还是单人项目,能够让人看着一目了然并赏析悦目,做一个有追求的程序员. 例如IA.WebApp是视图控制器层(表现层) ...

  10. MD5登陆密码的生成

    package com.cinc.ecmp.userpermission.utils; import java.security.MessageDigest;import java.security. ...