2014-02-19 10 views
5

Ich habe diesen Funktionsaufruf nach dem Importieren foo.py. Foo hat mehrere Methoden, die ich z. foo.paint, foo.draw:Wie man durch die Funktionen eines Moduls iteriert

import foo 

code 

if foo: 
    getattr(foo, 'paint')() 

Ich brauche eine while-Schleife verwenden, um alle Funktionen foo.paint anrufen und iterieren, foo.draw usw. Wie gehe ich davon?

+0

Ich glaube nicht, dass ein ist Duplikat. In dieser Frage wollte der OP nur Informationen, in diesem möchte er eigentlich die Funktionen nennen. –

Antwort

16

Sie können foo.__dict__ verwenden irgendwie so:

for name, val in foo.__dict__.iteritems(): # iterate through every module's attributes 
    if callable(val):      # check if callable (normally functions) 
     val()        # call it 

Aber Vorsicht, das wird jede Funktion (aufrufbar) in dem Modul auszuführen. Wenn eine bestimmte Funktion Argumente erhält, schlägt sie fehl.

Eine elegantere (funktionale) Art und Weise Funktionen würde zu bekommen:

[f for _, f in foo.__dict__.iteritems() if callable(f)] 

Zum Beispiel werden dadurch alle Funktionen auflisten im math Methode:

import math 
[name for name, val in math.__dict__.iteritems() if callable(val)] 
['pow', 
'fsum', 
'cosh', 
'ldexp', 
...] 
+0

@BiRico aber das sind Methoden eines _Modul_. –

+0

@wakamdr hat es für Sie funktioniert? –

+0

ist neu in Python ist ein bisschen verwirrt darüber, wie dies zu implementieren: [f für _, f in foo .__ dict __. Iteritems() wenn aufrufbar (f)]. Ich bekomme AttributeError: 'dict' Objekt hat kein Attribut 'iteritems' – wakamdr

Verwandte Themen