PEP 212 - Boucle contre Iteration

Norme pour les boucles en Python itération sur les éléments d'une séquence [1]. Souvent, il est souhaitable de boucle sur les indices ou les deux éléments et les indices à la place.

Les idiomes couramment utilisés pour ce faire sont unintuitive. Ce PEP propose deux façons différentes d'exposer les indices.

L'idiome courant pour une boucle sur les indices utilise la fonction de gamme intégrée:

Bouclez les deux éléments et indices peuvent être obtenus soit par l'ancien idiome ou en utilisant la nouvelle zip fonction intégrée [2].

Il existe trois solutions qui ont été discutées. On ajoute un mot-clé non réservé, l'autre ajoute deux fonctions intégrées. Une troisième solution ajoute des méthodes pour des objets de séquence.

Cette solution étendre la syntaxe de la boucle for en ajoutant une option clause d'indexation qui peut également être utilisé à la place du à l'article.

Bouclez les indices d'une séquence deviendrait ainsi:

Bouclez les deux indices et éléments serait de même:

Cette solution ajoute deux fonctions intégrées dans les indices et Irange. La sémantique de ceux-ci peuvent être décrits comme suit:

Ces fonctions peuvent être mises en œuvre soit avec enthousiasme ou paresseusement et doivent être faciles à étendre afin d'accepter plus d'un argument de séquence.

L'utilisation de ces fonctions simplifierait les idiomes pour boucler sur les indices et sur les deux éléments et indices:

Cette solution propose l'ajout d'indices. Articles méthodes et les valeurs à des séquences qui permettent le bouclage sur indices seulement, les deux indices et des éléments et des éléments seulement, respectivement.

Cela simplifierait grandement les idiomes pour boucle sur indices et en boucle sur les deux éléments et indices:

En outre, il permettrait de faire une boucle sur les éléments de séquences et les dictionnaires d'une manière cohérente:

Pour les trois solutions des patchs plus ou moins rugueuses existent sous forme de plaques à SourceForge:

  • pour l'indexation d'un i en l. exposer le compteur de boucle [3]
  • ajouter des indices () et Irange () pour Encastrements [4]
  • ajouter la méthode des éléments () pour ListObject [5]

Tous ont été prononcés sur et rejeté par le DBAV.

En l'absence de mots-clés sont ajoutés et la sémantique du code existant reste inchangé, peuvent être mis en œuvre les trois solutions sans casser le code existant.

Articles Liés