A resposta é que você não quer fazer isso. Use uma lista em seu lugar.
Sven Marnach
2
Se é aqui que você deseja usá-lo, você pode x = ["Hello" * 9]acessá-lo por x[0], x[1] ...Se você quiser usá-lo de uma maneira diferente, acho que você terá que nos fornecer um pouco mais de experiência com o código.
James Khoury
3
Se eu tiver poder sobre a linguagem, em seguida, usando números em nomes de variáveis dará SyntaxError: Use a data structure.;-)
Jochen Ritzel
1
e não esqueça sua string0;)
wim
10
@ James Khoury: Isso não está certo. Isso acabaria xsendo uma lista contendo um único elemento - a sequência "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello". Eu acho que você quis dizer x = ["Hello"] * 9.
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'}
Eu disse isso de certa forma, mas a melhor maneira de associar um valor a outro é um dicionário. Foi para isso que foi projetado!
for x in range(0,9):
globals()['string%s'% x]='Hello'
e depois por exemplo:
print(string3)
Darei à você:
Hello
No entanto, isso é uma prática ruim. Você deve usar dicionários ou listas, como outros propõem. A menos, é claro, que você realmente queira saber como fazê-lo, mas não queira usá-lo.
@paintedcones: Primeiro, deve haver uma maneira de fazer isso , e usar dicionários simples é mais natural. Usar o dicionário global é uma má idéia, porque também "implicitamente" cria variáveis globais ou as modifica. Como definir e modificar variáveis dessa maneira requer notação no dicionário, não há razão para usar em globals()vez de algumas simples dict.
Tadeck
Existem algumas situações em que você precisa criar várias variáveis, x1, x2, x3, etc. Mas, na maioria das situações, o uso de um dicionário é realmente a coisa mais apropriada.
precisa saber é o seguinte
20
Uma maneira de fazer isso é com exec(). Por exemplo:
Lembre-se de execalgo, magia negra, vulnerabilidades de ataque, coisas ruins, mas responde à pergunta conforme solicitado.
Psaxton #
18
É simplesmente inútil criar nomes de variáveis variáveis. Por quê?
Eles são desnecessários: você pode armazenar tudo em listas, dicionários e assim por diante
Eles são difíceis de criar: você precisa usar execouglobals()
Você não pode usá-los: Como você escreve código que usa essas variáveis? Você tem que usar exec/globals()novamente
Usar uma lista é muito mais fácil:
# 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 themprint string
print string[6]# or pick any of them
Obrigado!! Eu precisava escolher o formulário entre o dicionário ou a lista de dataframe. E como eu precisava reordenar o quadro de dados com base em um determinado valor no quadro de dados, não poderia ter usado o formulário de dicionário. Sim você está certo! Em alguns casos, é realmente inútil criar nomes de variáveis!
Doo Hyun Shin
9
Não faça isso, use um dicionário
import sys
this = sys.modules[__name__]# this is now your current namespacefor 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
não faça isso, use um ditado
globals () tem risco, pois fornece a você o que o espaço para nome está apontando, mas isso pode mudar e, portanto, modificar o retorno de globals () não é uma boa ideia
Diferentemente de alguns idiomas, você não pode atribuir a elementos em uma lista Python que ainda não existem (você receberá um erro "índice de atribuição de lista fora do intervalo"). Você pode usar em seu string.append("Hello")lugar.
Greg Hewgill
1
Eu deveria saber disso, obrigado por me lembrar. Está corrigido.
Lledargo
Você está certo, eu estava pensando em adicionar no final de uma string, não em uma matriz. Peço desculpas a todos.
Lledargo
Pedanticamente 'você teria 9 "Olá"' deveria ser 'você teria 1 "Olá" 9 vezes'. É a mesma sequência repetida, não nove seqüências de diferença.
Duncan
2
Eu acho que o desafio aqui não é invocar global ()
Eu pessoalmente definiria uma lista para suas variáveis (dinâmicas) a serem mantidas e, em seguida, acrescentaria a ela dentro de um loop for. Em seguida, use um loop for separado para visualizar cada entrada ou até executar outras operações.
Aqui está um exemplo - eu tenho vários comutadores de rede (digamos entre 2 e 8) em várias filiais. Agora, preciso garantir que tenho uma maneira de determinar quantos comutadores estão disponíveis (ou teste de ping ativo) em qualquer ramificação e executar algumas operações neles.
Aqui está o meu código:
import requests
import sys
def switch_name(branchNum):# s is an empty list to start with
s =[]#this FOR loop is purely for creating and storing the dynamic variable names in sfor x in range(1,8,+1):
s.append("BR"+ str(branchNum)+"SW0"+ str(x))#this FOR loop is used to read each of the switch in list s and perform operations onfor i in s:print(i,"\n")# other operations can be executed here too for each switch (i) - like SSH in using paramiko and changing switch interface VLAN etc.def main():# for example's sake - hard coding the site code
branchNum="123"
switch_name(branchNum)if __name__ =='__main__':
main()
O dicionário pode conter valores e os valores podem ser adicionados usando o método update (). Você deseja que seu sistema crie variáveis, portanto, você deve saber onde manter.
variables ={}
break_condition=True# Dont forget to add break condition to while loop if you dont want your system to go crazy.
name =“variable”
i =0
name = name + str(i)#this will be your variable name.whileTrue:
value =10#value to assign
variables.update({name:value})if break_condition ==True:break
x = ["Hello" * 9]
acessá-lo porx[0], x[1] ...
Se você quiser usá-lo de uma maneira diferente, acho que você terá que nos fornecer um pouco mais de experiência com o código.SyntaxError: Use a data structure.
;-)x
sendo uma lista contendo um único elemento - a sequência "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello". Eu acho que você quis dizerx = ["Hello"] * 9
.Respostas:
Certamente você pode; é chamado de dicionário :
Eu disse isso de certa forma, mas a melhor maneira de associar um valor a outro é um dicionário. Foi para isso que foi projetado!
fonte
É uma péssima ideia, mas ...
e depois por exemplo:
Darei à você:
No entanto, isso é uma prática ruim. Você deve usar dicionários ou listas, como outros propõem. A menos, é claro, que você realmente queira saber como fazê-lo, mas não queira usá-lo.
fonte
globals()
vez de algumas simplesdict
.Uma maneira de fazer isso é com
exec()
. Por exemplo:Aqui estou aproveitando a formatação prática da string f no Python 3.6+
fonte
exec
algo, magia negra, vulnerabilidades de ataque, coisas ruins, mas responde à pergunta conforme solicitado.É simplesmente inútil criar nomes de variáveis variáveis. Por quê?
exec
ouglobals()
exec/globals()
novamenteUsar uma lista é muito mais fácil:
fonte
Não faça isso, use um dicionário
não faça isso, use um ditado
globals () tem risco, pois fornece a você o que o espaço para nome está apontando, mas isso pode mudar e, portanto, modificar o retorno de globals () não é uma boa ideia
fonte
Isso deve funcionar.
fonte
Eu usaria uma lista:
Dessa forma, você teria 9 "Olá" e poderia obtê-los individualmente assim:
Onde
x
identificaria qual "Olá" você deseja.Então,
print(string[1])
iria imprimirHello
.fonte
string.append("Hello")
lugar.Eu acho que o desafio aqui não é invocar global ()
Eu pessoalmente definiria uma lista para suas variáveis (dinâmicas) a serem mantidas e, em seguida, acrescentaria a ela dentro de um loop for. Em seguida, use um loop for separado para visualizar cada entrada ou até executar outras operações.
Aqui está um exemplo - eu tenho vários comutadores de rede (digamos entre 2 e 8) em várias filiais. Agora, preciso garantir que tenho uma maneira de determinar quantos comutadores estão disponíveis (ou teste de ping ativo) em qualquer ramificação e executar algumas operações neles.
Aqui está o meu código:
A saída é:
BR123SW01
BR123SW02
BR123SW03
BR123SW04
BR123SW05
BR123SW06
BR123SW07
fonte
O uso de dicionários deve ser o caminho certo para manter as variáveis e os valores associados, e você pode usar isso:
Mas se você deseja adicionar as variáveis às variáveis locais, pode usar:
E, por exemplo, se você desejar atribuir os valores de 0 a 8, poderá usar:
fonte
O dicionário pode conter valores e os valores podem ser adicionados usando o método update (). Você deseja que seu sistema crie variáveis, portanto, você deve saber onde manter.
fonte