2017-10-08 1 views
0

Ich habe ein ein Code bekommt, die bestimmte Variable muss als wie geteilt werden:Python - wie Variablen zwischen Funktionen teilen (nicht mit globaler var)

def example(arg): 
    req = urllib2.Request(r'{}'.format(arg)) 
    ... 
def exampe2(arg): 
# i need this func to access req 
# i think i can't use req as a global var since the program might need to get imported and it would run from main() (which is again a function) 

würde wirklich gerne Ihre Hilfe!

+1

Sie fügen nur ein weiterer Parameter –

+0

Zurückgeben von 'example', übergeben es an' exampe2'. Oder, wenn der erstere den letzteren nennt, übergeben Sie ihn direkt. – jonrsharpe

Antwort

0

Wie in den Kommentaren gesagt; Sie können ein Pass-by-Parameter tun Methodik which'd wie folgt angewendet werden:

def example2(arg, req): 
    .... 

def example(arg): 
    req = urllib2.Request(r'{}'.format(arg)) 
    ... 
    return example2(..., req) 

Oder Sie könnten genauso gut die beiden Funktionen integrieren, wie Sie die beiden arg Parameter auf example und example2 kombinieren könnte.

0

könnte dieses Beispiel i

erraten helfen
def example1(arg): 
    example1.request = "from example1" 
    .... 

def example2(arg): 
    print(example1.request) 

example1("arg1") 
example2("arg2") 

> from example one 

sonst können Sie Anfrage als global tätigen und diesen Antrag varable in Ihrer example2 Funktion verwenden. Alles was Sie tun müssen, ist example1 vor example2 auszuführen. Oder Sie können die Anfrage von Beispiel1 zurückgeben und den Rückgabewert von Beispiel1 einer anderen Variablen in Beispiel2 zuweisen.

+0

Dies wird nicht ausgeführt, wenn die Funktionsaufrufe ausgetauscht werden, da das Attribut 'example1.request' durch Erstellen eines neuen Funktionsobjekts instanziiert werden muss. Ist es wirklich das Pythonic, um das zu tun? Sich auf Funktionen zu verlassen, die wirklich Objekte in Python sind, erscheint mir kompliziert. – plan

0

Einfach als Rückgabewerte und Parameter übergeben? Dies ist eine Funktion, da Sie so lokal wie möglich bleiben können. Wenn Ihre Funktion viele Argumente benötigt oder viele Ausgaben liefert, ist dies oft ein Zeichen dafür, dass sie in mehrere Funktionen aufgeteilt werden kann (eine Funktion sollte idealerweise eine klar getrennte Sache machen und als solche benannt werden).

In einigen Fällen möchten Sie natürlich einige Daten wie Konfigurationsoptionen weitergeben: Sie könnten dafür ein neues Objekt erstellen, aber warum nicht einfach ein Wörterbuch?

def make_request(arg, config): 
    req = urllib2.Request(r'{}'.format(arg)) 
    config['req'] = req 
    return config 

Bitte beachte, dass ich die dict zurück config, obwohl es nicht notwendig ist, da dicts wandelbar sind in Python. Das macht es nur im Code klar, dass ich es modifiziere. Nun können wir die config:

def exampe2(arg, config): 
    arg = config['arg'] 
    ...do stuff.. 
Verwandte Themen