7
votes

Certains caractères UTF8 ont permis à la source Python, certains pas

J'ai remarqué que je ne peux pas utiliser tous les caractères Unicode dans mon code source Python.

tandis que xxx

est parfaitement allright (bien qu'obsensical [probablement?]), xxx

Ce n'est pas autorisé (le zéro de l'indice qui est).

Je ne peux pas non plus utiliser d'autres personnages, dont je reconnais la plupart des lettres autres que des lettres (opérateurs mathématiques par exemple). J'ai toujours pensé que si j'enlève juste aux règles que je connais, c'est-à-dire de composer des noms de lettres et de chiffres, avec une lettre comme premier caractère, tout ira bien. Maintenant, l'indice zéro est clairement un «nombre». Donc, mon impression était fausse.

Je sais que je devrais éviter d'utiliser caractères spéciaux . Toutefois, la définition de la fonction ci-dessus (la décroissance exponentielle qui est) me semble parfaitement raisonnable - car elle ne changera jamais, et cela transmet ainsi toutes les informations nécessaires à un autre programmeur à l'utiliser.

My Question donc, exactement quels personnages sont autorisés et qui ne sont pas? Et où?

Modifier
Très bien, je semble ne pas avoir été assez clair. J'utilise Python3, il n'est donc pas nécessaire de déclarer le codage du fichier source. Apparent que j'ai pensé à ce que ma définition de fonction chinoise fonctionne.

Ma question concerne pourquoi certains personnages sont autorisés là-bas, tandis que d'autres ne le sont pas. Le zéro de l'indice augmente une erreur , caractère non valide dans l'identifiant, mais le noir de zéro gras blackboard. tous les deux également spécial je dirais.

J'aimerais savoir s'il existe des règles générales qui s'appliquent non seulement à ma situation, il doit y avoir. Il semble que mon erreur ne soit pas un accident.

Editer 2:

La Réponse La permission de Beau Martãnez, me dirigant vers la référence de la langue, où je aurait dû regarder dans la première place:

http://www.dcl.hpi.uni-potsdam.de/home/loewis/table-3131.html Il semble que les caractères autorisés sont tous choisis.


1 commentaires

FWIW, je trouve aussi étrange qu'une langue avec une forteresse en conserve scientifique permet aux identificateurs "chiffre romain cinq", "arabic-indicateur chiffre cinq", "élargi arabe-indicateur chiffre cinq", "Devanagari Digit Cinq", "Bengali DIGIT CINQ "," GURMUKHI DIGIT CINQ ", <20 AUTRES 5 D'AUTRES>," FULLWIDTH DIGIT CINQ "- mais pas un indice" 5 ". Surtout «FULLWIDTH» n'est pas une langue à sa propre mais une variante de lettre, de même que l'indice. En outre, "ℌ" ou "ℂ" sont aussi de simples variantes, mais elles sont autorisées.


3 Réponses :


3
votes

Dites à Python quel est le codage approprié:

https://www.python.org/dev/peps/pep-0263/ p>

... p>

# coding=utf-8


1 commentaires

Désolé, j'aurais dû mentionner que j'utilise Python 3.



4
votes

selon le Référence de langue , Python 3 permet une grande variété de caractères comme identifiant.

que zéro caractère d'indice semble être un nombre, mais ce n'est pas pour Python; Python ne traite que 0, 1, 2, 3, 4, 5, 6, 7, 8 et 9 en tant que nombres. C'est en fait un caractère, vous pouvez donc l'utiliser comme un identifiant (c'est comme s'il était, par exemple, par exemple, un caractère grec tel que phi).

Surtout, comment pouvez-vous facilement taper ces personnages avec votre clavier? Je ne veux pas tirer la carte du personnage chaque fois que je dois appeler vos fonctions, par exemple. L'appelant "maximum_decay_rate" ou quelque chose de beaucoup plus intuitif pour tout utilisateur, pas seulement une majeure physique, rend votre code plus lisible.

Si vous dites que ce n'est pas permis, c'est probablement parce que vous n'avez pas spécifié le codage de caractères pour votre fichier source. Il peut être spécifié en ayant # - * - codage: utf-8 - * - (ou quel que soit le codage) au début de votre fichier source.


1 commentaires

Comme vous pouvez le constater, je n'utilisais que des caractères «spéciaux» où ils n'auraient jamais besoin d'être typés par personne, à moins que l'univers ne change que c'est l'esprit de la décomposition exponentielle. :-) Mais oui, cela devrait probablement être appelé décroissant (). J'ai mis à jour la question maintenant.



0
votes

Chaque caractère Unicode contient des «propriétés» spécifiques, à trouver dans la base de données de caractères Unicode et à notre objectif que les propriétés telles que la catégorie générale sont les plus importantes. Ils permettent de partitionner tous les caractères en grands groupes:

  • lettres ( l )
  • NUMÉROS ( N )
  • marques ( m )
  • ponctuations ( p )
  • symboles ( s )
  • séparateurs ( z )
  • Autre ( C )

    Les groupes ont des sous-groupes, par exemple lu est majuscule_letter . Selon la référence linguistique Python (3.4.1), il convient d'abord de normaliser la séquence de caractères dans la forme NFKC (qui signifie en pratique signifie décomposer des caractères avec des diacritiques et «simplifier», par exemple la modification de l'indice 0 dans la normale 0 ). Ensuite, le début de l'identifiant doit être un trait de soulignement ou une lettre (le groupe de la lettre entière plus NL - nombre de lettres), plus quelques autres symboles de lettre. Il devient beaucoup plus intéressant lorsque nous examinons des personnages qui sont autorisés comme une continuation de l'identifiant. De plus, nous pouvons utiliser: décimal_numbers ( ND ), qui sont en fait des chiffres de 0 à 9, mais dans de nombreuses guises, par exemple mathématique monospace chiffre neuf < / code>, qui est le caractère \ u0001d7ff (tous ensemble 70 caractères); la plupart des marques ( m ), à l'exception des marques enfermantes ( moi ) - Nous avons ici tous les diacritiques (accents); Tous les caractères du sous-groupe PC - Connecteurs de ponctuation, donc non seulement de soulignement, mais également divers liens (10 caractères); certains caractères similaires de type chiffre (par exemple les chiffres éthiopiques de 0 à 9); points moyens (2 caractères).

    Comme vu de ce qui précède, n avec un indice 0 doit être accepté comme identifiant. Lorsque j'ai essayé de la coller de Word, l'inactivité et l'aile 101 ont inséré les formes normalisées dans l'éditeur (I.e. N0 ). Je soupçonne que l'auteur de la question ait essayé d'utiliser un caractère d'indice qui ne pouvait pas être correctement normalisé.


1 commentaires

Je ne comprends pas cette réponse. Il existe exactement un indice Zero dans Unicode et il n'est pas autorisé dans un identifiant Python.