Quelqu'un pourrait-il s'il vous plaît m'aider à comprendre pourquoi le code suivant qui implémente le "tamis d'Eratosthène" se comporte différemment dans Python 2 et Python 3.

l = range(2, 20)
for i in range(2, 6):
    l = filter(lambda x: x == i or x % i != 0, l)
print(tuple(l))

Avec Python 2.7:

> python filter.py
(2, 3, 5, 7, 11, 13, 17, 19)

Avec Python 3.6:

> python filter.py
(2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 16, 17, 18, 19)

Je comprends que le filtre de Python3 renvoie un objet filtre mais ne peut pas expliquer le résultat final. (Le code est tiré de ce tutoriel lambdas 1).

14
heracles 16 janv. 2017 à 01:23

2 réponses

Meilleure réponse

Il y a deux parties qui jouent un rôle ici:

et