Pourquoi ne range(start, end) de ne pas inclure fin?

>>> range(1,11)

vous donne

[1,2,3,4,5,6,7,8,9,10]

Pourquoi ne pas 1-11?

Ont-ils tout simplement de décider de le faire comme ça au hasard, ou faut-il avoir une certaine valeur, je ne suis pas le voir?

  • range(len(s))
  • lire Dijkstra, ewd831
  • Fondamentalement, vous faites le choix d'un ensemble de tout-en-un de bugs pour l'autre. Un ensemble sont plus susceptibles de causer à vos boucles de mettre un terme plus tôt, l'autre est susceptible de provoquer une Exception (ou de débordement de la mémoire tampon dans d'autres langues). Une fois que vous avez écrit un tas de code, vous verrez que le choix de comportement range() a un sens beaucoup plus souvent
  • Lien de Dijkstra, ewd831: cs.utexas.edu/users/EWD/ewd08xx/EWD831.PDF
  • Que Djikstra l'article est souvent cité dans ce sujet, mais ne prévoit rien de valeur, ici, les gens de l'utiliser comme un appel à l'autorité. La seule pseudo-raison qu'il donne pour l'OP de la question est qu'il arrive à sentir que l'inclusion de la limite supérieure devient "naturelle" et "laid" dans le cas particulier où la séquence dans le vide qui est totalement subjective de la position et facilement soutenu contre, il n'apporte pas beaucoup à la table. L ' "expérience" Mesa n'est pas de beaucoup de valeur, que ce soit sans connaître leurs contraintes particulières ou des méthodes d'évaluation.
  • Dijkstras argument est que la convention a < i <= b est le seul pour lequel a et b jamais besoin de quitter l'ensemble des nombres naturels, aussi longtemps que la gamme de i est soit vide ou dans l'ensemble des nombres naturels. Bien que la plupart des cosmétiques argument, je pense qu'il est parfaitement valide.
  • Mais même si les cosmétiques argument est valide, n'est-ce pas Python approche introduire un nouveau problème de lisibilité? En commun-utilisation de l'anglais, le terme "gamme" implique que quelque chose va de quelque chose à quelque chose-comme un intervalle. Que len(list(range(1,2))) renvoie 1 et len(list(range(2))) renvoie 2 est quelque chose que vous avez vraiment à apprendre à digérer.
  • Un autre bizarre Python convention emprunté. 😛 je préfère simuler intuition naturelle et de ne pas faire quelque chose comme janvier[0], février[1], etc.
  • Ce serait bien si la fourchette() a offert une option pour l'inclusion: la limite supérieure. Je suis très bien avec range() exclusif par défaut, mais il existe des situations où inclusive rend la syntaxe plus lisible.

InformationsquelleAutor MetaGuru | 2010-12-21