|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2003
Messaggi: 2987
|
[Python] Eseguire una funzione passata come parametro
Ciao a tutti,
vorrei sapere se è possibile eseguire una funzione passata come parametro. Mi spiego meglio. Chiamiamo A il "main" e ipotizziamo che tra i parametri da riga di comando ci sia il nome di una funzione da chiamare (ad es B) definita in un altro file.py. Se il nome della funzione è il primo argomento argv[1], servirebbe qualcosa del tipo chiama(argv[1]) E' possibile? Grazie, Xwang PS spero che sia chiaro cosa mi servirebbe
__________________
ASUS N752VX Arch AMD64 + KDE |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2003
Messaggi: 2987
|
Forse ho risolto usando il modulo runpy.run_module.
Va bene o ci ono alternative migliori? Grazie, Xwang
__________________
ASUS N752VX Arch AMD64 + KDE |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Feb 2001
Città: Foggia
Messaggi: 2519
|
sì, scrivo di getto senza provare però, quindi potrebbe esserci qualche errore ma l'idea è quella.
Codice:
lista_comandi = [e.lstrip('-') for e in sys.argv[1:]]
for comando in lista_comandi:
eval(comando)()
__________________
mi sembra di essere tornato adolescente ai bei tempi.. che figata essere di nuovo su questo forum |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2003
Messaggi: 2987
|
Con runpy funziona, ma non sono riuscito a condividere variabili globali tra le due funzioni (forse perchè ho solo qualche ora di esperienza con python...).
In serata proverò anche con eval, magari semplifica i problemi con le global. Xwang
__________________
ASUS N752VX Arch AMD64 + KDE |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Feb 2001
Città: Foggia
Messaggi: 2519
|
anche se non ti ho detto che l'utilizzo di eval è sconsigliato, dà non poche rogne dal punto di vista di manutenibilità del codice e altro.. puoi risolvere così:
Codice:
lista_comandi = [e.lstrip('-') for e in sys.argv[1:]]
for comando in lista_comandi:
getattr(nomemodulo, comando, altrafunz_se_comando_nonsitrova)()
__________________
mi sembra di essere tornato adolescente ai bei tempi.. che figata essere di nuovo su questo forum Ultima modifica di cdere : 13-02-2011 alle 19:22. |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Codice:
def g():
print 'g!'
def f():
print 'f'!
Dispatcher = {'f' : f, 'g' : g}
MiaFunzione = 'f'
Dispatcher[MiaFunzione]()
Codice:
def g(): print 'g!' def f(): print 'f'! MiaFunzione = 'f' globals()[MiaFunzione]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Oct 2003
Messaggi: 2987
|
Ho risolto così:
module=__import__(moduleName) importando il modulo e poi chiamando le singole funzioni del modulo importato (che saranno sempre le stesse al varaiare dei moduli). Che ne pensate? Xwang
__________________
ASUS N752VX Arch AMD64 + KDE |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Oct 2003
Messaggi: 2987
|
Un'altra domanda. Meglio pyton 2.6.5 o 3.1.2? Ubuntu me li rende disponibili tutti e due, ma adesso è installata la 2.6.5.
Xwang
__________________
ASUS N752VX Arch AMD64 + KDE |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Feb 2001
Città: Foggia
Messaggi: 2519
|
ad oggi, se devi imparare qualcosa e non hai vincoli di sorta (librerie particolari che non vanno ancora con python 3, vedi django o twisted) vai con python 3.
Che poi non capisco come ubuntu sia ferma al 2.6.x visto che l'ultima release stabile di ramo 2.x è la 2.7...
__________________
mi sembra di essere tornato adolescente ai bei tempi.. che figata essere di nuovo su questo forum |
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Oct 2003
Messaggi: 2987
|
Quote:
Xwang
__________________
ASUS N752VX Arch AMD64 + KDE |
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Riguardo alle versioni di Python, concordo con cdere.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Oct 2003
Messaggi: 2987
|
Grazie ad entrambi per l'aiuto.
Mi sto appassionando sempre più a python e sto sperimentando un po' anche con shedskin nel caso mi servisse più velocità. Ovviamente non mancherò di "rompervi" con altre domande :-) Per la versione rimarrò su questa 2.6.5 Xwang
__________________
ASUS N752VX Arch AMD64 + KDE |
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Oct 2003
Messaggi: 2987
|
Eccomi qui.
Adesso le cose si fanno difficili. Il programma A chiama all'interno di un ciclo infinito la funzione B. E questo va bene. Però avrei bisogno di usare un joystick e di inviare/ricevere pacchetti udp. Per il joystick serve con pygame un ciclo infinito che rimanga in ascolto di eventi dal joystick e per la ricezione dei pacchetti UDP penso serva la stessa cosa. Come faccio? Temo di aver bisogno di usare dei thred specifici per i due listener del joystick e dei pacchetti UDP. Sbaglio? Grazie, Xwang
__________________
ASUS N752VX Arch AMD64 + KDE |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Penso sia la strada corretta.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Oct 2003
Messaggi: 2987
|
Mi puoi consigliare esempi o dove trovare documentazione al riguardo?
Grazie, Xwang
__________________
ASUS N752VX Arch AMD64 + KDE |
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Per i thread?
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Oct 2003
Messaggi: 2987
|
Si.
Anche perchè sinceramente gli esempi che ho visto svolgono tutti dei cicli while infiniti e non capisco come non facciano ad occupare la cpu al 100% senza fare niente. Inoltre non ho capito come passare dati dal mio programma ai thread e viceversa. Xwang
__________________
ASUS N752VX Arch AMD64 + KDE |
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Codice:
import Queue, threading, time
class CustomThread(threading.Thread):
def run(self):
while True:
Job = Jobs.get()
print 'Ho ricevuto il seguente lavoro:', Job
Results.put(Job)
Jobs = Queue.Queue()
Results = Queue.Queue()
MyThread = CustomThread()
MyThread.start()
Jobs.put('Uno!')
time.sleep(1)
Jobs.put('Due!')
time.sleep(1)
Jobs.put('Tre!')
while len(Results):
print 'Ho ricevuto:', Results.get()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Oct 2003
Messaggi: 2987
|
Grazie,
adesso ci lavorerò per le comunicazioni udp. Nel frattempo ho risolto il problema del joystick usando pygame, inizializzando il joystick e con una funzione che ad ogni chiamata processa tutti gli eventi in coda non ancora analizzati. Fino ad uin rateo di 200 hz non ho problemi quindi posso fare a meno per il joystick (e per ciò che voglio fare) di un thread apposito. Xwang
__________________
ASUS N752VX Arch AMD64 + KDE |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:06.




















