[Python] cambiare nome di variabile in un ciclo

2012-09-10 Per discussione Matteo Perini

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

2012-09-10 Per discussione Marco Giusti
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

2012-09-10 Per discussione Lorenzo Sutton

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

2012-09-10 Per discussione Giacomo Alzetta
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

2012-09-10 Per discussione [email protected]
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

2012-09-10 Per discussione Matteo Perini
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

2012-09-10 Per discussione Josef Eschgfaeller
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

2012-09-10 Per discussione Marco De Paoli
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

2012-09-10 Per discussione [email protected]




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