2016-11-24 1 views
0

Ich habe mit einer Python-Frage zu kämpfen. Im folgenden Code muss ich str1 und str2 den innerhalb der Funktion null übergebenen Werten neu zuweisen ... Wir wurden gebeten, keine globale Variable zu setzen und nicht str1, str2 = null (s1, s2) zu verwenden, was irgendwie nicht funktioniert. Es macht Sinn für mich, warum wir nicht sollten.Python in Bezug auf die Änderung von Werten ohne globale oder Neuzuweisung

Bitte seien Sie freundlich genug, um mir zu helfen, dies herauszufinden! DANKE!

Das ist, was ich so weit gekommen ...

def zero(s1,s2): 

     #Initial values passed into the function 
     print("Start of ZERO s1 is :" , s1) 
     print("Start of ZERO s2 is :" , s2) 

     #setting new values for s1 and s2 
     s1 = [1,2,3] 
     s2 = [4,5,6] 

     #printing changes new values of s1 and s2 
     print("\nEnd of ZERO s1 is ", s1) 
     print("\nEnd of ZERO s2 is ", s2) 

     return s1,s2 

str1 = 'spam' 
str2 = {1:'m' , 'p' : 'a'} 

#values of str1 and str2 which should be changed to s1 and s2 inside the function should be here...... 
+0

der Tat, die keinen Sinn macht . Tatsächlich sind 'str1/2' bereits globale Variablen. –

+0

Sie könnten sich immer mit 'globals()' herumärgern und schrecklichen Code erzeugen. – TigerhawkT3

Antwort

0

Ein Weg, ich es zu tun denken kann, was ein bisschen hinterhältig ist, ist str1 und str2 in eine dict zu setzen und haben die Funktion ändern das Diktat.

Da, wenn Sie ein Dict nicht tief kopieren, Sie immer noch auf dasselbe Objekt verweisen, also wenn Sie es mutieren, mutieren Sie das zugrunde liegende Objekt.

def zero(str_dict): 

    s1 = str_dict['str1'] 
    s2 = str_dict['str2'] 

    #Initial values passed into the function 
    print("Start of ZERO s1 is :" , s1) 
    print("Start of ZERO s2 is :" , s2) 

    #setting new values for s1 and s2 
    s1 = [1,2,3] 
    s2 = [4,5,6] 

    #printing changes new values of s1 and s2 
    print("\nEnd of ZERO s1 is ", s1) 
    print("\nEnd of ZERO s2 is ", s2) 

    str_dict['str1'] = s1 
    str_dict['str2'] = s2 

str1 = 'spam' 
str2 = {1:'m' , 'p' : 'a'} 

#values of str1 and str2 which should be changed to s1 and s2 inside the function should be here...... 

jetzt testen

:

Ich würde Ihr Code wie folgt ändern

str_dict = { 
    "str1": str1, 
    "str2": str2 
} 

print str_dict 

zero(str_dict) 

print str_dict 

ich die folgende Ausgabe sehen:

{'str2': {1: 'm', 'p': 'a'}, 'str1': 'spam'} 
('Start of ZERO s1 is :', 'spam') 
('Start of ZERO s2 is :', {1: 'm', 'p': 'a'}) 
('\nEnd of ZERO s1 is ', [1, 2, 3]) 
('\nEnd of ZERO s2 is ', [4, 5, 6]) 
{'str2': [4, 5, 6], 'str1': [1, 2, 3]} 
+0

Vielen Dank für Ihre Hilfe! es funktioniert völlig in Ordnung! –

+0

Gern geschehen! Bitte, wenn es Ihnen nichts ausmacht, gehen Sie voran und akzeptieren Sie die Antwort. :) @NeshanKaluarachchi –

+0

Fertig! Ich bin ziemlich neu im Umgang mit Stackoverflow, obwohl ich es oft benutze, um Dinge herauszufinden! Danke noch einmal! @ qichaoZhao –

Verwandte Themen