Forum: PC-Programmierung Python 3, variablen in ein anderes Script senden und Ergebnis zurückholen


von Michael (Gast)


Lesenswert?

Hallo,

ich lerne gerade python und arbeite mich gerade daran, dass ich diverse 
variablen an eine zweite Datei sende, damit irgendetwas mache und ein 
Ergebnis zurückhole.


Aktuell nutze ich Python 3.6 auf Windows 10

main.py
1
def home_test():
2
    firstname = 'Michael'
3
    age = '24'
4
    ...
5
6
    print(second.message_age)


second.py
1
from main import *
2
if int(main.age) > 30:
3
    message_age ='older then 30'
4
else:
5
    message_age = 'junger then 30 '


Das ist aktuell an und für sich nur etwas. Ich weiß in dem Fall währe es 
einfach das direkt in main.py zu analysieren. Mir geht es gerade 
allerdings eher darum, dass zu verstehen wie man diese Variablen hin und 
her schieben kann.

von Sven B. (scummos)


Lesenswert?

Indem man "return" verwendet.

von schlangenbeschwoerer (Gast)


Lesenswert?

Deine Variablen liegen im Scope von home_test() und sind beim 
Importieren nicht sichtbar.

Beispiel:

main.py:
1
a = 0
2
3
class foo():
4
  b = 1
5
  def __init__(self):
6
    self.c = 2


second.py:
1
import main
2
3
f = main.foo()
4
print(main.a, f.b, f.c)

a ist eine globale Variable, die entsprechend direkt unterhalb von main. 
lebt. Es funktioniert, ist aber unsauber. Typischerweise nimmt man eine 
Klasse, hier foo(), worin man Variablen direkt (b) oder zur Laufzeit (c) 
setzen kann. Diese sind dann sauber gekapselt und kollidieren nicht mit 
irgendwelchen zufaellig existierenden anderen globalen Variablen.

Der Tipp mit "return" ist die Antwort auf den (unklar gewaehlten) Titel 
vom OP, aber offensichtlich moechte der OP herumimportieren.

von P. P. (Gast)


Lesenswert?

Hallo Michael,
wie soll denn der Programmablauf aussehen?

Wenn man globale Variablen benutzen will, hat Schlangenbeschwoerer den 
richtigen Vorschlag.

Ich glaube aber, dass dir ein stinknormaler Funktionsaufruf reichen 
würde:

main.py
1
#!/usr/bin/python
2
import second
3
4
firstname = 'Michael'
5
age = '24'
6
7
print(second.getMessage(age))

second.py
1
#!/usr/bin/python
2
def getMessage(age):
3
  if int(age) > 30:
4
    message_age ='older then 30'
5
  else:
6
    message_age = 'junger then 30 '  
7
  return message_age

Damit wäre der Programmablauf auch aufgeräumt und die Geltungsbereiche 
der Variablen eindeutig.

von Michael (Gast)


Lesenswert?

Danke erstmal für die Antworten.

Vorrangig geht es mir um den Lerneffekt, daher experimentiere ich das 
hin und her schieben.

Der einfachere Programmablauf mit "return" reicht in meinem Beispiel 
völlig aus. Allerdings ist das von Schlangenbeschwoerer an und für sich 
der bessere weg sobald es zu mehren globale Variablen kommt.

Ich muss mir das alles allerdings noch viel destillierter ansehen und 
damit experimentieren um das am Ende besser zu vesehen.

von Sven B. (scummos)


Lesenswert?

Michael schrieb:
> Vorrangig geht es mir um den Lerneffekt, daher experimentiere ich das
> hin und her schieben.

Gerade dann solltest du verinnerlichen, wie du deine Ziele vorrangig mit 
return erreichst. Globale Variablen sind nicht pauschal schlecht, aber 
fast nie die beste Lösung für ein Problem.

> Der einfachere Programmablauf mit "return" reicht in meinem Beispiel
> völlig aus. Allerdings ist das von Schlangenbeschwoerer an und für sich
> der bessere weg sobald es zu mehren globale Variablen kommt.

Aber Ergebnisse von Funktionsaufrufen tauscht man eben nicht durch 
globale Variablen aus.

Vermeide Zustand deines Programms, wo immer du kannst.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.