<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Nom-De-Variable | Dr. Goulu</title><link>https://drgoulu.com/tag/nom-de-variable/</link><atom:link href="https://drgoulu.com/tag/nom-de-variable/index.xml" rel="self" type="application/rss+xml"/><description>Nom-De-Variable</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>fr-FR</language><lastBuildDate>Thu, 29 Oct 2020 00:00:00 +0000</lastBuildDate><image><url>https://drgoulu.com/media/icon_hu_2dc8a7743be9bda7.png</url><title>Nom-De-Variable</title><link>https://drgoulu.com/tag/nom-de-variable/</link></image><item><title>En Javascript, pourquoi une variable ne peut commencer par un chiffre ou un nombre ?</title><link>https://drgoulu.com/2020/10/29/en-javascript-pourquoi-une-variable-ne-peut-commencer-par-un-chiffre-ou-un-nombre/</link><pubDate>Thu, 29 Oct 2020 00:00:00 +0000</pubDate><guid>https://drgoulu.com/2020/10/29/en-javascript-pourquoi-une-variable-ne-peut-commencer-par-un-chiffre-ou-un-nombre/</guid><description>&lt;p&gt;&lt;em&gt;Réponse publiée
&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;aucun langage de programmation à ma connaissance ne le permet.&lt;/p&gt;
&lt;p&gt;l&amp;rsquo;
est beaucoup plus simple lorsqu&amp;rsquo;on peut simplement balayer le code de gauche à droite, chaque nouveau caractère permettant de construire le graphe. Si on permet aux variables de commencer par un chiffre, l&amp;rsquo;analyseur ne sait pas si il analyse une constante numérique ou un identificateur jusqu&amp;rsquo;aux caractères les plus à droite.&lt;/p&gt;
&lt;p&gt;Et j&amp;rsquo;y pense après coup : permettre la variable 2x3 est déjà vachement dangereux tant ça ressemble à 2*3, mais alors 2E3, c&amp;rsquo;est quoi ? une variable, ou la constante 2000 ?&lt;/p&gt;</description></item><item><title>Comment s'assurer de ne pas écraser une variable existante dans un code Python ? Comment vérifier si le nom d'une variable ou d'une fonction ou d'une classe est déjà utilisé ?</title><link>https://drgoulu.com/2020/05/13/comment-s-assurer-de-ne-pas-ecraser-une-variable-existante-dans-un-code-python-comment-verifier-si-le-nom-d-une-variable-ou-d-une-fonction-ou-d-une-classe-est-deja-utilise/</link><pubDate>Wed, 13 May 2020 00:00:00 +0000</pubDate><guid>https://drgoulu.com/2020/05/13/comment-s-assurer-de-ne-pas-ecraser-une-variable-existante-dans-un-code-python-comment-verifier-si-le-nom-d-une-variable-ou-d-une-fonction-ou-d-une-classe-est-deja-utilise/</guid><description>&lt;p&gt;&lt;em&gt;Réponse publiée
&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Il n&amp;rsquo;y a pas de variables en python. Il n&amp;rsquo;y a que des références (des sortes de pointeurs) à des objets :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;a=2 # a pointe sur l&amp;#39;objet int 2
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;a=&amp;#34;hello&amp;#34; # maintenant a pointe sur la str
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Aucun langage n&amp;rsquo;empêche d&amp;rsquo;assigner un objet à une référence à un autre objet, Python ne fait pas exception ;-)&lt;/p&gt;
&lt;p&gt;La bonne pratique est de faire des fonctions et méthodes très courtes (max un écran) ce qui force à avoir des références valides sur un scope très court, ce qui évite le problème que vous mentionnez.&lt;/p&gt;
&lt;p&gt;Accessoirement, Python force à préfixer les références à des champs (par self.), ce qui permet par exemple&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;class C:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; def __init__(self, a) :
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; self.a=a # crée un champ a
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Dans le même genre d&amp;rsquo;idée évitez à tout prix&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;from math import *
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;from vache import *
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;périmètre = pi * rayon
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Parce que si vache à défini pi=4, vous serez mal…&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;from math import pi
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;from vache import pis
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;périmètre = pi * rayon
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Maintenant si vous voulez vraiment savoir si une référence existe, et commencer à comprendre pourquoi python est un langage pour adultes consentants, lisez la suite&lt;/p&gt;
&lt;p&gt;La fonction dir permet d&amp;rsquo;obtenir la liste des références définies&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;a=2
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;class C:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; pass
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dir() # sans paramètres, renvoie les références globales
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;[&amp;lsquo;C&amp;rsquo;, &amp;lsquo;&lt;strong&gt;annotations&lt;/strong&gt;&amp;rsquo;, &amp;lsquo;&lt;strong&gt;builtins&lt;/strong&gt;&amp;rsquo;, &amp;lsquo;&lt;strong&gt;doc&lt;/strong&gt;&amp;rsquo;, &amp;lsquo;&lt;strong&gt;loader&lt;/strong&gt;&amp;rsquo;, &amp;lsquo;&lt;strong&gt;name&lt;/strong&gt;&amp;rsquo;, &amp;lsquo;&lt;strong&gt;package&lt;/strong&gt;&amp;rsquo;, &amp;lsquo;&lt;strong&gt;spec&lt;/strong&gt;&amp;rsquo;, &amp;lsquo;a&amp;rsquo;]&lt;/p&gt;
&lt;p&gt;Vous pouvez donc tester l&amp;rsquo;existence d&amp;rsquo;une référence globale avec:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;#39;a&amp;#39; in dir() # renvoie True
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;#39;b&amp;#39; in dir() # renvoie False
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Mais ce n&amp;rsquo;est pas pratique car vous devez avoir le nom de la référence en str. Et non, l&amp;rsquo;objet n&amp;rsquo;a pas cette str en mémoire par plusieurs références peuvent pointer sur le même objet…&lt;/p&gt;
&lt;p&gt;Donc il vaut mieux faire comme ça :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;try:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; b
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;except NameError: # n&amp;#39;existe pas
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; b=a # seconde référence sur l&amp;#39;objet 2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sinon :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dir(C) # références définies dans l&amp;#39;objet C (qui est une classe)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;[&amp;rsquo;&lt;strong&gt;class&lt;/strong&gt;&amp;rsquo;, &amp;lsquo;&lt;strong&gt;delattr&lt;/strong&gt;&amp;rsquo;, &amp;lsquo;&lt;strong&gt;dict&lt;/strong&gt;&amp;rsquo;, &amp;lsquo;&lt;strong&gt;dir&lt;/strong&gt;&amp;rsquo;, &amp;lsquo;&lt;strong&gt;doc&lt;/strong&gt;&amp;rsquo;, &amp;lsquo;&lt;strong&gt;eq&lt;/strong&gt;&amp;rsquo;, &amp;lsquo;&lt;strong&gt;format&lt;/strong&gt;&amp;rsquo;, &amp;lsquo;&lt;strong&gt;ge&lt;/strong&gt;&amp;rsquo;, &amp;lsquo;&lt;strong&gt;getattribute&lt;/strong&gt;&amp;rsquo;, &amp;lsquo;&lt;strong&gt;gt&lt;/strong&gt;&amp;rsquo;, &amp;lsquo;&lt;strong&gt;hash&lt;/strong&gt;&amp;rsquo;, &amp;lsquo;&lt;strong&gt;init&lt;/strong&gt;&amp;rsquo;, &amp;lsquo;&lt;strong&gt;init_subclass&lt;/strong&gt;&amp;rsquo;, &amp;lsquo;&lt;strong&gt;le&lt;/strong&gt;&amp;rsquo;, &amp;lsquo;&lt;strong&gt;lt&lt;/strong&gt;&amp;rsquo;, &amp;lsquo;&lt;strong&gt;module&lt;/strong&gt;&amp;rsquo;, &amp;lsquo;&lt;strong&gt;ne&lt;/strong&gt;&amp;rsquo;, &amp;lsquo;&lt;strong&gt;new&lt;/strong&gt;&amp;rsquo;, &amp;lsquo;&lt;strong&gt;reduce&lt;/strong&gt;&amp;rsquo;, &amp;lsquo;&lt;strong&gt;reduce_ex&lt;/strong&gt;&amp;rsquo;, &amp;lsquo;&lt;strong&gt;repr&lt;/strong&gt;&amp;rsquo;, &amp;lsquo;&lt;strong&gt;setattr&lt;/strong&gt;&amp;rsquo;, &amp;lsquo;&lt;strong&gt;sizeof&lt;/strong&gt;&amp;rsquo;, &amp;lsquo;&lt;strong&gt;str&lt;/strong&gt;&amp;rsquo;, &amp;lsquo;&lt;strong&gt;subclasshook&lt;/strong&gt;&amp;rsquo;, &amp;lsquo;&lt;strong&gt;weakref&lt;/strong&gt;&amp;rsquo;]&lt;/p&gt;
&lt;p&gt;la fonction
permet de savoir si un champ existe dans un objet.&lt;/p&gt;
&lt;p&gt;Pour finir, voici une drôle de manière de créer une variable globale:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;globals()[&amp;#39;b&amp;#39;]=3
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;b # existe ! Et vaut 3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Juste pour illustrer le fait que toutes les références sont gérées par des dictionnaires, donc dynamiquement modifiables et extensibles.&lt;/p&gt;
&lt;p&gt;Et ça, ya pas beaucoup de langages qui le font…&lt;/p&gt;</description></item></channel></rss>