Comparaison de l'utilisation des fonctions d'ordre supérieur dans Python 2 et 3

Chaque fois que j'utilise Python, je vérifie comment utiliser les fonctions d'ordre supérieur (mapper, filtrer, réduire), donc je vais le laisser comme mémo.

De plus, j'ai récemment commencé à étudier Python 3, mais comme le style d'écriture est légèrement différent entre Python 2 et 3, j'écrirai les deux à des fins de comparaison.

En premier lieu, ce qui est une fonction d'ordre supérieur est une fonction qui reçoit une fonction comme argument. Par exemple, il est utilisé lorsque vous souhaitez effectuer un traitement sur chaque élément du tableau.

Environnement d'exécution

fonction de carte

Il est utilisé lorsque vous souhaitez traiter tous les éléments </ font> d'un tableau. Dans l'exemple suivant, tous les éléments du tableau sont doublés et sortis.

  • Python 2
print map(lambda x: x * 2, range(1, 5))
  • Python 3
print (list(map(lambda x: x * 2, range(1, 5))))
  • Résultat d'exécution
[2, 4, 6, 8]

fonction de filtre

Il est utilisé lorsque vous souhaitez traiter uniquement les éléments qui correspondent à la condition </ font> dans le tableau. Dans l'exemple suivant, seuls les nombres pairs sont extraits des éléments du tableau.

  • Python 2
print filter(lambda x: x % 2 == 0, range(1, 5))
  • Python 3
print (list(filter(lambda x: x % 2 == 0, range(1, 5))))
  • Résultat d'exécution
[2, 4]

réduire la fonction

Utilisez cette option lorsque vous souhaitez combiner plusieurs éléments en un seul </ font>. Plus précisément, deux éléments sont extraits du début du tableau et traités, puis le résultat et l'élément suivant sont traités, et ainsi de suite.

Cependant, dans Python 3, la fonction de réduction a été supprimée des fonctions principales de Python et ne peut pas être utilisée sans importer le module functools </ font>.

Dans l'exemple suivant, la somme de tous les éléments du tableau est calculée.

  • Python 2
print reduce(lambda x, y: x + y, range(1, 5))
  • Python 3
import functools

print (functools.reduce(lambda x, y: x + y, range(1, 5)))
  • Résultat d'exécution
10

En partie parce que je ne suis pas habitué à Python 3, mon impression personnelle est que Python 2 est plus simple à écrire ...

Matériel de référence

  • http://www.python-course.eu/python3_lambda.php

Recommended Posts