QNA > C > Come Creare Dinamicamente Le Variabili In Python

Come creare dinamicamente le variabili in Python

Se state cercando di creare dinamicamente variabili con nome in Python, quasi certamente lo state facendo in modo sbagliato. Python è un linguaggio molto dinamico. Tutto in Python è un oggetto di primo livello. Anche le funzioni sono oggetti. Poiché tutto è un oggetto, potete assegnare attributi a qualsiasi cosa in Python. Inoltre Python fornisce un framework di oggetti molto flessibile che ti permette di fare oggetti simili a dizionari molto facilmente, e poi estendere la sintassi per soddisfare le tue esigenze. 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. Quindi questo dovrebbe darvi un buon suggerimento su come potreste realizzare ciò che volete senza tentare di dichiarare dinamicamente le variabili con nome.

  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. L'esempio qui sopra illustra entrambi.

Di Corrine

Come collegare il codice python con HTML :: Can Django have two views.py files?
Link utili