2016-03-29 13 views
0

關於python語法的新手問題。我有一些函數調用像下面python中的「指向成員」

summaryA = do_something(lambda info: (info.a, 1)). \ 
    .do_other() \ 
    .do_anoter() \ 
    .saveAsTextFile('/output/path/a.tsv') 

summaryJ = do_something(lambda info: (info.j, 1)). \ 
    .do_other() \ 
    .do_anoter() \ 
    .saveAsTextFile('/output/path/j.tsv') 

summaryZ = do_something(lambda info: (info.z, 1)). \ 
    .do_other() \ 
    .do_anoter() \ 
    .saveAsTextFile('/output/path/z.tsv') 

infoInfo類的一個實例。

這些調用非常相似。所以,我想刪除複製粘貼,並得到類似以下的(這只是想法,我不是「本土pythonian」)

summaryA = super_do(Info.a, '/output/path/a.tsv') 
summaryJ = super_do(Info.j, '/output/path/j.tsv') 
summaryZ = super_do(Info.z, '/output/path/z.tsv') 

如何寫功能super_do

回答

2

你可以這樣做:

def super_do(attr, path): 
    return do_something(lambda info, attr=attr: (getattr(info, attr), 1)).\ 
     .do_other() \ 
     .do_another() \ 
     .saveAsTextFile(path) 

然後,您可以使用它像這樣:

summaryA = super_do("a", "/output/path/a.tsv")