使变量成为全局使其成为一个元组

时间:2016-02-28 07:49:26

标签: python floating-point global-variables tuples

在我的程序中,我需要在其他函数中调用函数中的几个变量。为此,我创建了我需要全局的变量(例如:)

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%确定全局命令是如何工作的(为此目的昨晚发现了它)。如何将该元组放入浮点数并仍能在其函数之外使用它?

1 个答案:

答案 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结束(或者您的调用函数为止)

您想要使用全局的唯一原因是,如果您不想传递这么多参数。