Как я могу использовать пользовательский ввод для вызова пользовательской функции? - PullRequest
0 голосов
/ 09 мая 2020

У меня есть следующие функции

def retrieve_phone_data():
    # function does something
    return phone_list

def retrieve_customer_data():
    # function does something
    return customer_info

def main(input1, input2):
    if input1 == 'phone' and input2 == 'customer':
        retrieve_phone_data()
        retrieve_customer_data()
    else:
        print('Please enter valid input')

input1 и input2 могут иметь только определенные c значения (скажем, "phone" и "customer" на данный момент). У меня более 10 функций, я не хочу использовать операторы If, потому что их будет слишком много.

Мне нужно что-то вроде vlookup из excel, я создам список возможных входов и функций со-спонсоров, чтобы каждый действительный пользовательский ввод был связан с функцией в этом списке. Есть способ сделать?

1 Ответ

0 голосов
/ 09 мая 2020

Здесь вы можете использовать dict:

data_retrievers = {
    "phone": retrieve_phone_data,
    "customer": retrieve_customer_data,
}

Затем в вашем основном методе:

if input in data_retrievers:
    data_retriever = data_retrievers[input]
    retrieved_data = data_retriever()
else:
    # Signify invalid input

Если вы хотите добавить еще один вход, вы просто добавляете запись в data_retrievers, где ключ - input, а значение - соответствующая функция. Обратите внимание на отсутствие () после имен функций в data_retrievers, функция вызывается только при извлечении data_retriever.

...