[Python] cambiare nome di variabile in un ciclo
ciao a tutti.
Vorrei chiedervi una mano per risolvere un problema a cui non ho trovato
soluzione.
Come posso fare ad assegnare un nome di variabile diverso per ogni
iterazione in un ciclo (for per esempio).
Mi spiego meglio...
Avrei bisogno di fare una cosa del genere:
for i in range(20,100):
self.label_(i).set.text('Ciao')
^
|
Al posto di questa i vorrei mettere il numero corrispondente.
E' possibile?
La funzione lambda potrebbe aiutarmi in questo caso???
Ho guardato qualche esempio ma non sono riuscito a risolvere
Grazie
Matteo P
___
Python mailing list
[email protected]
http://lists.python.it/mailman/listinfo/python
Re: [Python] cambiare nome di variabile in un ciclo
On Mon, Sep 10, 2012 at 09:27:23AM +0200, Matteo Perini wrote:
> ciao a tutti.
> Vorrei chiedervi una mano per risolvere un problema a cui non ho
> trovato soluzione.
>
> Come posso fare ad assegnare un nome di variabile diverso per ogni
> iterazione in un ciclo (for per esempio).
>
> Mi spiego meglio...
> Avrei bisogno di fare una cosa del genere:
>
> for i in range(20,100):
> self.label_(i).set.text('Ciao')
>
> ^
> |
>
> Al posto di questa i vorrei mettere il numero corrispondente.
> E' possibile?
non proprio ma puoi raggiungere lo stesso risultato con:
for i in range(20, 100):
label = getattr(self, 'label_%s' % i, None)
if label:
label.set_text('ciao')
m.
___
Python mailing list
[email protected]
http://lists.python.it/mailman/listinfo/python
Re: [Python] cambiare nome di variabile in un ciclo
On 10/09/12 09:27, Matteo Perini wrote:
ciao a tutti.
Vorrei chiedervi una mano per risolvere un problema a cui non ho
trovato soluzione.
Come posso fare ad assegnare un nome di variabile diverso per ogni
iterazione in un ciclo (for per esempio).
Mi spiego meglio...
Avrei bisogno di fare una cosa del genere:
for i in range(20,100):
self.label_(i).set.text('Ciao')
Allora probabilmente vuoi una lista:
for i in range(20, 100):
self.label_list[i].set.text('Ciao')
Lorenzo
P.S. ma è pyGtk? Perché nel caso non mi torna il set.text visto che
sarebbe set_text)
^
|
Al posto di questa i vorrei mettere il numero corrispondente.
E' possibile?
La funzione lambda potrebbe aiutarmi in questo caso???
Ho guardato qualche esempio ma non sono riuscito a risolvere
Grazie
Matteo P
___
Python mailing list
[email protected]
http://lists.python.it/mailman/listinfo/python
___
Python mailing list
[email protected]
http://lists.python.it/mailman/listinfo/python
Re: [Python] cambiare nome di variabile in un ciclo
La cosa migliore è usare una lista di label. E quindi accedere alla label i
con lista_label[i].setText
Altrimenti devi accedervi tramite il __dict__. Tipo
self.__dict__["label_%d" % i].setText
Il giorno 10/set/2012 09:27, "Matteo Perini" ha
scritto:
> ciao a tutti.
> Vorrei chiedervi una mano per risolvere un problema a cui non ho trovato
> soluzione.
>
> Come posso fare ad assegnare un nome di variabile diverso per ogni
> iterazione in un ciclo (for per esempio).
>
> Mi spiego meglio...
> Avrei bisogno di fare una cosa del genere:
>
> for i in range(20,100):
> self.label_(i).set.text('Ciao'**)
>
> ^
> |
>
> Al posto di questa i vorrei mettere il numero corrispondente.
> E' possibile?
>
> La funzione lambda potrebbe aiutarmi in questo caso???
> Ho guardato qualche esempio ma non sono riuscito a risolvere
>
> Grazie
> Matteo P
> __**_
> Python mailing list
> [email protected]
> http://lists.python.it/**mailman/listinfo/python
>
___
Python mailing list
[email protected]
http://lists.python.it/mailman/listinfo/python
[Python] Richiamare funzione componendo il nome
Salve, non so se si è capito il mio problema dall' oggetto del messaggio. Cmq quello che voglio fare è richiamare una funzione esistente componendo il suo nome. Posto il codice. def sequenza_domande(): for n in ncasuali[:]: #lista riempita precedentemente con dei numeri casuali "domanda_"+str(n)+"()" # richiamo una funzione componendo il nome il problema è che non considera la chiamata. C'è qualcuno che può aiutarmi? ___ Python mailing list [email protected] http://lists.python.it/mailman/listinfo/python
Re: [Python] cambiare nome di variabile in un ciclo
Grazie a tutti delle risposte.
Ho risolto usando setattr.
Scusate ma rispondo da cellulare e non riesco ad allegare ciò che ho fatto
Ciao
Matteo
Il giorno 10/set/2012 11.26, "Giacomo Alzetta"
ha scritto:
> La cosa migliore è usare una lista di label. E quindi accedere alla label
> i con lista_label[i].setText
> Altrimenti devi accedervi tramite il __dict__. Tipo
> self.__dict__["label_%d" % i].setText
> Il giorno 10/set/2012 09:27, "Matteo Perini" ha
> scritto:
>
>> ciao a tutti.
>> Vorrei chiedervi una mano per risolvere un problema a cui non ho trovato
>> soluzione.
>>
>> Come posso fare ad assegnare un nome di variabile diverso per ogni
>> iterazione in un ciclo (for per esempio).
>>
>> Mi spiego meglio...
>> Avrei bisogno di fare una cosa del genere:
>>
>> for i in range(20,100):
>> self.label_(i).set.text('Ciao'**)
>>
>> ^
>> |
>>
>> Al posto di questa i vorrei mettere il numero corrispondente.
>> E' possibile?
>>
>> La funzione lambda potrebbe aiutarmi in questo caso???
>> Ho guardato qualche esempio ma non sono riuscito a risolvere
>>
>> Grazie
>> Matteo P
>> __**_
>> Python mailing list
>> [email protected]
>> http://lists.python.it/**mailman/listinfo/python
>>
>
> ___
> Python mailing list
> [email protected]
> http://lists.python.it/mailman/listinfo/python
>
>
___
Python mailing list
[email protected]
http://lists.python.it/mailman/listinfo/python
Re: [Python] Richiamare funzione componendo il nome
Si puo' fare o raccogliendo le funzioni in precedenza
definite in una lista oppure con exec (meno consigliato).
--
funzioni=[f1,f2,g,h,...]
for f in funzioni: f()
--
for n in ncasuali: exec('%s%d()' %(prefisso,n)
--
# Esempio:
def f1 (): print('f1')
def f2 (): print('f2')
def g (): print('g')
def h (): print('h')
funzioni=[f1,f2,g,h]
for f in funzioni: f()
for n in [1,2]: exec('f%d()' %n)
--
Josef Eschgfaeller
___
Python mailing list
[email protected]
http://lists.python.it/mailman/listinfo/python
Re: [Python] Richiamare funzione componendo il nome
Il giorno 10 settembre 2012 12:47, [email protected] ha scritto: > Salve, non so se si è capito il mio problema dall' oggetto del messaggio. > Cmq > quello che voglio fare è richiamare una funzione esistente componendo il > suo > nome. > Posto il codice. > > def sequenza_domande(): > for n in ncasuali[:]: #lista riempita precedentemente con dei numeri > casuali > "domanda_"+str(n)+"()" # richiamo una funzione componendo il nome > > il problema è che non considera la chiamata. > C'è qualcuno che può aiutarmi? > oltre a quello che ti è già stato suggerito, puoi considerare di usare anche getattr dopo aver importato il modulo in cui è definita la funzione (codice non testato!): m = __import__(__name__) f = getattr(m, "domanda_"+str(n)) e poi chiami la funzione con: f() ciao, Marco ___ Python mailing list [email protected] http://lists.python.it/mailman/listinfo/python
[Python] I: Re: Richiamare funzione componendo il nome
Messaggio originale Da: [email protected] Data: 10/09/2012 15.14 A: Ogg: R: Re: [Python] Richiamare funzione componendo il nome Messaggio originale Da: [email protected] Data: 10/09/2012 13.58 A: "[email protected]", "Discussioni generali sul linguaggio Python" Ogg: Re: [Python] Richiamare funzione componendo il nome Il giorno 10 settembre 2012 12:47, [email protected] ha scritto: Salve, non so se si è capito il mio problema dall' oggetto del messaggio. Cmq quello che voglio fare è richiamare una funzione esistente componendo il suo nome. Posto il codice. def sequenza_domande(): for n in ncasuali[:]: #lista riempita precedentemente con dei numeri casuali "domanda_"+str(n)+"()" # richiamo una funzione componendo il nome il problema è che non considera la chiamata. C'è qualcuno che può aiutarmi? oltre a quello che ti è già stato suggerito, puoi considerare di usare anche getattr dopo aver importato il modulo in cui è definita la funzione (codice non testato!): m = __import__(__name__) f = getattr(m, "domanda_"+str(n)) e poi chiami la funzione con: f() ciao, Marco Grazie Marco con questo metodo è andato tutto liscio come l'olio, effettivamente richiama l'attributo nome, ed è molto utile perchè nel mio caso evito di fare uno switch con if..elif..else per esempio per 100 domande. ___ Python mailing list [email protected] http://lists.python.it/mailman/listinfo/python
