2016-08-01 19 views
0

Ich habe gerade begonnen, Python als Skriptsprache zu verwenden, aber ich habe Schwierigkeiten zu verstehen, wie ich Objekte aus einer anderen Datei aufrufen soll. Dies liegt wahrscheinlich nur daran, dass ich mit Attributen und Methoden nicht vertraut bin.So rufen Sie Variablen aus einem importierten parameterabhängigen Skript auf?

Zum Beispiel habe ich dieses einfache quadratische Formel-Skript erstellt.

qf.py

#script solves equation of the form a*x^2 + b*x + c = 0 
import math 
def quadratic_formula(a,b,c): 
    sol1 = (-b - math.sqrt(b**2 - 4*a*c))/(2*a) 
    sol2 = (-b + math.sqrt(b**2 - 4*a*c))/(2*a) 
    return sol1, sol2 

Also diesen Skript im Python-Shell oder aus einer anderen Datei Zugriff ist ziemlich einfach. Ich kann das Skript als Satz ausgeben lassen, wenn ich die Funktion importiere und aufrufe.

>>> import qf 
>>> qf.quadratic_formula(1,0,-4) 
(-2.0, 2.0) 

Aber ich kann nicht einfach auf Variablen aus der importierten Funktion, z. das erste Mitglied des zurückgegebenen Sets.

>>> print qf.sol1 
Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
AttributeError: 'module' object has no attribute 'sol1' 

Das gleiche passiert, wenn ich Namespaces mit der importierten Datei

>>> from qf import * 
>>> quadratic_formula(1,0,-4) 
(-2.0, 2.0) 
>>> print sol1 
Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
NameError: name 'sol1' is not defined 

Gibt es eine bessere Art und Weise Anruf auf diese Variablen aus der importierten Datei zusammenführen? Ich denke, die Tatsache, dass sol1 & sol2 von den gegebenen Parametern (a, b, c) abhängt, macht es schwieriger, sie aufzurufen.

Antwort

1

Ich denke, es ist, weil sol1 und sol2 sind die lokalen Variablen nur in der Funktion definiert. Was Sie tun können, ist so etwas wie

import qf 
sol1,sol2 = qf.quadratic_formula(1,0,-4) 
# sol1 = -2.0 
# sol2 = 2.0 

aber sol1 und sol2 sind nicht die gleichen Variablen in qf.py.

+1

Interessanterweise funktioniert die Verwendung des von Ihnen geposteten Codes auf jeden Fall. Das Deklarieren von sol1 und sol2 vor der Funktion (mit einem willkürlichen Wert) in qf.py funktioniert jedoch auch nicht wirklich. Die Funktion überschreibt die global deklarierten Variablen nicht mit dem gleichen Namen. Das funktioniert definitiv für das, was ich tue. Danke für die Hilfe. –

Verwandte Themen