2015-12-19 30 views
0

我有一个文件,其中有几行,从python脚本我正逐行阅读文件。文件看起来像下面:如何将列表元素交替传递给python中的某个函数?

- Correct reference to JKLR45, fixed file 
    - Xyz changes being done in file 
    - Hello welcone 

该脚本如下:

f =open('change_log.txt', 'r') 
    first_line = f.readlines() 
    for i in range(len(first_line)): 
       print first_line [i] 

以上脚本的otput如下:

- Correct reference to JKLR45, fixed file 
    - Xyz changes being done in file 
    - Hello welcone 

现在我想通过这个输出到其他函数,但我没有得到如何传递输出功能。我试过如下:

def function(*value): 
    print value 
def read_file(): 
    f =open('change_log.txt', 'r') 
    first_line = f.readlines() 
    for i in range(len(first_line)): 
       print first_line [i] 
       function(*first_line [i]) 

,但我得到的功能输出(*值)如下:

['-','C','o','r','r','e','t'.........] 

,但我不想这样输出的出的函数(*值),而我想它打印:

- Correct reference to JKLR45, fixed file 
    - Xyz changes being done in file 
    - Hello welcone 

所以,请建议如何实现这一目标?

+0

删除'value'和'first_line'之前的星号,它应该按照预期工作。顺便说一下,命名变量'first_line'具有误导性,因为它包含所有行的列表。你应该称之为“线路”或类似的东西。 –

+0

更重要的是,迭代列表的更多pythonic方法是'对于your_list中的某些东西:' – ForceBru

回答

0

你可以尝试删除星号在

def function(*value): 

function(*first_line [i]) 

这是不是在你的榜样必需的。

将给出的参数分开处理,通常在传递给函数的参数个数不确定时使用。或者像这样:

def func(a, b, c): 
    #process 
    return #anything 

x = (arg1, arg2, arg3) 
print func(*x) 
0

不需要*。这是一个有点改进版:

def function(value): 
    print value, 

def read_file(): 
    with open('change_log.txt', 'r') as fobj: 
     for line in fobj: 
      function(line) 

read_file() 

with open()打开与承诺的文件,只要你迪登关闭它。您可以直接在打开的文件对象fobj上迭代。不需要rangei索引。用value调用该功能。使用*value表示将行的所有元素作为独立参数传递给function。最后,print value,尾随的逗号会抑制print的换行符,因为文件内容已经有一个。

0

你应该这样定义,

def function(value): 
    print value 

function definitions

函数调用总是值分配给在 提到的参数列表中的所有参数,无论是从位置参数,从关键字 参数,或从默认值。如果*identifier的形式为 ,则将其初始化为接收任何多余位置参数的元组,默认为空元组。如果存在表格**identifier ,它将被初始化为一个新字典,该字典接收任何多余的 关键字参数,默认为新的空字典。

相关问题