Affectation par tranches ou affectation directe : quand utiliser quelle approche ?

DDD
Libérer: 2024-10-19 08:12:02
original
474 Les gens l'ont consulté

Slice Assignment vs. Direct Assignment: When to Use Which Approach?

Affectation par tranches ou affectation directe dans les listes

Bien que le découpage soit une opération courante pour extraire des éléments d'une liste, son utilisation dans les affectations peut être déroutant. Comparons la différence entre l'affectation de tranche et l'affectation directe.

Affectation directe

a_list = ['foo', 'bar']
Copier après la connexion

Cela attribue une nouvelle liste au nom a_list. La valeur d'origine stockée dans a_list est supprimée et la nouvelle liste devient le seul objet référencé par a_list.

Assignation de tranche

a_list[:] = ['foo', 'bar']
Copier après la connexion

En revanche, l'affectation de tranche fonctionne différemment. Il appelle la méthode __setitem__ sur l'objet a_list, en utilisant une tranche comme index et une nouvelle liste comme valeur.

Différences clés

  • Modification d'objet : L'affectation de tranche modifie l'objet existant pointé par a_list. L'affectation directe crée un nouvel objet et l'attribue à a_list.
  • __setitem__ Prise en charge : a_list doit prendre en charge __setitem__ avec un index de tranche pour que l'affectation de tranche fonctionne.
  • Valeur itérable : L'objet sur le côté droit de l'affectation doit être itérable pour l'affectation de tranche.
  • Destruction de référence : Aucun nom n'est pointé sur l'objet de droite dans l'affectation de tranche . S'il s'agit d'un littéral, il sera supprimé après l'affectation.

Applications supplémentaires

Au-delà du découpage de la liste entière, l'affectation de tranches permet des manipulations avancées telles que :

  • Suppression d'éléments de liste : a_list[:] = []
  • Insertion de valeurs au milieu de la liste : a_list[1:1] = [1, 2, 3]

Cependant, pour les tranches étendues (avec un pas différent de un), l'itérable de droite doit avoir la bonne longueur pour correspondre à la tranche.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal