2016-03-29 5 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') 

info является экземпляром класса Info.

Эти звонки довольно похожи. Таким образом, я хотел бы, чтобы удалить копировать-вставить и получить что-то вроде следующего (Это просто идея, я не «родной 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")