Casa > C > Como Criar Dinamicamente Variáveis Em Python

Como criar dinamicamente variáveis em Python

Se você está procurando criar dinamicamente variáveis nomeadas em Python, você quase certamente está fazendo isso errado. Python é uma linguagem muito dinâmica. Tudo em Python é um objeto de primeiro nível. Até mesmo funções são objetos. Porque tudo é um objeto, você pode atribuir atributos a qualquer coisa em Python. Mais python fornece uma estrutura de objetos muito flexível que permite que você faça dicionários como objetos muito facilmente, e depois estenda a sintaxe para se adequar às suas necessidades. I.E. while a dictionary is accessed like this:

  1. mydict['somekey'] 

You can quite easily extend the dict to enable you to write code that works like this:

  1. mydict.somekey 

And then it can support both alternatives. Então isto deve lhe dar uma boa dica de como você pode realizar o que você quer sem tentar declarar dinamicamente variáveis nomeadas.

  1. class MyCustomDict(dict): 
  2. def __getattr__(self,key): 
  3. return self.get(key) 
  4.  
  5. def __setattr__(self,key,value): 
  6. self[key] = value 
  7.  
  8. class GameState(MyCustomDict): 
  9. pass 
  10.  
  11. class Coalition(MyCustomDict): 
  12. pass 
  13.  
  14. def collect_coalition(coalition,player_count,prefix="v",player_id=1): 
  15. for i in range(player_id,player_count+1): 
  16. coalition_id = "%s%s"%(prefix,i) 
  17. print coalition_id 
  18. coalition[coalition_id] = int(raw_input("How much is worth the coalition v(%s)?"%(coalition_id))) 
  19.  
  20. for i in range(player_id,player_count+1): 
  21. new_prefix = "%s%s"%(prefix,i) 
  22. collect_coalition(coalition,player_count,new_prefix,i+1) 
  23.  
  24. def main(): 
  25. mydata = MyCustomDict() 
  26. mydata.foo = "bar" 
  27. print mydata['foo'] 
  28.  
  29. mydata['foo'] = "baz" 
  30. print mydata.foo 
  31. print mydata['foo'] 
  32.  
  33.  
  34. state = GameState() 
  35.  
  36. player_count = 3 
  37. #player_count = int(raw_input("How many players?")) 
  38.  
  39. state.coalition = Coalition() 
  40. collect_coalition(state.coalition,player_count) 
  41.  
  42. print state.coalition 
  43.  
  44. print state.coalition.v1 
  45. print state.coalition.v23 
  46. print state.coalition.v123 
  47.  
  48. print state.coalition['v1'] 
  49. print state.coalition['v23'] 
  50. print state.coalition['v123'] 
  51.  
  52.  
  53.  
  54. if __name__ == "__main__": main() 

The getattr/setattr is really only the answer to the question you asked, how do I create dynamic variables. But the real answer to how do you generate the names you need in order to use a hash, is by using a recursive function, at least that is the simple way to do it. O exemplo acima ilustra ambos.

De Auvil Steppello

Como inserir uma dita dinâmica com uma chave e um valor inserido a partir da entrada em Python 3.6 :: Como converter um arquivo de áudio em um CSV em Python