function return

Fredrik Lundh fredrik at
Thu Sep 11 15:00:40 CEST 2008

Beema Shafreen wrote:

> I have a script using functions , I have a problem in returning the 
> result. My script returns only one line , i donot know where the looping 
> is giving problem, Can any one suggest, why this is happening and let me 
> know how to return all the lines
> def get_ptm():
>     fh = open('file.txt',    'r')
>     data_lis = []
>     for line in fh.readlines():
>         data = line.strip().split('\t')
>         id = data[0].strip()
>         gene_symbol = data[1].strip()
>         ptms = data[8].strip()
>         result = "%s\t%s\t%s" %(id,gene_symbol,ptms)
>         return result

note that you put the "return" statement inside the loop, so returning 
only one line is the expected behaviour.

           result = "%s\t%s\t%s" %(id,gene_symbol,ptms)

and then return the list when done:

 >      fh.close()
        return data_lis


if you change the original return to "yield", the function will turn 
into a "generator" that yields one result at a time.

           result = "%s\t%s\t%s" %(id,gene_symbol,ptms)
           yield result

for more on generators, and how they are used, see the documentation.


More information about the Python-list mailing list