将一个函数生成的多项式系数传递给另一个函数
我正在为我的项目写一个比较大的Python程序,现在遇到了一个问题,搞不清楚怎么解决。下面是我的代码。
poly = [[k6,3], [k5,2], [k4,1], [k0,0]]
w = 5 # weight for rational bezier curve equation
def time() :
with open(transcriptionFile, "r") as tFile :
for line in tFile :
li = line.split()
if li :
start_time = (int(li[0]) / 10000000.)
end_time = (int(li[1]) / 10000000.)
duration = ((int(li[1]) -int(li[0]))/10000000.)
print start_time,' ',end_time,' ',duration
poly_coeff(start_time, end_time, duration)
def poly_coeff(stime, etime, dur) :
"""The equation is k6 * u^3 + k5 * u^2 + k4 * u + k0 = 0. Computing the coefficients of this equation."""
"""Substituting the required values we get the coefficients."""
t_u = dur
t0 = stime
t3 = etime
t1 = t2 = (stime + etime) / 2
w0 = w1 = w2 = w3 = w
k0 = w0 * (t_u - t0)
k1 = w1 * (t_u - t1)
k2 = w2 * (t_u - t2)
k3 = w3 * (t_u - t3)
k4 = 3 * (k1 - k0)
k5 = 3 * (k2 - 2 * k1 + k0)
k6 = k3 - 3 * k2 + 3 * k1 -k0
print k0, k1, k2, k3, k4, k5, k6
if __name__ == "__main__" :
if len(sys.argv) != 2 :
Usage()
else :
transcriptionFile = sys.argv[1]
time()
Newton(poly, 0.42, 1, 0)
我有一个包含开始时间、结束时间和持续时间的列表。所有这些信息都会传递给一个叫做poly_coeff()的函数,用来生成多项式的系数。列表里有多少项,就会生成多少个多项式。然后,对于每个生成的多项式,它对应的系数需要传递给Newton()函数,以进行其他计算。在代码的开头,这个多项式用poly来表示。在poly中,生成的每个k6、k5、k4和k0值都应该被传递过去。当然,我并不是在问怎么做,只是想让大家明白我想要实现的目标。请帮帮我。非常感谢!
2 个回答
1
要返回一个函数或方法计算的结果,你需要使用 return
这个语句。
在 poly_coeff()
这个函数里:
...
return k0, k1, k2, k3, k4, k5, k6
这样就可以了。你可以像下面这样把结果保存到你 time()
函数里的变量中:
...
k0, k1, k2, k3, k4, k5, k6 = poly_coeff(start_time, end_time, duration)
# do something with the values here ....
更新:脚本中的第一行不工作,因为在那个时候 k6 等并不存在。一个选择是把 poly
在你的 poly_coeff
函数里返回。例如这样:
def poly_coeff(...):
...
return [[k6,3], [k5,2], [k4,1], [k0,0]]
现在,在 time
函数里你可以这样获取 poly
:
def time():
...
poly = poly_coeff(...)
1
你的代码流程有点让人困惑。我猜测你是想对输入文件中的每一行计算多项式,然后调用 Newton(poly, 0.42, 1, 0)
。
我把你的 time()
函数改成接受文件名作为参数,并且把你的 poly_coeff 方法改成返回你计算出的多项式。然后在 time()
中的 for line in tFile:
循环里,我从 poly_coeff()
得到结果,并把它传递给 Newton()
。
希望这能接近你想要做的事情……
def time(fileName) :
with open(fileName, "r") as tFile :
for line in tFile :
li = line.split()
if li :
start_time = (int(li[0]) / 10000000.)
end_time = (int(li[1]) / 10000000.)
duration = ((int(li[1]) -int(li[0]))/10000000.)
print start_time,' ',end_time,' ',duration
poly = poly_coeff(start_time, end_time, duration)
Newton(poly, 0.42, 1, 0)
def poly_coeff(stime, etime, dur) :
"""The equation is k6 * u^3 + k5 * u^2 + k4 * u + k0 = 0. Computing the coefficients of this equation."""
"""Substituting the required values we get the coefficients."""
w = 5 # weight for rational bezier curve equation
t_u = dur
t0 = stime
t3 = etime
t1 = t2 = (stime + etime) / 2
w0 = w1 = w2 = w3 = w
k0 = w0 * (t_u - t0)
k1 = w1 * (t_u - t1)
k2 = w2 * (t_u - t2)
k3 = w3 * (t_u - t3)
k4 = 3 * (k1 - k0)
k5 = 3 * (k2 - 2 * k1 + k0)
k6 = k3 - 3 * k2 + 3 * k1 -k0
print k0, k1, k2, k3, k4, k5, k6
return [[k6,3], [k5,2], [k4,1], [k0,0]]
if __name__ == "__main__" :
if len(sys.argv) != 2 :
Usage()
else :
transcriptionFile = sys.argv[1]
time(transcriptionFile)