1. ホーム
  2. python

[解決済み] Python 3 で map がリストではなくマップオブジェクトを返すのはなぜですか?

2023-04-12 11:55:41

質問

私は Python 3.xの新しい言語設計を理解することに興味があります。 .

私は、Python 2.7では、関数 map :

Python 2.7.12
In[2]: map(lambda x: x+1, [1,2,3])
Out[2]: [2, 3, 4]

しかし、Python 3.xでは状況が変わりました。

Python 3.5.1
In[2]: map(lambda x: x+1, [1,2,3])
Out[2]: <map at 0x4218390>

Howは理解できましたが、Whyへの言及が見つかりませんでした。言語設計者はなぜこのような選択をしたのでしょうか。私の意見では、これは非常に大きな痛みをもたらすものです。これは、リスト内包に固執する開発者と腕相撲をするためだったのでしょうか?

IMOでは、リストは自然に次のように考えることができます。 ファンクタ というふうに考えるようになりました。

fmap :: (a -> b) -> f a -> f b

どのように解決するのですか?

マップがまだ存在する理由は というのは ジェネレータ式 も存在する場合、複数のイテレータ引数を取ることができ、それらはすべてループして関数に渡されます。

>>> list(map(min, [1,2,3,4], [0,10,0,10]))
[0,2,0,4]

zipを使うより若干簡単ですね。

>>> list(min(x, y) for x, y in zip([1,2,3,4], [0,10,0,10]))

それ以外の場合は、単にジェネレータ式の上に何も追加しない。