python

2016-03-29 7 views
0

Python sözdizimi hakkında yeni soru. Bazı fonksiyonpython

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 sınıfın Info bir örneğidir aşağıdaki gibi çağrıları var.

Bu çağrılar birbirine benzer. Yani, aşağıdaki gibi bir şey Kopyala-Yapıştır kaldırıp almak istiyorum

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') 

Nasıl fonksiyonunu super_do yazmak için (Bu sadece bir fikir, ben değil "yerli pythonian" ben)?

cevap

2

Bunu yapabilirsin:

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

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

Daha sonra, bu gibi kullanabilirsiniz