满足以下两点中任意一点,即为高阶函数:

1.函数接收一个或多个函数作为参数

2.函数返回一个函数

1 描述

用函数和可迭代对象中每一个元素作为参数,计算出新的迭代对象

map() 会根据提供的函数对指定序列做映射。

第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

2 语法

map(function, sequence[, sequence, ...])

function:函数

sequence:一个或多个序列

返回值 : 新的迭代对象

3 示例

3.1 一个迭代参数时

以下代码演示是再python3的条件下进行的,再python2条件下运行时map函数略有区别,不用加 print([i for i in y]) ,可直接输出 print(y),

def fun(x):
    return x + 3

y = map(fun,[0,1,2])
z = map(fun,range(3))

print('fun:',fun)    #fun: <function fun at 0x7fea226eaf28>
print('y:',y)    #y: <map object at 0x7fea20f59518>
print('z:',z)    #z: <map object at 0x7fea20f594e0>
print(i for i in y)    #<generator object <genexpr> at 0x7fea22621f68>
print(i for i in z)    #<generator object <genexpr> at 0x7fea22621f68>
print([i for i in y])    #[3, 4, 5]
print([i for i in z])    #[3, 4, 5]

运行

fun: <function fun at 0x7fea226eaf28>
y: <map object at 0x7fea20f59518>
z: <map object at 0x7fea20f594e0>
<generator object <genexpr> at 0x7fea22621f68>
<generator object <genexpr> at 0x7fea22621f68>
[3, 4, 5]
[3, 4, 5]

3.2 两个迭代参数(迭代参数内元素相等)

def fun(x,y):
    return x + y

y = map(fun,[0,1,2],[10,11,12])
z = map(fun,range(3),range(10,13))

print([i for i in y])    #[10, 12, 14]
print([i for i in z])    #[10, 12, 14]

运行

[10, 12, 14]
[10, 12, 14]

3.3 两个迭代参数(迭代参数内元素不相等)

当迭代参数中的元素不相等时,以最小元素数量为主,也即“木桶效应

def fun(x,y):
    return x + y

y = map(fun,[0,1,2,3,4,5,6,7,8,9],[10,11,12])
z = map(fun,range(3),range(10,20))

print([i for i in y])    #[10, 12, 14]
print([i for i in z])    #[10, 12, 14]

4 Python3下map函数的显示问题

map函数是Python里面比较重要的函数,设计灵感来自于函数式编程。Python官方文档中是这样解释map函数的:

map(functioniterable...)

Return an iterator that applies function to every item of iterable, yielding the results. If additional iterable arguments are passed, function must take that many arguments and is applied to the items from all iterables in parallel. With multiple iterables, the iterator stops when the shortest iterable is exhausted.

即map函数接收的第一个参数为一个函数,可以为系统函数例如float、或者def定义的函数、或者lambda定义的函数均可。

举一个简单的例子,下面这个例子在Python2.7下是可以正常显示的:

ls = [1,2,3]
rs = map(str, ls)
 #打印结果
[']
lt = [1, 2, 3, 4, 5, 6]
def add(num):
    return num + 1
rs = map(add, lt)
print rs
#[2,3,4,5,6,7]

但是在Python3下我们输入:

ls=[1,2,3]
rs=map(str,ls)
print(rs)

显示的却是:

<map at 0x3fed1d0>

而不是我们想要的结果,这也是Python3下发生的一些新的变化,如果我们想得到需要的结果需要这样写:

ls=[1,2,3]
rs=map(str,ls)
print(list(rs)

这样显示的结果即为我们想要看到的。这一点在《机器学习实战》的第10章中会有一点帮助。

转自:https://www.cnblogs.com/itdyb/p/5731804.html

python学习笔记——高阶函数map()的更多相关文章

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

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

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

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

  3. Python内置高阶函数map()

    map()函数map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回. 例如,对于lis ...

  4. python学习之高阶函数

    filter函数:filter()为已知的序列的每个元素调用给定的布尔函数,调用中,返回值为非零的元素将被添加至一个列表中 list = filter(调用函数名,可迭代对象)——调用函数名自动传参— ...

  5. Python学习之高阶函数--嵌套函数、函数装饰器、含参函数装饰器

    玩了一晚上王者,突然觉得该学习,然后大晚上的搞出来这道练习题,凌晨一点写博客(之所以这么晚就赶忙写是因为怕第二天看自己程序都忘了咋写的了),我太难了o(╥﹏╥)o 言归正传,练习题要求:构造类似京东的 ...

  6. Python高阶函数map、reduce、filter、sorted的应用

    #-*- coding:utf-8 -*- from selenium import webdriver from selenium.webdriver.support.wait import Web ...

  7. python--函数式编程 (高阶函数(map , reduce ,filter,sorted),匿名函数(lambda))

    1.1函数式编程 面向过程编程:我们通过把大段代码拆成函数,通过一层一层的函数,可以把复杂的任务分解成简单的任务,这种一步一步的分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. ...

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

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

  9. 匿名函数python内置高阶函数以及递归

    匿名函数 python定义一个函数通常使用def关键词,后面跟函数名,然后是注释.代码块等. def func(): '''注释''' print('from func') 这样就在全局命名空间定义了 ...

随机推荐

  1. [14] 齿轮(Gear Wheel)图形的生成算法

    顶点数据的生成 bool YfBuildGearwheelVertices ( Yreal radius, Yreal assistRadius, Yreal height, Yuint slices ...

  2. Spring 事务模板

    最近项目开发中需要用到单机事务,因为项目中使用了Spring和Mybatis框架,所以通过Spring来进行事务的管理,并且记录一下事务配置的过程 第一步:配置DataSource <!-- 发 ...

  3. iOS开发-Xcode入门ObjC程序

    元旦三天假跟妹子冷战一天半,剩下的半天觉得无聊,可以写点东西,折腾了下xCode 6.1,虽然iPhone6比较丑,但是不影响IOS在高端机上面的地位,ObjC是扩充C的面向对象编程语言.主要使用于M ...

  4. 五条强化 SSH 安全的建议

    当你查看你的 SSH 服务日志,可能你会发现充斥着一些不怀好意的尝试性登录.这里有 5 条常规建议(和一些个别特殊策略)可以让你的 OpenSSH 会话更加安全. 强化密码登录 密码登录很方便,因为你 ...

  5. SqlServer2008安装时系统配置检查器重新启动计算机失败

    系统:win7 64 旗舰版   软件版本:sqlserver 2008 在安装前执行:系统配置检查器 的时候报错 ‘重新启动计算机失败’,如下图 处理办法: RebootRequiredCheck ...

  6. IETESTER ie10.local 下载

    下载地址:ietester.ie10.exe.local.zip 技术交流QQ群: 15129679

  7. 两条Find指令

    # 列出所有包括a@b.c内容的xml文件 find / -type f -name "*.xml" | xargs grep "a@b.c" # 列出/opt ...

  8. ios backgroundColor

    loginView.backgroundColor=[UIColorcolorWithHue:0saturation:0brightness:0.9alpha:0.85]; 可随意调

  9. 【CSWS2014 Summer School】互联网广告中的匹配和排序算法-蒋龙(下)

    [CSWS2014 Summer School]互联网广告中的匹配和排序算法-蒋龙(上) Fig19,用到了矩阵,这个我没有听太明白,蒋博士也没有详细说明.不过可以明确的一点就是,我们常说的K-mea ...

  10. linux驱动杂项

    linux驱动 结构体中的逗号 http://zhouyang340.blog.163.com/blog/static/3024095920123495051607/ 下面我们看一个例子,Linux- ...