<p><code>map</code>与笛卡尔积一点关系都没有,尽管我认为精通函数式编程的人可能会想出一些无法理解的使用<code>map</code>生成笛卡尔积的方法。</p>
<p>Python 3中的<code>map</code>等价于:</p>
<pre><code>def map(func, iterable):
for i in iterable:
yield func(i)
</code></pre>
<p>Python 2的唯一区别是它将建立一个完整的结果列表,以便一次返回所有结果,而不是<code>yield</code>。</p>
<p>尽管Python约定通常倾向于使用列表理解(或生成器表达式)来获得与调用<code>map</code>相同的结果,特别是当您使用lambda表达式作为第一个参数时:</p>
<pre><code>[func(i) for i in iterable]
</code></pre>
<p>作为您在“将字符串转换为数组”问题的注释中所要求的示例,按“array”可能需要元组或列表(它们的行为都有点像其他语言的数组)</p>
<pre><code> >>> a = "hello, world"
>>> list(a)
['h', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd']
>>> tuple(a)
('h', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd')
</code></pre>
<p>这里使用<code>map</code>的方法是,从字符串的<em>列表开始,而不是从单个字符串开始-<code>map</code>可以分别列出所有字符串:</p>
<pre><code>>>> a = ["foo", "bar", "baz"]
>>> list(map(list, a))
[['f', 'o', 'o'], ['b', 'a', 'r'], ['b', 'a', 'z']]
</code></pre>
<p>注意,<code>map(list, a)</code>在Python 2中是等价的,但是在Python 3中,如果您想做任何事情,而不是将其馈送到一个<code>for</code>循环(或者一个只需要iterable而不是sequence的处理函数,如<code>sum</code>),则需要<code>list</code>调用。但也要再次注意,列表理解通常是首选的:</p>
<pre><code>>>> [list(b) for b in a]
[['f', 'o', 'o'], ['b', 'a', 'r'], ['b', 'a', 'z']]
</code></pre>