2016-05-05 17 views
1

Was ist der richtige Weg, um einen Kontext (ohne bestimmten Typ) an eine Funktion zu übergeben? Es gibt mehrere Methoden, die jeweils einen Kontext in ihrer Signatur akzeptieren. Jede Funktion weiß, welche Variable sie in den Kontext sehen soll (im Beispiel unten weiß f1, dass sie nach "a" suchen soll). Ich kann nicht herausfinden, wie ich Kontext definieren und einen Wert auf eine seiner Eigenschaften setzen kann.Python: Wie übergibt man einen Kontext an eine Funktion

Ich schreibe dies mit C-Hintergrund, so könnte es ein wenig peinlich in Python Welt aussehen, und jeder Vorschlag, wie das Ganze zu wiederholen ist auch akzeptiert. In C sollte der Kontext für alle Variablen, die er setzen könnte, vollständig definiert sein. In Python, da es dynamisch ist, habe ich den Eindruck, dass wir keinen Typ für die Kontextvariable brauchen, aber ich bin mir nicht sicher, ohne Kontext zu definieren, wie ich context.a setzen kann.

def f1(context): 
    a = context.a 
    print "a: " + a 

def f2(context): 
    b = context.b 
    print "b: " + b 

context1.a = "testing1" 
f1(context1) 

context2.b = "testing2" 
f2(context2) 
+0

Es ist nicht klar, was Sie zu tun versuchen. Pythons Variablen sind nicht typisiert. Sie können also eine Variable initialisieren und an eine Funktion übergeben. – yelsayed

Antwort

2

Sie können eine „leere“ Klasse definieren und dynamisch Variablen im Code auf eine Instanz dieser Klasse hinzufügen:

#!python3 

class Context: 
    pass 

def f1(context): 
    a = context.a 
    print("a:", a) 

def f2(context): 
    b = context.b 
    print("b:", b) 

c = Context() 
c.a = 1 
c.b = "alfalfa" 

f1(c) 
f2(c) 
+0

Das war schlau! Gibt es eine Dummy-Klasse in Python, die ich verwenden kann, anstatt meine eigene Context-Klasse zu definieren? – apadana

+1

@apadana: Nein. Direkte Instanzen von 'Objekt' können nicht mutiert werden. –

1

Python ist eine dynamische Sprache, daher können Sie jeden beliebigen Typ wie jedes Argument übergeben, und es ist bis zu dem Code innerhalb der:

Ein vereinfachtes Beispiel dafür, was ich zu tun versuchen, ist unten gezeigt funktionieren, um das Richtige zu tun.

"Duck typing" on Wikipedia

+0

Kannst du es ein bisschen mit einem Beispiel erklären, damit einige Anfänger wie ich es verstehen können? –

Verwandte Themen