Я хочу, чтобы реализовать пример из Argparse интро:Как использовать argparse аргументов как имена функций
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')
args = parser.parse_args()
print(args.accumulate(args.integers))
Но в моем случае, я хотел бы иметь более широкий диапазон возможных имен функций, чтобы выбрать из ,
def a(): ...
def b(): ...
def c(): ...
parser.add_argument('-f', '--func',
choices=[a, b, c],
required=True,
help="""Choose one of the specified function to be run.""")
parser.func()
С его помощью, как это не работает, как задумано, я получаю
$ python program.py -f=a
program.py: error: argument -f/--func: invalid choice: 'a' (choose from
<function a at 0x7fa15f32f5f0>,
<function b at 0x7fa15f32faa0>,
<function c at 0x7ff1967099b0>)
Я знаю, что я мог бы решить эту проблему с основными аргументами строки и управления потоком, но это было бы намного меньше, суматоху и проще поддерживать, если я могу использовать аргументы парсера непосредственно в качестве имен функций.
Но имена функций не являются функциями. Это струны. '' a 'в [a, b, c] 'является' False'. – hpaulj