IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Création de nom de variable


Sujet :

Python

  1. #1
    Candidat au Club
    Femme Profil pro
    Curieux
    Inscrit en
    Mai 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux

    Informations forums :
    Inscription : Mai 2021
    Messages : 4
    Par défaut Création de nom de variable
    Bonjour,
    Je suis novice en Python et j'aimerai avoir un peu d'aide sur quelque chose de sans doute très basique.
    J'aimerai créer un nom de variable hybride avec un préfixe imposé (une chaine de caractères) et un suffixe (une variable déjà existante).
    Exemple:
    préfixe = liste_
    suffixe = variable_existante
    résultat = préfixe_suffixe = liste_variable_existante

    Merci de votre aide.
    Nazzzz

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 055
    Par défaut
    Bonjour,

    Qu'est-ce qui ne va pas dans l'exemple proposé ?

    Si le but est de créer des noms de variables dynamiquement, ce n'est pas une bonne pratique... à la place on peut utiliser des objets list ou tuple selon le besoin.

  3. #3
    Candidat au Club
    Femme Profil pro
    Curieux
    Inscrit en
    Mai 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux

    Informations forums :
    Inscription : Mai 2021
    Messages : 4
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Bonjour,

    Qu'est-ce qui ne va pas dans l'exemple proposé ?

    Si le but est de créer des noms de variables dynamiquement, ce n'est pas une bonne pratique... à la place on peut utiliser des objets list ou tuple selon le besoin.
    Ce qui ne va pas c'est que je ne sais pas comment exprimer mon exemple en Python.
    Avec quelle syntaxe je peux associer mon préfixe (chaine de caractères imposée) a un nom de variable déjà existant dans mon code pour créer une nouvelle variable.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 704
    Par défaut
    Salut,

    Citation Envoyé par Nazzzz Voir le message
    J'aimerai créer un nom de variable hybride avec un préfixe imposé (une chaine de caractères) et un suffixe (une variable déjà existante).
    Quel problème cherchez vous à résoudre?
    Comme vous débutez, vous êtes probablement parti sur une mauvaise piste.

    Sinon oui on peut faire des choses un peu comme çà avec un Python que vous ne connaissez pas encore. Mais comme on ne fait çà que lorsqu'on sait expliquer pourquoi on ne peut pas faire autrement...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 055
    Par défaut
    Tourner votre problème d'une autre manière... comme je l'ai expliqué dans ma 1ère réponse, ce n'est pas une bonne pratique, et à juste titre, votre manière de résoudre le problème ne doit pas être pris par le bon bout.

    Pouvez-vous expliquez quelle est la problématique ? Ce que vous donnez est une résolution à un problème, donc une solution possible, ce que je souhaite, c'est connaître le problème avant d'aborder avec vous une solution.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 704
    Par défaut
    Citation Envoyé par Nazzzz Voir le message
    Ce qui ne va pas c'est que je ne sais pas comment exprimer mon exemple en Python.
    Normal puisque vous débutez.

    Ceci dit vous devriez pouvoir raconter en français ce que vous cherchez à faire. On pourra vous raconter comment le traduire en bon Python sans avoir à créer des noms de variables à la volée.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Candidat au Club
    Femme Profil pro
    Curieux
    Inscrit en
    Mai 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux

    Informations forums :
    Inscription : Mai 2021
    Messages : 4
    Par défaut
    Il me semble que le problème est clairement et simplement expliqué sans vouloir froisser personne.
    Il y a sans doute mieux à faire mais le but ici n'est pas de pondre 3 pages de contexte pendant 2h.

    Je veux simplement associer mon préfixe (chaine de caractères) à un nom de variable déjà existant(qui sera mon suffixe donc) afin de construire une nouvelle variable spécifique et je ne sais pas comment le faire.

  8. #8
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 055
    Par défaut
    Tenez,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    caca = 0
    for i in range(20):
        globals()[f"caca_{i}"] = i**2
     
    print(caca_1)
    print(caca_2)
     
    # ...
    Bonne continuation...

  9. #9
    Candidat au Club
    Femme Profil pro
    Curieux
    Inscrit en
    Mai 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux

    Informations forums :
    Inscription : Mai 2021
    Messages : 4
    Par défaut
    Merci. Je vais m'en démerder...

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Bien que la solution de @fred1599 corresponde exactement à ta demande, il faut concevoir la chose autrement, je pourrais te donner une autre réponse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    >>> toto = 'string_example'
    >>> prefix = 'list_'
    >>> d = dict()
    >>> d[prefix+toto]=toto
    >>> d
    {'list_string_example': 'string_example'}
    >>> tata = 'second_example'
    >>> d[prefix+tata]=tata
    >>> d
    {'list_string_example': 'string_example', 'list_second_example': 'second_example'}
    >>> d[prefix+tata]
    'second_example'
    >>> d[prefix+toto]
    'string_example'
    Bref, n'ayant pas plus d'information sur ce que tu veux faire, on ne peut pas vraiment t'aider.

  11. #11
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 821
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Nazzzz Voir le message
    Il me semble que le problème est clairement et simplement expliqué sans vouloir froisser personne.
    Pas du tout, tu n'as pas expliqué ton problème mais la solution que tu as trouvée pour le résoudre, ce qu'on appelle généralement un problème XY. Parce que ce que tu veux faire ne se fait pas. Parce que Python (et globalement tous les langages de haut niveau) possèdent un pannel d'outils qui vont des tableaux aux dictionnaires sans compter tous les "à côtés" comme les deque (listes à 2 entrées) ou autres containers tous plus folkloriques les uns que les autres. On ne constuit pas un nom de variable en dynamique. On ne fait ça dans aucun langage et pas non plus en Python même s'il sait le faire. Parce qu'en programmation, un nom de variable est un identifiant et qu'un identifiant est un invariant. Et donc on ne peut pas construire un nom "invariant" à partir d'une "variable". Ou alors tu dis clairement "je voudrais tenter un truc con pour le fun" mais ceux qui tentent ça sont généralement des développeurs qui sont un peu (beaucoup) au dessus du niveau du débutant et qui cherchent à se checker sur des inutilités juste pour le plaisir d'y arriver (un peu à la façon du ioccc) et certainement pas pour faire du code pérenne et utile.

    Citation Envoyé par Nazzzz Voir le message
    Il y a sans doute mieux à faire mais le but ici n'est pas de pondre 3 pages de contexte pendant 2h.
    Tu aurais simplement dit "j'ai telle donnée je voudrais la traiter de telle façon pour avoir telle sortie" ça ne prenait ni 3 pages ni 2h. Ce que Fred1599 a fait de façon un peu dégueu (et il le montre bien avec son nom de variable) se fait de façon bien plus naturelle et facile avec un tableau (liste/tuple) ou un dictionnaire, lesquel offrent tous les avantages que son code offre déjà plus des possibilités d'automatisation au travers de boucles

    Avec un tuple
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    papierToilette=tuple(i*i for i in range(20))
    print(papierToilette[1])
    print(papierToilette[2])
     
    for (i, p) in enumerate(papierToilette):
    	print("%d: j'essuie le caca de Fred %d fois" % (i, p))

    Avec un dictionnaire
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    papierToilette=dict(("caca_%d" % (i+1), i*i) for i in range(20))
     
    print(papierToilette["caca_1"])
    print(papierToilette["caca_2"])
    for (k, v) in papierToilette.items():
    	print("j'essuie le %s de Fred %d fois" % (k, v))

    Citation Envoyé par Nazzzz Voir le message
    Merci. Je vais m'en démerder...
    Ce genre de réponse ressemble vraiment à de l'insolence...

    Citation Envoyé par LeNarvalo Voir le message
    Bref, n'ayant pas plus d'information sur ce que tu veux faire, on ne peut pas vraiment t'aider.
    Ben si, tu n'as pas vu que son problème est "clairement" expliqué???
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  12. #12
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 919
    Billets dans le blog
    8
    Par défaut
    Bonjour,
    Citation Envoyé par Sve@r Voir le message
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for (i, p) in enumerate(papierToilette):
    	print("%d: j'essuie le caca de Fred %d fois" % (i, p))
    C'est un peu désuet comme façon de formater une string. Autant présenter à une personne débutante, l'utilisation des Fstring
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print(f"{i}: j'essuie le caca de Fred {p} fois")
    Ce genre de réponse ressemble vraiment à de l'insolence...
    Ah bon ? Perso, j'ai prend ça pour de l'humour: Il était question de caca... et l'emploie du mot démerder me semble de bonne répartie .

  13. #13
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 821
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    C'est un peu désuet comme façon de formater une string. Autant présenter à une personne débutante, l'utilisation des Fstring
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print(f"{i}: j'essuie le caca de Fred {p} fois")
    Mouais. Les fstrings avec l'inclusion directe de la variable dans la chaine littérale perso j'ai pas tellement accroché (goûts et couleurs). Peut-être parce que je viens du C... Eventuellement j'aurais pu utiliser str.format() que j'utilise parfois (surtout qu'il s'adapte super bien aux QCoreApplication.translate de PyQt) mais mon but n'était pas de lui montrer comment afficher son truc mais plutôt comment le créer. Accessoirement j'ai édité mon post pour remplacer le tuple par un dico, encore plus adapté au "caca_X" de fred...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  14. #14
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 055
    Par défaut
    Accessoirement j'ai édité mon post pour remplacer le tuple par un dico, encore plus adapté au "caca_X" de fred...
    Quelque soit la proposition de solution, elle sera toujours mieux que celle que je propose au PO. On pourrait tant qu'on en est à lister les mauvaises pratiques, utiliser le mot clé exec, et ça ne serait toujours pas mieux...
    L'inconvénient majeur hors le fait que ces variables ne sont pas visibles dans le code et reconnues par son IDE est le fait de polluer l'espace de noms du module.

  15. #15
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    C'est un peu désuet comme façon de formater une string. Autant présenter à une personne débutante, l'utilisation des Fstring
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print(f"{i}: j'essuie le caca de Fred {p} fois")
    Ah ah !
    Et moi qui utilises toujours ce genre de choses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    txt = str(i)+" j'essuie le caca de Fred "+str(p)+" fois"

  16. #16
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 055
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    Ah ah !
    Et moi qui utilises toujours ce genre de choses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    txt = str(i)+" j'essuie le caca de Fred "+str(p)+" fois"
    Les f-strings sont bien plus efficaces que la méthode format, cependant concernant la concaténation, la différence n'est pas très importante.

    Ici je choisirai les f-string car ça évite entre autres, le cast str des variables i et p.

  17. #17
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 821
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    Ah ah !
    Et moi qui utilises toujours ce genre de choses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    txt = str(i)+" j'essuie le caca de Fred "+str(p)+" fois"
    Ah oui, effectivement là de toute les possibilités t'as un peu choisi une des pires

    Citation Envoyé par fred1599 Voir le message
    Ici je choisirai les f-string car ça évite entre autres, le cast str des variables i et p.
    Il me semble qu'il y a aussi cast avec une f-string. Cet exemple...
    Code python3 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/usr/bin/env python3
     
    class truc:
    	def __init__(self, v):
    		self.__v=v
     
    	def __str__(self):
    		print("Appel à str")
    		return "[%s]" % self.__v
    # class truc
     
    a=truc(123)
    print(f"a={a}")
    ... montre bien un appel à __str__ en ligne 13.
    Sinon j'aime bien la méthode "format" car elle permet d'optimiser les appels quand on affiche des fonctions. Par exemple dans cette expression print("le résultat de la fonction est {0} et je le répète une seconde fois: {0}".format(fct())) la fonction n'est appelée qu'une seule fois.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  18. #18
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 055
    Par défaut
    Il me semble qu'il y a aussi cast avec une f-string. Cet exemple...
    Je parlais surtout de ne pas voir écrit le cast explicitement, mais quelque soit le cas, il est évident que l'on ne passe pas d'un entier à une chaîne de caractères par magie

    Si tu regardes, sur énormément de sites, forums, etc. il est comparé l'efficacité entre méthode format et f-strings, et le score est sans appel.

    Un exemple -> https://stackoverflow.com/questions/...-vs-str-format

  19. #19
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 704
    Par défaut
    Salut,

    La grosse différence entre f-string et format et qu'on ne peut pas séparer l'évaluation de la chaine de caractère.
    Exemple si j'écris:
    s est d'abord une chaine de caractères.

    Je peux appeler une fonction qui va afficher v avec "v =" devant en lui passant 2 paramètres: le "format" et la valeur.
    Si je veux passer un autre format, il suffit de lui passer un autre paramètre en guise de format.

    Avec les f-string, je dois écrire une autre fonction (qui contiendra des f-string différents).
    Donc çà ne fait pas tout...

    Après si çà va plus vite tant mieux mais çà n'en fait pas une solution à tous les cas d'utilisation.... format et le style printf ont encore de beaux jours devant eux et sont à connaître pour savoir les utiliser quand il faut.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  20. #20
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 055
    Par défaut
    Hello,

    Après si çà va plus vite tant mieux mais çà n'en fait pas une solution à tous les cas d'utilisation
    Certes, ce que j'indique s'applique dans la situation qui sera adapté pour les deux méthodes, et le fait de préférer les f-strings dont les performances sont bien supérieures si possible.

    format et le style printf ont encore de beaux jours devant eux et sont à connaître pour savoir les utiliser quand il faut.
    Je suis d'accord, même si j'avoue en avoir de moins en moins besoin...

Discussions similaires

  1. Aide création nom de variable avec 2 indices
    Par gautierd dans le forum MATLAB
    Réponses: 3
    Dernier message: 08/02/2015, 11h44
  2. Réponses: 2
    Dernier message: 14/08/2013, 15h41
  3. Réponses: 1
    Dernier message: 04/12/2010, 17h08
  4. [WD14] Création de nom de variables dynamiquement
    Par fhmayn dans le forum WinDev
    Réponses: 3
    Dernier message: 12/02/2010, 17h02
  5. Création d'objet fait-maison avec un nom de variable
    Par dalmasma dans le forum Général VBA
    Réponses: 7
    Dernier message: 14/05/2009, 09h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo