Tabs versus Espaces Dans la programmation en Python

j'ai toujours utilisé des onglets pour indentation quand je fais de la programmation Python. Mais je suis tombé sur une question ici où quelqu'un a fait remarquer que la plupart des programmeurs Python utilisent des espaces au lieu d'onglets pour minimiser les erreurs d'éditeur à Éditeur.

quelle différence cela fait-il? Y a-t-il d'autres raisons pour lesquelles on utiliserait des espaces plutôt que des onglets pour Python? Ou est-il tout simplement pas vrai?

si je change mon éditeur pour insérer des espaces au lieu de les onglets tout de suite ou continuer comme avant?

292
demandé sur Damian Yerrick 2008-09-23 11:26:00

30 réponses

parce que PEP-8 nous dit d'utiliser des espaces.

262
répondu Alexander Kojevnikov 2017-08-18 12:13:42

fatigué de courir après des typos d'indentation (8 espaces ? non, 7 oups 9 ... ), J'ai changé mes sources "onglets".

1 tab = = 1 niveau indent, full stop

le point est: si vous voulez afficher l'indentation comme 4, 8 ou pi / 12 Largeur de caractères, il suffit de changer les paramètres dans votre éditeur de texte, ne pas jouer avec le code.

(Personnellement, j'utilise 4 char largeur de l'onglet... mais certains préféreraient 3 ou 8 espace, ou même utiliser des polices de largeur variables.)

413
répondu yota 2017-08-18 12:14:10

Ainsi parle le Seigneur: tu tireras quatre espaces. Pas plus, pas moins. Quatre est le nombre de places tu tiret, et le nombre de ton indentation est de quatre. Tu ne tireras ni huit ni deux, sauf que tu passeras ensuite à quatre. Les onglets sont à droite. -- Georg Brandl

188
répondu pillmuncher 2011-06-14 01:02:09

utilisez un éditeur qui affiche les caractères des onglets (tous les espaces, d'ailleurs). Vous programmez, vous n'écrivez pas un article.

j'utilise des onglets. Il n'y a pas de place pour une erreur d'espace dans les onglets (si vous pouvez les voir). Le problème EST que les gens utilisent différents éditeurs, et la seule chose commune dans le monde est: onglet==tiret, comme ci-dessus. Certains gars vient avec la touche tab réglée au mauvais nombre d'espaces ou le fait manuellement et fait un gâchis. Onglets et utiliser un vrai éditeur. (Ce n'est pas seulement contraire au PEP, c'est aussi à propos du C/C++ et d'autres langues agnostiques).

/étapes vers le bas à partir de la boîte à savon

70
répondu EmTee 2010-05-19 18:14:16

ma raison principale pour utiliser les onglets sur les espaces est la touche backspace. Si je suis sur une ligne et que je veux revenir en arrière-enlever une indentation sur juste cette ligne, je dois frapper backspace 4x si c'était des espaces; alors que, je n'ai besoin de frapper qu'une fois si c'est un onglet.

je vais continuer à utiliser les onglets parce que-comme cela a été dit précédemment-il est plus facile de passer des onglets aux espaces, mais pas l'inverse.

je pense que je veux écrire un programme simple qui convertit le code avec des espaces en code avec des onglets, parce que je déteste les espaces. Ils me font grimper le mur!

Oh! Et utiliser les touches fléchées pour naviguer à gauche et à droite est toujours une douleur dans le cul quand il est espaces.

mise à jour: Sublime Text 3 supprime maintenant un onglet complet avec la touche backspace; bien que la navigation avec la touche arrow soit toujours fastidieuse.

Tabs vs. Spaces for Indentation

mise à JOUR: j'utilise désormais vscode et a également écrit un TabSanity extension pour résoudre la touche retour arrière, supprimer et la touche flèche de navigation.

TabSanity Extension in Action

59
répondu jedmao 2018-09-16 05:03:44

la manière la plus "pythonique" est d'utiliser 4 espaces par niveau d'indentation. L'interpréteur Python reconnaîtra cependant les espaces ou les onglets. Le seul gottcha est vous ne doit jamais mélanger les espaces et les onglets , choisissez l'un ou l'autre. Cela dit, la spécification recommande des espaces, la plupart des développeurs utilisent des espaces, donc à moins que vous ayez une bonne raison de ne pas le faire, je dirais d'aller avec les espaces.

58
répondu ctcherry 2008-09-23 07:32:35

autant que je puisse dire, Voici les pour et les contre des onglets vs des espaces.

Pros d'onglets:

  • moins de frappes nécessaires pour indenter, détacher et traverser l'indentation. (Même si votre IDE a une certaine habileté à indenter l'espace, il ne sera jamais aussi bon que des onglets.)
  • différents programmeurs peuvent utiliser différentes tailles d'affichage tab comme ils le souhaitent.
  • Vous ne pouvez jamais avoir le curseur "à l'intérieur" d'un caractère d'indentation. Par exemple, si vous copiez quelques lignes, avec des onglets, vous pouvez cliquer vaguement près du début d'une ligne pour démarrer votre sélection et vous obtiendrez tout le premier onglet. Avec les espaces, vous êtes susceptible de manquer le premier caractère de l'espace à moins que vous frappez la cible minuscule entre elle et la marge. De la même façon, pour enlever une indentation d'une ligne, la plupart des éditeurs ne gèrent pas bien la pression dans l'espace arrière si votre curseur est au milieu d'un caractère d'indentation à quatre espaces. Il sera généralement supprimer un espace. Avec les onglets, il fonctionne comme prévu.
  • est compatible avec les autres langues, vous n'avez donc pas à configurer votre éditeur pour l'utiliser, par exemple les onglets pour C++/Java et les espaces pour Python.
  • les indentations erronées peuvent être plus évidentes (c.-à-d. qu'un onglet supplémentaire est beaucoup plus grand qu'un espace supplémentaire).

Contre des onglets:

  • la plupart des programmeurs Python utilisent des espaces donc vous iriez à l'encontre de la convention.
  • utiliser des espaces pour aligner des énoncés multilignes est plus facile que d'utiliser des onglets. Vous pourriez utiliser des onglets pour l'indentation, des espaces pour l'alignement, mais cela semble un peu risqué en Python!

il y a des non-questions qui sont exagérées par certaines personnes:

  1. vous pourriez obtenir des espaces errants dans l'indentation tabbed qui fait tout foirer: pratiquement tous les IDEs / editors support visualising whitespace, et il est presque aussi probable que vous obtiendrez des onglets errants dans les indentations de l'espace! Je ne peux pas voir que c'est une erreur courante de toute façon. En outre, la plupart les erreurs d'indentation seront attrapées par Python, et les bonnes IDEs devraient être en mesure de mettre en évidence différentes indentations.

  2. vous ne pouvez pas aligner les choses facilement avec les onglets: c'est vrai si vous allez pour l'alignement parfait des caractères, mais PEP-8 recommande contre cela, et Python ne jouer bien avec les déclarations multi-ligne de toute façon.

  3. les gens ont des paramètres différents pour la taille de l'affichage des onglets dans leurs éditeurs de sorte que votre code aura l'air différent dans différents endroits: Oui, c'est en fait une fonctionnalité bénéfique des onglets.

j'ai commencé à utiliser des espaces pour être cohérent avec d'autres codes Python, mais pour être honnête, c'est assez frustrant que je vais probablement revenir aux onglets. Cela dépend beaucoup de la les capacités de votre IDE, mais d'après mon expérience, aucun support IDE pour l'indentation spatiale n'est aussi bon qu'utiliser des onglets.

donc à moins que vous vraiment n'aimez pas être incompatible avec la plupart (probablement pas tous!) Code Python, utilisez des onglets et activez la visualisation des espaces et la mise en évidence des indentations (si disponible). La principale raison pour moi est la facilité de sélection et l' (assez significatif de l'OMI) réduction frappe. Certaines conventions sont stupides.

38
répondu Timmmm 2018-07-03 03:40:40

j'ai récemment trouvé un article intitulé Python: Myths about Indentation qui traite de ceci et des questions connexes. L'article a de bonnes raisons de recommander l'utilisation d'espaces lors de l'écriture de code Python, mais il y a certainement de la place pour le désaccord.

je crois qu'il est vrai que la plupart des programmeurs Python n'utilisent que des espaces.

24
répondu Greg Hewgill 2008-09-23 07:31:58

utilisez un éditeur qui vous permet d'insérer des espaces jusqu'au tabstop lorsque vous appuyez sur la touche TAB, au lieu d'insérer un caractère \T. Et puis l'oublier.

17
répondu Rod Daunoravicius 2008-09-23 10:38:35

vous pouvez mélanger les onglets et les espaces... Mais un onglet est considéré comme la même indentation que 8 espaces, donc à moins que votre éditeur ne soit configuré pour considérer qu'un onglet est 8 espaces, vous demandez des problèmes en les mélangeant.

12
répondu Ignacio Vazquez-Abrams 2008-09-23 07:56:34

le seul inconvénient que j'éprouve en utilisant des espaces au lieu d'onglets est que vous ne pouvez pas facilement supprimer un niveau d'indentation; vous devez supprimer quatre espaces au lieu d'un seul onglet.

11
répondu Ikke 2018-07-03 03:26:40

Onglets à la règle. Même argument pour les boucles imbriquées et vous voulez ramener la boucle extérieure "en arrière" 1 niveau. ASTUCE: Si vous voulez convertir un ancien code python en tabs, utilisez L'utilitaire TabOut disponible comme exécutable sur http://www.textpad.com/add-ons / .

8
répondu Skippy VonDrake 2011-10-24 21:21:55

je pense très fermement que quelle que soit la convention historique, les onglets sont simplement un meilleur choix et devraient remplacer les espaces dans chaque ligne future de code Python écrit. Comme virer un tyran incompétent. Mon raisonnement est la suivante: simplicty comme une valeur de base . Utiliser deux ou peut-être quatre caractères pour la tâche sémantique d'un? Il n'y a pas de justification au-delà de la tradition, IMO.

8
répondu Robin 2016-04-17 12:48:30

quand J'ai appris Python pour la première fois, J'ai été un peu rebuté par l'idée d'un espace blanc significatif, car la plupart des langues à l'utiliser sont inflexibles. Cela dit, J'ai été impressionné par la capacité de Python à comprendre une variété de styles d'indentation. Lorsque je pense au style à utiliser pour un nouveau projet, je pense qu'il est important de garder deux choses à l'esprit.

  1. tout d'abord, il est important de comprendre comment Python interprète l'indentation. Bryan Oakley a mentionné possibilité d'erreurs "off-by-one" lors de l'utilisation des onglets, mais ce n'est pas possible avec les paramètres par défaut de l'interpréteur. Il y a une meilleure explication de cela dans Learning Python , de O'Reilly Media .

fondamentalement, il y a une variable (qui peut être changée en incluant un commentaire en haut d'un fichier source # tab-width: ) qui définit la largeur de l'onglet. Quand Python rencontre un onglet, il augmente la distance d'indentation au prochain multiple de tab-largeur . Ainsi, si un espace suivi d'un onglet est entré le long de la gauche du fichier, le prochain multiple de tab-width est 8. Si un onglet en lui-même est entré, la même chose arrive.

De cette façon, c'est sûr, si votre éditeur est configuré correctement, utilisez les onglets, et même de mélanger les tabulations et des espaces. Aussi longtemps que vous réglez l'onglet de votre éditeur s'arrête à la même largeur que la déclaration Python tab-width (ou 8 si elle est absent.) C'est généralement une mauvaise idée d'utiliser un éditeur avec une largeur d'onglet autre que 8 espaces, sauf si vous spécifiez la largeur d'onglet dans le fichier.

  1. deuxièmement, une grande partie de la conception syntaxique de Python est d'encourager la lisibilité du code et le style cohérent entre les programmeurs sur le même projet. Cela dit, la question devient, pour tout projet particulier, ce qui fera du code le plus lisible par les gens qui travaillent sur le projet . C'est certainement une bonne idée de garder un style d'indentation cohérent, mais en fonction de la plateforme et de l'éditeur utilisé par le projet, un style différent peut avoir du sens pour différents projets. S'il n'y a aucune raison impérieuse de ne pas se conformer à PEP 8 , alors il est logique de le faire, parce qu'il se conformera à ce que les gens attendent.

j'ai rencontré des projets qui utilisent un mélange d'onglets et d'espaces avec succès. Essentiellement les espaces sont utilisés pour indenter de petites sections, où le fait qu'il est dans une section indentée est relativement sans importance; tandis que les onglets sont utilisés pour attirer l'attention du lecteur sur une grande caractéristique structurelle. Par exemple, les classes commencent par un onglet, dont les simples contrôles conditionnels à l'intérieur d'une fonction utilisent deux espaces.

Les onglets

sont également utiles pour traiter de grands blocs de texte en retrait à plusieurs niveaux. Lorsque vous déposez de 3-4 niveaux d'indentation, il est beaucoup plus facile à la ligne avec le bon onglet qu'il est d'aligner avec le nombre approprié d'espaces. Si un projet n'utilise pas le style recommandé par PEP 8, Il est probablement préférable d'écrire un guide de style dans un fichier quelque part pour que le modèle d'indentation reste cohérent et que d'autres personnes puissent lire explicitement comment configurer leur éditeur pour qu'il corresponde.

Aussi, Python 2.x a une option -t pour émettre des avertissements sur les onglets et les espaces mélangés et -tt pour émettre une erreur. Ceci s'applique uniquement à onglets mixtes et les espaces à l'intérieur de la même portée. Python 3 suppose -tt et d'après ce que j'ai trouvé, il n'y a aucun moyen de désactiver ce contrôle.

8
répondu Perkins 2018-07-03 03:35:11
"151950920 d'Expérience" et PEP-8 clairement conclure que le mélange des espaces et des TAB est à éviter. Si vous voulez les mélanger, vous devez visualiser les espaces blancs dans L'IDE - mais alors vous perdez l'avantage de l'indentation de Python rendant les scopes facilement visibles. La visualisation des espaces dans un IDE encombre l'affichage.

S'il S'agit d'espaces ou , alors il doit s'agir d'espaces pour une raison simple: on peut changer presque tous les IDEs et éditeurs de texte pour remplacer automatiquement les onglets par des espaces, mais le contraire n'est pas vrai.

même s'il existe des IDEs qui peuvent convertir automatiquement les espaces principaux d'une ligne en onglets, cela conduira éventuellement à un mélange d'onglets et d'espaces. Considérons les instructions multilignes telles que les appels de fonction avec beaucoup de paramètres ou de chaînes doc. Alors que "ascii-art" est également à éviter, il peut facilement se produire par accident qu'un seul espace est laissé après les principaux onglets.

D'autres réponses ont apporté plusieurs arguments en faveur des onglets:

  • frapper TAB est plus efficace. Bien sûr, c'est vrai, mais tous les éditeurs de texte permettent d'insérer immédiatement le nombre voulu d'espaces lorsqu'une touche tab est pressée
  • Indentation/Dedenting est plus facile quand il suffit d'avoir à supprimer un onglet au lieu de 2/3/4/8 espaces. Vrai, mais la plupart des éditeurs de texte permettent de le faire automatiquement quoi qu'il en soit: Block select, indent/dedent sont des fonctionnalités de base d'un éditeur de programmation, comme commenter/décommenter. Si un éditeur de texte n'a pas cette implémentation, il devrait au moins avoir une fonctionnalité macro facile à utiliser avec laquelle on peut obtenir la même chose.
  • programmeurs différents comme différentes largeurs d'indentation. C'est vrai, et un avantage évident d'utiliser TAB S seulement. Le problème est l'interaction avec d'autres personnes et/ou équipes. Pour que cela fonctionne dans le monde réel, tout le monde devrait être d'accord sur tous en utilisant TAB S seulement. Puisque cela ne s'est pas produit, cela ne fonctionne pas de toute façon. Dans un scénario réel, il y a un ensemble de lignes directrices de codage sur lesquelles un projet s'entend de toute façon, et la méthode d'indentation est certainement l'une d'elles - même dans d'autres langages de programmation où les implications sont "seulement" sur le plan visuel.

a mon avis, le principal point que la plupart (si pas tous) des réponses sont manquantes ici est la interaction entre équipes ou individus, en particulier dans les scénarios où la liste des participants n'est pas connue au départ. Lorsque le code de rencontre de code tous doivent utiliser des onglets ou tous doivent utiliser des espaces. Il ne peut pas être mélangé sans rencontrer éventuellement des problèmes de fonctionnalité. Les gens ne sont pas parfaits. Les outils ne sont pas parfaits. C'est pourquoi imho nous ne devrions pas utiliser TAB s du tout.

aucune réponse n'est complète sans le lien que Greg a fourni dans sa réponse déjà: Python: mythes sur L'Indentation 151980920"

7
répondu cfi 2017-05-23 12:18:24

une erreur D'éditeur à Éditeur se produit lorsque vous avez indentation mixte dans un fichier . Cela se produit comme suit: un bloc de code est indenté avec 4 espaces, puis un niveau d'indentation "in", il est indenté avec des onglets. Maintenant le païen qui a fait cela (en mélangeant les onglets et les espaces) l'avait donc ses onglets sont aussi 4 espaces, donc il ne voit aucun problème, et Python ne voit aucun problème.

Maintenant, notre victime vient plus tard, et il a ses onglets de 8 places. Maintenant nos victimes pensent que le code a l'air tout cassé, et le corrige par en enlevant un niveau d'indentation , ce qui fait maintenant le code look comme il est encore 2 niveaux d'indentation, mais est vraiment un niveau . À ce moment, tout l'enfer se déchaîne.

la leçon ici est que vous ne devez jamais, Jamais, mélanger les onglets et les espaces. Si vous continuez à cela, alors il est facile de reindent votre code en des espaces ou des tabulations, indépendamment de qui vous servez. La meilleure façon de s'assurer que vous ne mélangez pas les onglets et les espaces est de toujours exécuter python avec -tt , ce qui produira une erreur lorsque les onglets et les espaces sont mélangés.

comme pour les onglets et les espaces, j'utilise personnellement des onglets afin de séparer l'indentation de l'apparence - il est beaucoup plus facile de changer l'apparence du code quand il est indenté avec des onglets que ce n'est avec des espaces. Je sais que cela va à l'encontre de ce que 99% de Python programmeurs font, mais c'est mon personnelle préférence, et il est facile dans tous les cas de convertir un fichier tabbed à un espacé. L'inverse n'est pas toujours vrai, puisque vous pouvez accidentellement supprimer 4 espaces dans les cordes, etc.

7
répondu freespace 2018-07-03 02:30:54

je suis principalement un programmeur C++, mais parfois mes projets incluent de petites quantités de Python. J'utilise des onglets pour indenter mon code C++. Cela signifie que j'ai trois options:

  1. utilisez les onglets en C++ et les espaces en Python. Cela permet à mes fichiers C++ de rester tels quels et je suis la recommandation du PEP-8, mais je ne suis pas cohérent dans mon projet.
  2. Change mon code C++ pour utiliser des espaces. Cela permet à l'ensemble de mes fichiers dans mon projet cohérent, et je suis la recommandation du PEP-8, mais il me demande de revenir en arrière et de changer tous mes fichiers C++. Je considère que c'est une mauvaise chose parce que je préfère les onglets.
  3. utilisez des onglets dans mon code C++ et mon code Python. Cela rend mon projet entier cohérent et me permet d'utiliser mon style d'indentation préféré: les onglets. L'inconvénient est que je ne suis pas la norme PEP-8.

pour mes projets, j'opte généralement pour l'option 3.

6
répondu David Stone 2011-11-29 18:27:38

tout le monde a des préférences différentes sur la quantité de code qui doit être indenté. Disons que vous partagez le code avec quelqu'un et il ou elle a des préférences différentes en ce qui concerne l'indentation. Si les indentations sont dans des onglets, votre ami peut toujours changer la largeur de l'onglet dans les paramètres de son éditeur. Cependant, si les indentations sont dans des espaces, votre ami devra en fait changer le code source s'il ou elle veut le mettre à sa préférence. Puis quand vous obtenez les changements de votre ami, vous pouvez décider de le modifier à votre préférence. Dans ce cas, vous aurez soit à faire face à l'ennui de changer les niveaux d'indentation avant et arrière, ou une personne doit adopter les préférences de l'autre dans le niveau d'indentation. Si vous et votre ami utilisez des onglets, le fait que vous avez des préférences différentes n'est pas un problème, car vous pouvez voir des niveaux d'indentation différents alors que le code reste inchangé. C'est pourquoi, à mon avis, les onglets sont mieux que les espaces pour indentation dans toute la programmation langue.

5
répondu Zhehao Mao 2011-06-10 22:55:45

il y a un scénario dans lequel les onglets ne fonctionnent tout simplement pas, à savoir: selon le style de codage que vous utilisez, vous pourriez avoir besoin d'indenter certaines lignes de code à une précision d'espace, I. e:

def foobar():
    x = some_call(arg1,
                  arg2)

dans ce cas, utiliser des onglets purement ne fonctionnera pas du tout; utiliser des onglets pour le tiret principal et des espaces pour le sous-tiret fonctionnera mais violera la règle dure de ne pas mélanger les deux.

ce ne sera pas le cas cependant si vous utilisez un code style / conventions document qui évite les situations comme dans l'exemple de code ci-dessus.

5
répondu Erik Allik 2012-03-02 14:19:42

en plus de tous les arguments déjà énumérés, je trouve celui-ci assez important (de mythes sur l'indentation ):

en outre, les onglets sont souvent détruits ou convertis à tort pendant les opérations de copie et de coller, ou lorsqu'un morceau de code source est inséré dans une page web ou un autre type de code de balisage.

un autre argument (très spécifique à l'environnement, cependant) contre les onglets est qu'ils sont parfois manquant sur les claviers téléphoniques . On pourrait probablement y remédier en installant un clavier alternatif, si possible.

Un argument pour onglets dont personne ne semblait avoir encore mentionné est que 1 onglet 1 caractère (0x09, 1 octet dans le fichier), tandis que 4 places de 4 caractères (4 fois 0x20, 4 octets dans le fichier); ainsi, l'utilisation d'espaces résultats dans un 4x gaspillage de l'espace.

pour conclure ce liste incohérente d'arguments, Je voudrais citer la réponse de Tim Peters dans le numéro 7012: Tabs est mieux que les espaces pour l'indentation :

la norme Python" espaces seulement " est pour code distribué. Des années d'expérience nous ont appris sans aucun doute que les onglets ont causé des problèmes sans fin pour le code partagé (...)

4
répondu chronos 2017-05-23 12:34:44

c'est PEP 8 à partir de juillet 2017:

Enter image description here

il semble que cette Déclaration ne laisse pas de place pour un autre choix.

mais ce n'est pas seulement ce que nous dit PEP 8, quelques lignes plus tard:

Enter image description here

dans ce qui précède, la première déclaration exprime un la préférence pour les espaces, et la deuxième déclaration reconnaît l'existence de code indenté avec des onglets et cette préférence pour certains codeurs.

Donc : PEP 8 est onglet indentation tolérant. Il ne tolère pas tab et espace mélangé pour indentation cependant, qui, puisque l'indentation elle-même est obligatoire, est compréhensible.

il peut être intéressant de mentionner que le style de codage de Google aussi suit la règle des 4 espaces.

Il y a d'autres divers arguments et les justifications en faveur des onglets ou 4-espace.

si vous travaillez dans une entreprise qui applique PEP 8, ou partagez régulièrement votre code avec d'autres qui suivent PEP 8, alors le bon sens dicte 4-space. Je suis (peut-être) utilisé pour les onglets à partir de C/C++. Mais avec un IDE correctement défini, la différence devient minime.

3
répondu calocedrus 2018-07-03 03:51:09

le problème avec l'utilisation d'espaces au lieu d'onglets est que la taille des fichiers devient incroyablement grande.. Par exemple, un fichier indenté de 500kb pourrait être réduit à 200kb lors de l'échange d'espaces pour des onglets, c'est pourquoi j'utilise toujours des onglets.

plus petite taille de fichier signifie un chargement, une compilation, une exécution ( dans certains cas ), etc. plus rapides..

pour moi, il ne sert à rien d'utiliser des espaces, mais si quelqu'un utilise un éditeur qui a des problèmes avec les onglets, alors ils peuvent remplacer "\t" avec "" ou "" ou quoi que ce soit..

3
répondu Acecool 2018-08-07 11:13:05

quelle différence cela fait-il?

Certains éditeurs sont configurés par défaut pour remplacer un seul caractère de tabulation avec un nombre défini de caractères d'espace, mais certains ne le sont pas. Si tout le monde utilise des espaces, cette différence dans les paramètres par défaut de l'éditeur peut être ignorée.

y a-t-il d'autres raisons pour lesquelles on utilise des espaces plutôt que des onglets pour Python? Ou est-il tout simplement pas vrai?

Oui, il y a d'autres raisons valables, comme l'ont souligné de nombreuses réponses avant moi. "PEP-8" le dit, cependant, N'est pas l'une de ces raisons. Cela vient du mythe auto-perpétuant que PEP-8 est la norme de codage pour all code Python, alors qu'en fait c'est juste la norme de codage pour l'ensemble standard de bibliothèques Python. Certains prétendent que PEP-8 est largement accepté, et d'autres prétendent que la plupart des programmeurs Python utilisent des espaces au lieu d'onglets. Je voudrais demander preuves de ces revendications, comme le nombre de votes sur ce site montre clairement que les onglets sont préférés par les masses. Je trouve assez regrettable que vous ayez accepté "PEP8 le dit" comme réponse à votre question, alors qu'en fait il y a beaucoup d'autres réponses qui expliquent les avantages et les inconvénients relatifs des espaces et des onglets.

est-ce que je dois changer mon éditeur pour insérer des espaces plutôt que des onglets tout de suite ou continuer comme avant?

cela dépend, et la réponse à cette dernière question Est où j'ai pensé que je pourrais réellement ajouter une certaine valeur à ce fil. IMHO, quelle que soit la langue utilisée, la meilleure norme de codage à utiliser dépend de la situation dans laquelle vous vous trouvez:

  • si vous avez commencé à travailler sur une base de code déjà existante: ne soyez pas difficile, suivez la norme de codage existante
  • si une équipe commence un nouveau projet à partir de zéro: discuter, décider d'une norme de codage au début comme une équipe, et s'y tenir
  • Si vous allez en solo: "faites ce qui vous rend le plus heureux et le plus productif

Quelle est donc votre situation?

enfin pour clarifier ma position, pour mes propres projets solo, j'utilise des onglets parce que les onglets ont plus de sens pour moi, et je suis plus productif avec les onglets.

2
répondu wookie919 2018-07-03 03:47:09

je crois qu'il y a une solution pour avoir les deux:

  1. compatibilité avec PEP-8 et utilisation d'espaces
  2. la Commodité d'utilisation de l'onglet au lieu de 4 espaces

dans Notepad++, allez dans "Préférences"--> "tab settings" et choisissez "Python" dans la liste à droite. Ensuite, assurez-vous que l'onglet "taille: 4", et cochez la case "remplacer [tab] par l'espace". Dans ce cas, vous pouvez simplement utiliser la touche tab pour indent, mais Notepad++ transformez ça en 4 espaces pour vous.

2
répondu Saeed 2018-07-03 03:48:08

utilisez des espaces à la place des onglets, pour la seule raison que vous gagnerez plus d'argent:)

Réf.: les développeurs qui utilisent des espaces gagnent plus d'argent que ceux qui utilisent des onglets (Stack Overflow blog post).

2
répondu Antonio 2018-07-03 03:56:09

Je ne fais que commencer, mais je trouve qu'il est beaucoup plus facile d'utiliser des onglets que des espaces, et je ne comprends pas le PEP-8 advocation des espaces seulement. Sublime texte 2 fait un excellent travail de visualiser les onglets avec la verticale blanc cassé, ligne pointillée et bien qu'il y ait des cas de moi mélangeant un espace ou deux pour aligner des éléments d'une liste ou d'un dictionnaire, Je n'ai pas connu une situation où ce serait chose préjudiciable.

1
répondu gr33kbo1 2013-11-02 17:14:16

j'aime les onglets mais il est en quelque sorte incompatible avec une autre règle que j'aime: la limite de 80 colonne.

si on choisit 4 espaces onglets et insère 10 onglets, alors il reste de l'espace pour 40 caractères pour remplir la limite de 80 colonnes. Si un autre codeur préfère les onglets de 8 espaces, la même ligne apparaîtra comme 120 caractères de long et n'apparaîtra pas comme une ligne valide de 80 colonnes!

Si vous voulez définir une colonne 80 limite, alors vous devez choisir une longueur de onglet. Dans ce cas, avoir des espaces x ou un onglet de longueur x ne fait pas vraiment une différence.

Edit: sujet: le Maintien de la Longueur de câble Maximale Lors de l'Utilisation d'Onglets à la Place des Espaces?

1
répondu Mathieu Villion 2017-05-23 12:02:58

je pense que l'un des principaux avantages à l'utilisation des espaces est que vous supprimez la variabilité dans la façon dont votre code source est rendu à travers la pléthore d'outils externes qui doivent interagir avec la source au-delà de l'éditeur de choix et quels que soient les paramètres dans lesquels ils ont configuré.

comme quelques exemples concrets considèrent le rendu de docstrings Python dans un tooltip dans Visual Studio Code , ou dans un outil diff comme Beyond Compare ou WinMerge , de la performance ou de couverture de code, des outils, etc. Fondamentalement, tous ces divers autres outils d'interfaçage peuvent chacun avoir des paramètres différents pour la façon dont les onglets sont interprétés et il peut être ennuyeux et parfois désorientant de trouver des choses très différentes ou poussé loin de l'écran parmi les ensembles d'outils que vous pouvez plonger dans et Hors.

en un mot, vous définissez l'alignement dans la source plutôt que de rabâcher une configuration uniforme pour le suite d'outils dans votre arsenal. Les espaces sont interprétés strictement dans une police monospace pour donner un alignement fiable et cohérent sur toute la durée de l'outillage en raison de la définition de la police, et non de l'onglet d'un tiers rendant la mise en œuvre/configuration.

un autre angle à cela est dans la copie de source d'onglets principaux à exécuter à un terminal où le caractère d'onglet peut déclencher une finalisation d'onglet par inadvertance. Par exemple, si vous copiez la source Python suivante (onglets utilisés comme indentation),

cmd_create_db = '''CREATE TABLE test (
    Col1 INTEGER,
    Col2 INTEGER,
    Col3 TEXT)'''

vous pouvez voir quelque chose comme suit (vu au terminal intégré de Visual Studio Code)...

>>> cmd_create_db = '''CREATE TABLE test (
... .DS_StoreCol1 INTEGER,
... .DS_StoreCol2 INTEGER,
... .DS_StoreCol3 TEXT)'''
>>> cmd_create_db
'CREATE TABLE test (\n.DS_StoreCol1 INTEGER,\n.DS_StoreCol2 INTEGER,\n.DS_StoreCol3 TEXT)'

(mis à part: je me suis demandé si cette observation de cohérence à travers l'outillage est une marque d'un esprit discriminant d'un développeur pointu cherchant à commander le monde qui peut indiquer un indice à la différence de salaire trouvée sur le débordement de la pile.)

1
répondu jxramos 2018-07-03 03:59:49

donc ici je lis toutes les réponses et je me demande comment je peux me conformer à PEP-8 sans la gêne de marteler mon bouton backspace à plusieurs reprises juste pour enlever l'indentation, et je regarde en bas de mon clavier de jeu Logitech avec tous ses boutons Macro fantaisie et une ampoule s'allume dans ma tête. Ouvert le logiciel de logitech, défini un couple de macros pour les boutons juste à côté du bouton d'onglet, et le problème résolu. Un bouton ajoute quatre espaces, l'autre fait du backspace quatre fois. Étonner. Tout simplement incroyable. Si facile de frapper les boutons avec mon petit doigt, aussi. Voyez, Regardez ceci: "" < -- quatre espaces! Avec une simple pression d'un bouton! Si je pouvais vous montrer la correction arrière je le ferais aussi. Allez chercher un clavier Logitech G105 et tous vos problèmes disparaîtront!

1
répondu zephos2014 2018-08-27 05:00:53

j'utilise deux indentations d'espace et un éditeur (kwrite) qui insère des espaces au lieu d'onglets lorsque j'appuie sur la touche tab.

0
répondu David Locke 2008-09-23 16:37:41