Python: 从另一个文件返回结果
Python: Returning Results From Another File
尝试 return 时遇到问题,结果参数来自另一个文件 "calcFun" 到 "Main"。我可以输入我所有的 x、y、z 值,只是在 "calcFun" 中没有从 Calc 得到任何返回我已经尝试
print calcFun.Calc(x1Coordinates, x2Coordinates, y1Coordinates, y2Coordinates,
z1Coordinates, z2Coordinates)
在 main 中,但它告诉我这没有定义。
主要
import calcFun
calcFun.Header()
doAnother = 'y'
while doAnother.lower() == 'y':
# functions to ask user to enter information to calulate 3 dimensional points
calcFun.GetX1()
calcFun.GetX2()
calcFun.GetY1()
calcFun.GetY2()
calcFun.GetZ1()
calcFun.GetZ2()
print calcFun.Calc(x1Coordinates, x2Coordinates, y1Coordinates, y2Coordinates,
z1Coordinates, z2Coordinates)
doAnother = raw_input('\nCalulate another? (y/n) ')
print ('Good Bye!')
calcFun
import math
# -----Functions-----
# Header
def Header():
print "Header"
# X1 Coordinates
def GetX1():
x1Coordinates = input('Enter x1 Coordinate: Example. 2 ')
return x1Coordinates
# X2 Coordinates
def GetX2():
x2Coordinates = input('Enter x2 Coordinate: Example. 5 ')
return x2Coordinates
# Y1 Coordinates
def GetY1():
y1Coordinates = input('Enter y1 Coordinates: Example. 5 ')
return y1Coordinates
# Y2 Coordinates
def GetY2():
y2Coordinates = input('Enter y2 Coordinates: Example. 4 ')
return y2Coordinates
# Z1 Coordinates
def GetZ1():
z1Coordinates = input('Enter z1 Coordinates: Example. 7 ')
return z1Coordinates
# Z2 Coordinates
def GetZ2():
z2Coordinates = input('Enter z2 Coordinates: Example. 9 ')
return z2Coordinates
# Calc Function
# Calc will take x1Coordinates, x2Coordinates, y1Coordinates,
# y2Coordinates, z1Coordinates and z2Coordinates as parameters.
def Calc(x1Coordinates, x2Coordinates, y1Coordinates, y2Coordinates,
z1Coordinates, z2Coordinates):
# Step 1: x1, x2, y1, y2, z1, z2 to the 2nd power & subtracting them
x = (x2Coordinates - x1Coordinates)**2
y = (y2Coordinates - y1Coordinates)**2
z = (z2Coordinates - z1Coordinates)**2
# Step 2: Adding x, y, z
xyzTotal = x + y + z
# Step 3: Square Rooting xyzTotal
answer = math.sqrt(xyzTotal)
# Calc returns summary of calulations
resultStr = '\nx1 Coordinates: ' + str(x1Coordinates)
resultStr += '\nx2 Coordinates: ' + str(x2Coordinates)
resultStr += '\n\ny1 Coordinates: ' + str(y1Coordinates)
resultStr += '\ny2 Coordinates: ' + str(y2Coordinates)
resultStr += '\n\nz1 Coordinates: ' + str(z1Coordinates)
resultStr += '\nz2 Coordinates: ' + str(z2Coordinates)
resultStr += '\nAnswer: '+ format(answer,'.2f')
return resultStr
您没有包含太多关于您的 Main.py 或回溯消息的信息,所以我在这里猜测了一点。据我了解,这是您的问题的简化版本:
主要
$ cat Main.py
import calcFun
print calcFun.Calc(10, 20)
calcFun
$ cat calcFun.py
def Calc(a, b):
resultStr = '\na' + str(a)
resultStr += '\nb' + str(b)
return resultStr
请注意 运行 工作正常:
$ python Main.py
a10
b20
但是如果我尝试使用变量名 'a' 和 'b'
$ cat Main.py
import calcFun
print calcFun.Calc(a, b)
这会像你提到的那样给出一个错误,但它与你的其他函数或文件无关,你只是引用了不存在的变量(你需要为它们提供一个值):
$ python Main.py
Traceback (most recent call last):
File "Main.py", line 3, in <module>
print calcFun.Calc(a, b)
NameError: name 'a' is not defined
这与
的行为相同
$ python -c 'sum([a, b])'
与
相比
$ python -c 'sum([1, 2])'
顺便说一句,通常的 python 命名约定会将您的文件命名为 'main.py' 和 'calc_fun.py'。请参阅 https://www.python.org/dev/peps/pep-0008/#package-and-module-names 处的 PEP8 相关部分。
只需更改:
calcFun.GetX1()
calcFun.GetX2()
calcFun.GetY1()
calcFun.GetY2()
calcFun.GetZ1()
calcFun.GetZ2()
print calcFun.Calc(x1Coordinates, x2Coordinates, y1Coordinates, y2Coordinates,
z1Coordinates, z2Coordinates)
至:
_x1 = calcFun.GetX1()
_x2 = calcFun.GetX2()
_y1 = calcFun.GetY1()
_y2 = calcFun.GetY2()
_z1 = calcFun.GetZ1()
_z2 = calcFun.GetZ2()
print calcFun.Calc(_x1, _x2, _y1, _y2, _z1, _z2)
然后我建议阅读 python 代码的确切解释方式;p
简而言之,您正在调用函数以从用户那里获取变量,但这些值并没有去到任何地方。上面的更改会将值保存到变量 (_x1, _x2, ...) 中,然后传递给下面的函数调用。
尝试 return 时遇到问题,结果参数来自另一个文件 "calcFun" 到 "Main"。我可以输入我所有的 x、y、z 值,只是在 "calcFun" 中没有从 Calc 得到任何返回我已经尝试
print calcFun.Calc(x1Coordinates, x2Coordinates, y1Coordinates, y2Coordinates,
z1Coordinates, z2Coordinates)
在 main 中,但它告诉我这没有定义。
主要
import calcFun
calcFun.Header()
doAnother = 'y'
while doAnother.lower() == 'y':
# functions to ask user to enter information to calulate 3 dimensional points
calcFun.GetX1()
calcFun.GetX2()
calcFun.GetY1()
calcFun.GetY2()
calcFun.GetZ1()
calcFun.GetZ2()
print calcFun.Calc(x1Coordinates, x2Coordinates, y1Coordinates, y2Coordinates,
z1Coordinates, z2Coordinates)
doAnother = raw_input('\nCalulate another? (y/n) ')
print ('Good Bye!')
calcFun
import math
# -----Functions-----
# Header
def Header():
print "Header"
# X1 Coordinates
def GetX1():
x1Coordinates = input('Enter x1 Coordinate: Example. 2 ')
return x1Coordinates
# X2 Coordinates
def GetX2():
x2Coordinates = input('Enter x2 Coordinate: Example. 5 ')
return x2Coordinates
# Y1 Coordinates
def GetY1():
y1Coordinates = input('Enter y1 Coordinates: Example. 5 ')
return y1Coordinates
# Y2 Coordinates
def GetY2():
y2Coordinates = input('Enter y2 Coordinates: Example. 4 ')
return y2Coordinates
# Z1 Coordinates
def GetZ1():
z1Coordinates = input('Enter z1 Coordinates: Example. 7 ')
return z1Coordinates
# Z2 Coordinates
def GetZ2():
z2Coordinates = input('Enter z2 Coordinates: Example. 9 ')
return z2Coordinates
# Calc Function
# Calc will take x1Coordinates, x2Coordinates, y1Coordinates,
# y2Coordinates, z1Coordinates and z2Coordinates as parameters.
def Calc(x1Coordinates, x2Coordinates, y1Coordinates, y2Coordinates,
z1Coordinates, z2Coordinates):
# Step 1: x1, x2, y1, y2, z1, z2 to the 2nd power & subtracting them
x = (x2Coordinates - x1Coordinates)**2
y = (y2Coordinates - y1Coordinates)**2
z = (z2Coordinates - z1Coordinates)**2
# Step 2: Adding x, y, z
xyzTotal = x + y + z
# Step 3: Square Rooting xyzTotal
answer = math.sqrt(xyzTotal)
# Calc returns summary of calulations
resultStr = '\nx1 Coordinates: ' + str(x1Coordinates)
resultStr += '\nx2 Coordinates: ' + str(x2Coordinates)
resultStr += '\n\ny1 Coordinates: ' + str(y1Coordinates)
resultStr += '\ny2 Coordinates: ' + str(y2Coordinates)
resultStr += '\n\nz1 Coordinates: ' + str(z1Coordinates)
resultStr += '\nz2 Coordinates: ' + str(z2Coordinates)
resultStr += '\nAnswer: '+ format(answer,'.2f')
return resultStr
您没有包含太多关于您的 Main.py 或回溯消息的信息,所以我在这里猜测了一点。据我了解,这是您的问题的简化版本:
主要
$ cat Main.py
import calcFun
print calcFun.Calc(10, 20)
calcFun
$ cat calcFun.py
def Calc(a, b):
resultStr = '\na' + str(a)
resultStr += '\nb' + str(b)
return resultStr
请注意 运行 工作正常:
$ python Main.py
a10
b20
但是如果我尝试使用变量名 'a' 和 'b'
$ cat Main.py
import calcFun
print calcFun.Calc(a, b)
这会像你提到的那样给出一个错误,但它与你的其他函数或文件无关,你只是引用了不存在的变量(你需要为它们提供一个值):
$ python Main.py
Traceback (most recent call last):
File "Main.py", line 3, in <module>
print calcFun.Calc(a, b)
NameError: name 'a' is not defined
这与
的行为相同$ python -c 'sum([a, b])'
与
相比$ python -c 'sum([1, 2])'
顺便说一句,通常的 python 命名约定会将您的文件命名为 'main.py' 和 'calc_fun.py'。请参阅 https://www.python.org/dev/peps/pep-0008/#package-and-module-names 处的 PEP8 相关部分。
只需更改:
calcFun.GetX1()
calcFun.GetX2()
calcFun.GetY1()
calcFun.GetY2()
calcFun.GetZ1()
calcFun.GetZ2()
print calcFun.Calc(x1Coordinates, x2Coordinates, y1Coordinates, y2Coordinates,
z1Coordinates, z2Coordinates)
至:
_x1 = calcFun.GetX1()
_x2 = calcFun.GetX2()
_y1 = calcFun.GetY1()
_y2 = calcFun.GetY2()
_z1 = calcFun.GetZ1()
_z2 = calcFun.GetZ2()
print calcFun.Calc(_x1, _x2, _y1, _y2, _z1, _z2)
然后我建议阅读 python 代码的确切解释方式;p 简而言之,您正在调用函数以从用户那里获取变量,但这些值并没有去到任何地方。上面的更改会将值保存到变量 (_x1, _x2, ...) 中,然后传递给下面的函数调用。