2012-04-09 19 views
1

Betrachten Sie diese Zeile in der pygame Schleife:fill() in pygame.display.set_mode() füllen ((0, 200, 255))

pygame.display.set_mode().fill((0, 200, 255)) 

Von: http://openbookproject.net/thinkcs/python/english3e/pygame.html

I. Wie Solltest du wissen, dass sogar eine Füllfunktion in set_mode verschachtelt ist? Ich suchte in der Pygame-Dokumentation und es gibt keine Informationen zum Ausfüllen des Abschnitts set_mode.

II. set_mode() ist eine Funktion des Anzeigemoduls des Pygame-Pakets. Wie kann ich eine Funktion aufrufen, die in einer anderen Funktion verschachtelt ist? Wie konnte ich print"hi" mit dieser Funktion aufrufe (versucht, es aber ein Attribut erhalten):

def f(): 
    def g(): 
     print "hi" 

Antwort

4

Die pygame.display.set_mode() gibt eine Oberfläche Objekt.

Vom documentation:

pygame.display.set_mode ein Fenster oder Bildschirm für pygame.display.set_mode Anzeige initialisieren (Auflösung = (0,0), Merker = 0, Tiefe = 0): Rückoberflächen

So werden Sie die Methode .fill() auf der Oberfläche Objekt aufgerufen wird, nicht auf die Funktion set_mode().

Sie können die verfügbaren Methoden für Oberflächenobjekte in surface documentation von Pygame finden.

Sie können eine verschachtelte Funktion nicht auf diese Weise aufrufen. Um das gewünschte Ergebnis in Ihrem Druckbeispiel zu erhalten, können Sie Klassen auf folgende Weise verwenden:

class F(): 
    def g(self): 
    print "hi" 

in Resultierende:

>>> F().g() 
hi 

Dies ist ein vereinfachtes Beispiel zu zeigen, wie die display.set_mode().fill() Werke:

class Surface(): 
    def fill(self): 
     print "filling" 

class Display(): 
    def set_mode(self): 
     return Surface() 


Display().set_mode().fill() 

Edit:

Sie können verschachtelte Funktionen verwenden, aber es funktioniert etwas anders aus, wie Sie es mit Objekten und Module tun würde:

def f(): 
    def g(): 
    print "hi" 
    return g 

in Resultierende:

>>> outerf = f() 
>>> outerf() 
hi 
+0

Für I.: Ihr Beispiel unterscheidet sich vor allem, weil es 'Display' ist eine Klasse, während es in Pygame ein Modul ist. Ich denke, ich verstehe es. Vielen Dank!! Jetzt verstehe ich auch, warum display.set_mode() zuerst in einer Variablen gespeichert wird. Also für II .: Sie sagen, Sie können einfach nicht eine Funktion in einer anderen Funktion geschachtelt aufrufen. – Bentley4

+0

Sie können eine Funktion aufrufen, die in einer anderen Funktion verschachtelt ist. Es ist jedoch etwas anders gemacht. Siehe: http://StackOverflow.com/Questions/1589058/Nested-Function-in-Python Bearbeiten: Sie haben Recht, Display ein Modul zu sein. – veiset

+0

Thnx. Aber ich kann nicht finden, wie man die verschachtelte Funktion aufruft.In Ihrem Link jemand darauf hinweist, können Sie dies tun (auf mein Beispiel angewendet): 'Outerf = f()' dann 'Outerf()' Aber das funktioniert nicht. – Bentley4