在我的程序中,我需要在其他函数中调用函数中的几个变量。为此,我创建了我需要全局的变量(例如:)
def Vcmi1(Vcm, VcmU, Vi1, Vi1U, Pi1, Pi1U, Pi2, Pi2U, m1, m1U, m2, m2U):
global Vcmi1
global Vcmi1U
Vcmi1 = Vi1-Vcm
Vcmi1U = (Vi1U+(((Pi1U+Pi2U)/(Pi1+Pi2))+((m1U+m2U)/(m1+m2))))*Vcmi1
return Vcmi1, Vcmi1U
但是,当我在后面的函数中使用它们时,这些变量是元组而不是浮点数,它们不能与其他浮点数相乘(例如:)
def initial_momentum_cm_1(m1, m1U, Vcmi1, Vcmi1U, Vcm, VcmU, Vf2, Vf2U, Pi1, Pi1U, Pi2, Pi2U, m2, m2U):
Pcmi1 = Vcmi1*m1
Pcmi1U = (((Vi1U+(((Pi1U+Pi2U)/(Pi1+Pi2))+((m1U+m2U)/(m1+m2)))))+(m1U/m1))*Pcmi1
return Pcmi1, Pcmi1U
我对python来说比较新,所以我不能100%确定全局命令是如何工作的(为此目的昨晚发现了它)。如何将该元组放入浮点数并仍能在其函数之外使用它?
答案 0 :(得分:0)
当你执行return v1, u1
时,它会返回两个值。所以如果你这样称呼这个函数
result = Vcmi1(...)
这两个值被打包成一个元组result = (v1, u1)
。另一种方法是让它们像这样直接解压缩
Vcmi1, Vcmi1U = Vcmi1(...)
然后你可以将它们传递给下一行的下一个函数。总而言之,如果您的执行发生在main
,它应该看起来像这样(我已经重命名了您的第一个函数,以便更容易理解)
def main():
for caseNumber in xrange(4):
Vcm = raw_input("Enter vcm for case#{}:".format(caseNumber))
#Calculate the two velocities and store them in 2 variables
Vcmi1, Vcmi1U = calculate_velocities(Vcm, VcmU, Vi1, Vi1U, Pi1, Pi1U, Pi2, Pi2U, m1, m1U, m2, m2U)
#Now simply pass these two variables onto the next function
p1, p2 = initial_momentum_cm_1(m1, m1U, Vcmi1, Vcmi1U, Vcm, VcmU, Vf2, Vf2U, Pi1, Pi1U, Pi2, Pi2U, m2, m2U)
在这种情况下不需要global
。变量的名称空间有效,直到main
结束(或者您的调用函数为止)
您想要使用全局的唯一原因是,如果您不想传递这么多参数。