2016-10-04 1 views
0
def fxn(L): 
    """ 
    """ 
    global L = 2 

L = 1 
fxn(L) 
print(L) 

Ich habe eine Funktion wie die oben genannte. Angenommen, ich brauche die Funktion, um die globale Variable innerhalb der Funktion so zu ändern, dass ich nach dem Aufruf von fxn (L) L drucke. Ich am Ende mit der 2 statt 1.Python: Funktion zum Ändern einer globalen Variable, die auch Parameter ist

Gibt es eine Möglichkeit, dies zu tun? Ich kann globale L in der Funktion nicht benutzen, weil L auch ein Parameter ist.

+4

* Warum * müssen Sie den gleichen Namen für beide verwenden? Ich konnte sehen, warum Sie nicht in der Lage sind, das Globale zu ändern, aber warum können Sie den Parameter nicht ändern? –

+0

^^ Ja. Ich verstehe auch nicht, warum Sie das 'L'-Argument, das Sie in Ihrer' fxn'-Methodendeklaration definieren, nicht ändern können. – idjaw

+0

Da Sie gefragt haben, habe ich die Antwort mit einem Weg hinzugefügt, um dies zu erreichen. Sie sollten jedoch nicht die gleiche Variable wie die globale Variable und das funktionale Argument für die Funktion verwenden, die diese globale Variable verwendet. –

Antwort

0

Sie sollten nicht dieselbe Variable wie die globale Variable und das funktionale Argument für die Funktion verwenden, die diese globale Variable verwendet.

Aber da Sie gefragt haben, können Sie es mit der globals() und locals() tun. Unten ist der Beispielcode:

>>> x = 5 
>>> def var_test(x): 
...  print('GLOBAL x: ', globals()['x']) 
...  print('LOCAL x: ', locals()['x']) 
...  globals()['x'] = 111 
...  print('GLOBAL x: ', globals()['x']) 
...  print('LOCAL x: ', locals()['x']) 
... 
>>> var_test(20) 
GLOBAL x: 5 
LOCAL x: 20 
GLOBAL x: 111 
LOCAL x: 20 
0

Dies ist eine schlechte Idee, aber es gibt Möglichkeiten, zum Beispiel:

a = 5 

def f(a): 
    def change_a(value): 
     global a 
     a = value 
    change_a(7) 

f(0) 

print(a) # prints 7 

In Wirklichkeit gibt es selten eine Notwendigkeit, globale Variablen für das Schreiben. Und dann gibt es kaum eine Chance, dass das Globale denselben Namen hat wie eine Variable, die den Namen einfach nicht ändern kann.

Wenn Sie in einer solchen Situation sind, fragen Sie sich "verwende ich global zu oft?"

+0

Das ist sehr hinterhältig. –

+0

@ juanpa.arrivillaga: D Danke, schätze ich – zvone

Verwandte Themen