我的程序中有这个功能。
def time(transcriptionFile) :
''' This function changes the time values in secs from the transcription file and keeps a list of start time and duration for each phoneme.'''
with open("transcriptions.txt", "r") as tFile :
timeList = []
parameterList = []
frame = 0.04
lines = 0
for line in tFile :
lines += 1
for i in range(lines) :
i = i * frame
timeList.append(i)
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.)
poly = poly_coeff(start_time, end_time, i)
Newton(poly, parameterList)
我想在i
中使用poly_coeff
作为参数。调用此函数的次数是文件中的行数。 i
每行都在增加。因此,当第一次调用函数时,应该将第一个i
值作为参数传递,然后第二次传递第二个i
值,依此类推。
我肯定在这里做错了我能看到,却无法弄清楚如何以正确的方式做到这一点。另外我想在单个函数内部进行的操作太多了。拆分它会更好吗?但一切都与打开同一个文件有关。
答案 0 :(得分:1)
如果您想要行号,那么您应该
poly = poly_coeff(start_time, end_time, lines)
如果您想使用行号*框架 然后做
poly = poly_coeff(start_time, end_time, lines * frame)
我不知道你要做什么
for i in range(lines) :
i = i * frame
答案 1 :(得分:0)
i
仅在for循环中的范围内。在它之前添加一个声明,以便您以后可以访问它。
<snip>
for line in tFile :
lines += 1
i = 0
for i in range(lines) :
i = i * frame
<snip>
...是的,我投票支持更多功能性编程;分解一下,使其更具可读性。
答案 2 :(得分:0)
编辑:看起来您实际上可能会出现缩进错误,您是否打算在timelist.append(i)
的循环内部以i
开头的所有内容?这会更有意义。
...
for i in range(lines):
i = i * frame
timeList.append(i)
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.)
poly = poly_coeff(start_time, end_time, i)
Newton(poly, parameterList)
如果缩进是正确的,那么我不认为for i
的for循环正在按照你的想法行事,这里有一个例子:
>>> for i in range(3):
... print "before", i
... i = i * 0.04
... print "after", i
...
before 0
after 0.0
before 1
after 0.04
before 2
after 0.08
>>> print i
0.08
所以基本上,在循环i
相当于(lines-1)*frame
之后。您可以在循环的每次迭代期间修改i
,但会将其设置回每次迭代开始时范围内的下一个数字。