2017-11-01 3 views
0

In der folgenden Funktion, wie die Parameter der PIM-Funktion in Chat und Chat1 ohne sie als Parameter übergeben?Wie verwendet man Funktionsvariablen in einer anderen Funktion, ohne als Parameter in Python übergeben zu werden?

base.py:

def pim(mode, tag, population_file, variable_file, aggregation, user, 
     passw, email, working_schema, output_schema): 

    print mode 
    print tag 
    print population_file 
    print variable_file 
    print aggregation 
    print user 
    print passw 
    print email 
    print working_schema 
    print output_schema 


    chat() 
    chat1() 

ich versuchte from base import * in chat.py zu verwenden (wobei chat() erstellt wird), aber es ist nicht zu erkennen. Ich würde gerne wissen, ob es eine Möglichkeit gibt, auf die Parameter zuzugreifen, ohne sie als Parameter zu übergeben.

+1

Es klingt wie Sie für eine Art von globalen Variablen suchen. Nicht sicher, ob Python das hat, wonach du verlangst, aber das wird normalerweise nicht empfohlen (wenn irgendwo in deiner Codebase auf bestimmte Variablen zugegriffen werden kann, ist es leicht, mit seltsamen Fehlern zu enden). Vielleicht möchten Sie in [Klassen] (https://docs.python.org/3/tutorial/classes.html#tut-classdefinition) einchecken. Vielleicht könnten Sie alle diese Variablen in einer einzigen Klasse bündeln und _that_ an die Funktionen 'chat()' und 'chat1()' übergeben. –

Antwort

0

Ich fühle mich wie der Grund, warum Sie vermeiden, die Parameter zu übergeben ist, dass es eine blutig lange Parameterliste gibt.

Sie können tatsächlich die Funktion pim den folgenden ändern:

def pim(*args): 
    print(args[0]) 
    print(args[1]) 
    print(args[2]) 
    print(args[3]) 
    chat(args) 
    chat1(args) 
# You can call this function by 
pim(mode,tag,population_file,variable_file,aggregation,user,passw,email,working_schema,output_schema) 

oder können Sie optionale Argumente Format verwenden, wie folgt:

def pim(**kwargs): 
    print(kwargs['mode']) 
    print(kwargs['tag']) 
    print(kwargs['population_file']) 
    print(kwargs['variable_file']) 
    chat(kwargs) 
    chat1(kwargs) 
# and you can call your function by 
pim(mode='1', tag='2', 'population_file'=3, 'variable_file'=4) 

oder Sie das global Schlüsselwort verwenden können, um die Parameter zu machen global verfügbar, jedoch wird diese Lösung nicht empfohlen.

0

Sie können die Eingabeparameter in Variablen speichern und die globalen Variablen, zB:

mode = "" 

def pim(mode,tag,population_file,variable_file,aggregation,user,passw,email,working_schema,output_schema): 

    globals()['mode'] = mode 

    chat() 
    chat1() 
+1

Ja, tut mir leid, ich bin mit Swift verwirrt, habe es jetzt geändert –

Verwandte Themen