Как вы создаете различные имена переменных, находясь в цикле?


целей...

for x in range(0,9):
    string'x' = "Hello"

Так что я в конечном итоге с string1, string2, string3... все равняется "Привет"

6 68

6 ответов:

конечно, вы можете; его называют словарь:

d={}
for x in range(1,10):
        d["string{0}".format(x)]="Hello"

In [7]: d["string5"]
Out[7]: 'Hello'

In [8]: d
Out[8]: 
{'string1': 'Hello',
 'string2': 'Hello',
 'string3': 'Hello',
 'string4': 'Hello',
 'string5': 'Hello',
 'string6': 'Hello',
 'string7': 'Hello',
 'string8': 'Hello',
 'string9': 'Hello'}

Я сказал это несколько язык в проверке, но на самом деле лучший способ связать одно значение с другим значением-это словарь. Вот для чего он был создан!

Это действительно плохая идея, но...

for x in range(0, 9):
    globals()['string%s' % x] = 'Hello'

и потом например:

print(string3)

даст вам:

Hello

однако это плохая практика. Вместо этого вы должны использовать словари или списки, как предлагают другие. Если, конечно, вы действительно не хотели знать, как это сделать, но не хотели его использовать.

просто бессмысленно создавать имена переменных переменных. Зачем?

  • они не нужны: вы можете хранить все в списках, диктофонах и так далее
  • их трудно создать: Вы должны использовать exec или globals()
  • вы не можете использовать их, как вы пишете код, который использует эти переменные? Вы должны использовать exec/globals() снова

использование списка намного проще:

# 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

Не делайте этого используйте словарь

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

Не делайте этого используйте дикт

globals () имеет риск, поскольку он дает вам то, на что в настоящее время указывает пространство имен, но это может измениться, и поэтому изменение возврата из globals () не является хорошей идеей

один из способов вы можете сделать это с exec(). Например:

for k in range(5):
    exec(f'cat_{k} = k*2')

print (cat_0)
0
print (cat_1)
2
print (cat_2)
4
print (cat_3)
6
print (cat_4)
8

здесь я использую удобное форматирование строки f в python 3.6+

Я бы использовал список:

string = []
for i in range(0, 9):
  string.append("Hello")

таким образом, у вас будет 9" привет", и вы можете получить их по отдельности следующим образом:

string[x]

здесь x определит, какой "привет" вы хотите.

и print(string[1]) печати Hello.