在Python中使用map函数
如果你有以下代码,它是怎么按照文档中的说明来工作的呢:map(function, iterable,...)
?
x = sorted(map(int, dat[0].split()))
那这个int
是一个函数吗?如果是的话,为什么不直接把它写成函数的样子呢?
5 个回答
1
可以这样理解
def map( function, iterable ):
return ( function(x) for x in iterable )
在 x = sorted(map(int, dat[0].split()))
这段代码中,int
是被“命名”的,而不是被“计算”的。也就是说,这段代码把一个函数对象传给了 map
函数。接下来,map
函数会去执行这个给定的函数。
3
在你的例子中,dat[0]
是一个字符串,而 split()
方法会把这个字符串按照空格分开,生成一个字符串列表。
比如说:
"1 11".split()
返回的结果是:
["1", "11"]
map
函数有两个输入参数:
第一个参数是可以被调用的东西(在 Python 中我们称之为 可调用对象),比如一个函数。
int
虽然不是真正的函数,但它也是一种可调用的东西(在 Python 里叫做 对象)。比如说,int("3")
会返回3
。所以当你把int
应用到一个字符串上时,它会尝试把这个字符串转换成一个整数,并返回这个整数值。第二个参数是你可以遍历的东西,在你的例子中就是一个列表。
当你调用 map
函数时,第一个参数会应用到第二个参数中的所有元素上。
map(int, ["1", "11"])
返回的结果是:
[1, 11]
如果你把我刚才解释的结合起来,你就能明白:
map(int, "1 11".split())
返回的结果是:
[1, 11]
3
int
是一个构造函数,所以它是可以被调用的,这样你就可以把它和 map
一起使用。