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:
- mydict['somekey']
You can quite easily extend the dict to enable you to write code that works like this:
- 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.
- class MyCustomDict(dict):
- def __getattr__(self,key):
- return self.get(key)
- def __setattr__(self,key,value):
- self[key] = value
- class GameState(MyCustomDict):
- pass
- class Coalition(MyCustomDict):
- pass
- def collect_coalition(coalition,player_count,prefix="v",player_id=1):
- for i in range(player_id,player_count+1):
- coalition_id = "%s%s"%(prefix,i)
- print coalition_id
- coalition[coalition_id] = int(raw_input("How much is worth the coalition v(%s)?"%(coalition_id)))
- for i in range(player_id,player_count+1):
- new_prefix = "%s%s"%(prefix,i)
- collect_coalition(coalition,player_count,new_prefix,i+1)
- def main():
- mydata = MyCustomDict()
- mydata.foo = "bar"
- print mydata['foo']
- mydata['foo'] = "baz"
- print mydata.foo
- print mydata['foo']
- state = GameState()
- player_count = 3
- #player_count = int(raw_input("How many players?"))
- state.coalition = Coalition()
- collect_coalition(state.coalition,player_count)
- print state.coalition
- print state.coalition.v1
- print state.coalition.v23
- print state.coalition.v123
- print state.coalition['v1']
- print state.coalition['v23']
- print state.coalition['v123']
- 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.
Articoli simili
- È consigliabile imparare Tkinter in Python per avanzare la propria carriera o per ottenere una migliore offerta di lavoro come sviluppatore Python?
- Come eseguire uno script Python senza installare Python
- Come creare un gioco di corazzata in Python
- Come creare un file di salvataggio per un gioco scritto in Python