A titre d'exemple...
for x in range(0,9):
string'x' = "Hello"
Donc je me retrouve avec string1, string2, string3... tous équivalents à "Hello".
A titre d'exemple...
for x in range(0,9):
string'x' = "Hello"
Donc je me retrouve avec string1, string2, string3... tous équivalents à "Hello".
Bien sûr que vous pouvez ; ça s'appelle un dictionnaire :
d = {}
for x in range(1, 10):
d["string{0}".format(x)] = "Hello"
>>> d["string5"]
'Hello'
>>> d
{'string1': 'Hello',
'string2': 'Hello',
'string3': 'Hello',
'string4': 'Hello',
'string5': 'Hello',
'string6': 'Hello',
'string7': 'Hello',
'string8': 'Hello',
'string9': 'Hello'}
J'ai dit cela un peu à la légère, mais le meilleur moyen d'associer une valeur à une autre est un dictionnaire. C'est pour cela qu'il a été conçu !
C'est vraiment une mauvaise idée, mais...
for x in range(0, 9):
globals()['string%s' % x] = 'Hello'
et ensuite, par exemple :
print(string3)
vous donnera :
Hello
Il s'agit toutefois d'une mauvaise pratique. Vous devriez plutôt utiliser des dictionnaires ou des listes, comme d'autres le proposent. À moins, bien sûr, que vous ne vouliez vraiment savoir comment faire, mais que vous ne vouliez pas l'utiliser.
@paintedcones : D'abord, il devrait y avoir un seul moyen de le faire L'utilisation de dictionnaires simples est plus naturelle. Utiliser le dictionnaire globals à la place est une mauvaise idée, car il crée aussi "implicitement" des variables globales ou les modifie. Puisque la création et la modification de variables de cette manière nécessitent la notation par dictionnaire, il n'y a aucune raison d'utiliser globals()
au lieu d'un simple dict
.
Il y a quelques situations où vous avez besoin de faire un tas de variables, x1, x2, x3, etc. Mais dans la plupart des situations, l'utilisation d'un dictionnaire est vraiment la chose la plus appropriée à faire.
Il est tout simplement inutile de créer des noms de variables. Pourquoi ?
exec
o globals()
exec/globals()
à nouveauUtiliser une liste est beaucoup plus facile :
# 8 strings: `Hello String 0, .. ,Hello String 8`
strings = ["Hello String %d" % x for x in range(9)]
for string in strings: # you can loop over them
print string
print string[6] # or pick any of them
Merci ! J'avais besoin de choisir la forme parmi le dictionnaire ou la liste de dataframe. Et comme j'avais besoin de réorganiser le dataframe en fonction d'une certaine valeur sur le dataframe, je ne pouvais pas utiliser la forme dictionnaire. Oui, vous avez raison ! Dans certains cas, il est vraiment inutile de créer des noms de variables !
Ne faites pas ça, utilisez un dictionnaire
import sys
this = sys.modules[__name__] # this is now your current namespace
for x in range(0,9):
setattr(this, 'string%s' % x, 'Hello')
print string0
print string1
print string2
print string3
print string4
print string5
print string6
print string7
print string8
ne faites pas cela, utilisez un dict
globals() présente un risque car il vous donne ce vers quoi l'espace de nom pointe actuellement, mais cela peut changer et modifier le retour de globals() n'est pas une bonne idée.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
42 votes
La réponse est que vous ne voulez pas faire cela. Utilisez plutôt une liste.
2 votes
Si c'est là que vous voulez l'utiliser vous pouvez avoir
x = ["Hello" * 9]
puis y accéder parx[0], x[1] ...
Si vous voulez l'utiliser d'une manière différente, je pense que vous devrez nous donner plus de détails sur le code.3 votes
Si j'ai un jour le pouvoir sur un langage, alors l'utilisation de nombres dans les noms de variables me donnera
SyntaxError: Use a data structure.
;-)1 votes
Et n'oubliez pas votre string0 ;)
12 votes
@James Khoury : Ce n'est pas tout à fait ça. Cela se terminerait par
x
étant une liste contenant un seul élément - la chaîne "HelloHelloHelloHelloHelloHelloHelloHelloHello". Je pense que vous vouliez direx = ["Hello"] * 9
.0 votes
@Chrono Oups ! Vous avez raison. Je devrais relire mes messages avant d'appuyer sur la touche Entrée ;) merci.
0 votes
Pourquoi vous ne voulez pas créer dynamiquement des variables