"Pointer to member" 在 python

"Pointer to member" in 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 是 class Info 的实例。

这些调用非常相似。所以,我想删除复制粘贴并得到如下内容(这只是想法,我不是 "native 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?

你可以这样做:

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