2016-12-19 4 views
0

Ich habe eine Funktion, die verschiedene Formen von Arrays erstellt und ich kann nicht unterscheiden. Ist etwas Ähnliches möglich?Python3 - Funktionsparameter als Name der Variablen verwenden

def array_creator(nameArray): 
    nameArray = [0,1,2] 

array_creator(a) 
print(a) # prints [0,1,2] 

Im Moment ich immer die Funktion ausführen und dann manuell Variablen zuweisen, um die Arrays zu speichern. Danke!

+1

aber warum nicht einfach 'a = [0, 1, 2]'? Warum Menschen verwirren, indem sie den globalen Bereich innerhalb einer Funktion zuweisen? –

+3

Warum nicht einfach das Array zurückgeben, anstatt einen "output-Parameter" zu verwenden? –

Antwort

1

In Python Sie tun dies, indem Sie einen Wert aus der Funktion zurückkehrt und diesen Wert auf einen lokalen Namen verbindlich, das heißt:

def array_creator(): 
    return [0, 1, 2] 

a = array_creator() 
1

Damit Ihr Beispiel funktioniert, müssen Sie Ihre Variable a definieren, bevor Sie sie verwenden. Z.B. a = []. Ihr Beispiel wird jedoch nicht so funktionieren, wie Sie es möchten. Der Grund dafür ist, dass Sie in der Zeile 2 ein neues Objekt ([1, 2, 3]) Ihrer Variablen nameArray zuweisen. Dadurch verlieren Sie den Bezug auf Ihr Objekt a. Es ist jedoch möglich, Ihr Objekt a von innerhalb der Funktion zu ändern.

def array_creator(nameArray): 
    nameArray.extend([0,1,2]) 

a = [] 
array_creator(a) 
print(a) # prints [0,1,2] 

Dies wird funktionieren. Weitere Informationen finden Sie unter How to write functions with output parameters.

0

Python nicht „Ausgangsparameter“ hat, also eine einfache Zuordnung wird nur ändern Die Bindung der lokalen Variablen, aber wird keinen Wert ändern noch Bindungen von Variablen außerhalb der Funktion ändern.

jedoch list s sind wandelbar, also, wenn Sie das Argument ändern möchten tun nur so:

nameArray[:] = [0,1,2] 

Dadurch wird der Inhalt von nameArray mit 0,1,2 ersetzen (funktioniert, wenn nameArray ein list ist).

Eine Alternative ist Ihre Funktion einfach zurückgeben den Wert, den Sie zuweisen möchten haben:

def array_creator(): 
    values = [0, 1, 2] 
    return values 

my_arr = array_creator() 

Schließlich, wenn die Funktion eine global/nonlocal Variable modifizieren will, dass Sie es als solche deklarieren müssen:

a = [1,2,3] 

def array_creator(): 
    global a 
    a = [0,1,2] 

print(a) # [1,2,3] 
array_creator() 
print(a) # [0,1,2] 

Oder:

def wrapper(): 
    a = [1,2,3] 
    def array_creator(): 
     nonlocal a 
     a = [0,1,2] 
    return a, array_creator 

a, creator = wrapper() 

print(a) # [1,2,3] 
creator() 
print(a) # [0,1,2] 

Beachten Sie jedoch, dass es in der Regel schlechte Praxis ist, globale Variablen auf diese Weise zu verwenden, also versuchen Sie es zu vermeiden.

Verwandte Themen