Python:将字符串转换为函数名称; getattr还是相等?

Tal*_*aul 4 python function getattr

我正在编辑PROSS.py以处理蛋白质结构的.cif文件.在现有的PROSS.py中,有以下函数(我相信如果它与任何类没有关联,它的名称是正确的吗?),只存在于.py文件中:

...
def unpack_pdb_line(line, ATOF=_atof, ATOI=_atoi, STRIP=string.strip):
...
...
def read_pdb(f, as_protein=0, as_rna=0, as_dna=0, all_models=0,
    unpack=unpack_pdb_line, atom_build=atom_build):
Run Code Online (Sandbox Code Playgroud)

我为命令行参数添加了一个optons解析器,其中一个选项是指定除unpack_pdb_line之外使用的替代方法.所以选项解析器的相关部分是:

...
parser.add_option("--un", dest="unpack_method", default="unpack_pdb_line", type="string", help="Unpack method to use. Default is unpack_pdb_line.")
...
unpack=options.unpack_method
Run Code Online (Sandbox Code Playgroud)

但是,options.unpack_method是一个字符串,我需要使用与options.unpack_method中的字符串同名的函数.如何使用getattr等将字符串转换为实际的函数名?

谢谢,

保罗

Joc*_*zel 8

通常你只需要使用dict和store (func_name, function)对:

unpack_options = { 'unpack_pdb_line' : unpack_pdb_line,
                   'some_other' : some_other_function }

unpack_function = unpack_options[options.unpack_method]
Run Code Online (Sandbox Code Playgroud)