map内置函数分析所得到的思路
map:会根据提供的函数对指定序列做映射。
map(func, *iterables) --> map object
Make an iterator that computes the function using arguments from
each of the iterables. Stops when the shortest iterable is exhausted.
"""
根据提示,map有一个函数名参数还有个动态参数,意思是将可迭代的对象打散然后把每一个元素传入函数名作为参数运行让后将函数返回值作为新的值映射传入的参数。
现在有一个列表
l1 = [1,2,3,4,5,6],现在需要生成[1, 4, 9, 16, 25, 36]这样的列表,也就是每个元素平方:
首先l1肯定是个可迭代的对象所有我们可以先构思成这样:map(函数名,l1) l1会将每个元素传入函数作为参数。所以我们这样定义这个函数:
def func(x):
return x**2
#这样l1每遍历一个元素函数func都会返回这个元素的平方
#所以就写成了这样:
g = map(func,l1)
print(list(g)) #[1, 4, 9, 16, 25, 36]
接下来我们分析下map原理
在没接触map前,你会写出下面代码:
def func(x):
l1 = []
for i in x:
i = i**2
l1.append(i)
return l1
#我们定义了以上函数,当你输入一个列表时会返回一个新列表每个元素是之前的平方
g=func([1,2,3,4,5)
print(g)#[1,4,8,16,25]
这样确实实现了功能,但是如果我现在改变条件说新列表是原来每个元素的3次方,你又改成了这样:
def func(x):
l1 = []
for i in x:
i = i**3
l1.append(i)
return l1
大家发现了没,其实我改的要求就是 i = i**3这行代码,其实我们可以把这变的条件作为函数,写成i = foo(i),而fun1这个函数为我定义函数的参数传进去,这样我就只需改参数就能实现多个功能:
def func(foo,x):
l1 = []
for i in x:
i = foo(i)
l1.append(i)
return l1
def foo(x):return x**2
print(func(foo,[1,2,3,4]))
大家会说你不是还是要定义另一个函数传进去,这时匿名函数出来了
def func(foo,x):
l1 = []
for i in x:
i = foo(i)
l1.append(i)
return l1
print(func(lambda x:x**2,[1,2,3,4]))
print(func(lambda x:x**3,[1,2,3,4]))
#这样是不是无论你要我对元列表加减乘除平方或者替换我都只需要改变我传入的函数名参数就行了
map内置函数分析所得到的思路的更多相关文章
- map内置函数、lambda表达式、快捷生成想要的列表、filter内置函数
map函数 语法 map(function, iterable, ...) 参数 function -- 函数,有两个参数 iterable ...
- Python的filter与map内置函数
简单的记录下这两个函数的功能: list(filter(lambda x : x % 2, range(10))) 上例是返回了0-10之间的所有基数组成的列表.filter()有2个参数,第一个参数 ...
- filter和map内置函数
filter filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回 ...
- php内置函数分析之array_diff_assoc()
static void php_array_diff_key(INTERNAL_FUNCTION_PARAMETERS, int data_compare_type) /* {{{ */ { uint ...
- php内置函数分析array_diff()
PHP_FUNCTION(array_diff) { zval *args; int argc, i; uint32_t num; HashTable exclude; zval *value; ze ...
- php内置函数分析之array_combine()
PHP_FUNCTION(array_combine) { HashTable *values, *keys; uint32_t pos_values = ; zval *entry_keys, *e ...
- php内置函数分析之ucwords()
PHP_FUNCTION(ucwords) { zend_string *str; char *delims = " \t\r\n\f\v"; register char *r, ...
- php内置函数分析之strtoupper()、strtolower()
strtoupper(): PHP_FUNCTION(strtoupper) { zend_string *str; ZEND_PARSE_PARAMETERS_START(, ) Z_PARAM_S ...
- php内置函数分析之ucfirst()、lcfirst()
ucfirst($str) 将 str 的首字符(如果首字符是字母)转换为大写字母,并返回这个字符串. 源码位于 ext/standard/string.c /* {{{ php_ucfirst Up ...
随机推荐
- arp绑定IP
0.拓扑图 1. 现象:for i in `seq 1 20` ;do sleep 1|telnet www.baidu.com 80 ;done 速度有很明显的卡顿 2.操作:用tcpdump ...
- 1-STM32嵌入LUA开发(控制小灯闪耀)
今天因为想让STM32完美的处理字符串,所以就想着让STM32嵌入lua,本来想用f103c8t6,但是一编译就提示内存不足...... 所以单片机的型号选择的 \ 我下载到了RBT6的芯片上测试的 ...
- MIPI接口资料汇总(精)
一.介绍 1.MIPI联盟,即移动产业处理器接口(Mobile Industry Processor Interface 简称MIPI)联盟.MIPI(移动产业处理器接口)是MIPI联盟发起的为移动应 ...
- CF915G Coprime Arrays 莫比乌斯反演、差分、前缀和
传送门 差分是真心人类智慧--完全不会 这么经典的式子肯定考虑莫比乌斯反演,不难得到\(b_k = \sum\limits_{i=1}^k \mu(i) \lfloor\frac{k}{i} \rfl ...
- Log4net_配置
Log4net 有三个主要组件:loggers,appenders 和 layouts.这三个组件一起工作使得开发者能够根据信息类型和等级(Level)记录信息,以及在运行时控制信息的格式化和信息的写 ...
- rrd文件及rrd文件与实际数据的对比研究。
一,什么是rrd文件? 所 谓的“Round Robin” 其实是一种存储数据的方式,使用固定大小的空间来存储数据,并有一个指针指向最新的数据的位置.我们可以把用于存储数据的数据库的空间看成一个圆,上 ...
- 浅谈meta viewport设置移动端自适应
1.viewport 移动设备上的viewport是设备屏幕上用来显示网页的那部分区域,再具体一点就是浏览器上用来显示网页的那部分区域,但viewport又不局限于浏览器可视区域的大小,它可能比浏览器 ...
- curator 分布式锁InterProcessMutex
写这篇文章的目的主要是为了记录下自己在zookeeper 锁上踩过的坑,以及踩坑之后自己的一点认识; 从zk分布式锁原理说起,原理很简单,大家也应该都知道,简单的说就是zookeeper实现分布式锁是 ...
- python-知识回顾-16
知识回顾 小数据池:int -5~256str 特殊字符,*数字20 ascii : 8位 1字节 表示1个字符unicode 32位 4个字节 表示一个字符utf- 8 1个英文 8位,1个字节 欧 ...
- git使用(2)
1.远程仓库 a SSHKEY 第1步:创建SSH Key.在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到 ...