Используй словарь.
На твоем же примере
read 2017 admin
Функции в примере просто будут выводить все переданные аргументы:
def create(*args):
print("'Create' Function with given args:")
for arg in args:
print('%8s' % (arg))
def read(*args):
print("'Read' Function with given args:")
for arg in args:
print('%8s' % (arg))
def update(*args):
print("'Update' Function with given args:")
for arg in args:
print('%8s' % (arg))
def delete(*args):
print("'Delete' Function with given args:")
for arg in args:
print('%8s' % (arg))
# Словарь с функциями. Ключом является вводимая команда.
options = {"create": create, "read": read, "update": update, "delete": delete}
# Входим в бесконечный цикл, программа не будет завершаться после выполнения
# первой же введенной команды.
while True:
# Получаем строку от пользователя и разбиваем по пробелам в список.
# Если user input = read 2017 admin, то получим ['read', '2017', 'admin'].
command = input("command? ->").split()
# Используем метод словаря .get() для получения функции
# связанной с введенной командой, записываем ее в переменную option.
option = options.get(command[0]) # command[0] - операция индексации списка.
# Проверяем удалось ли получить функцию связанную с командой пользователя.
if option:
# Если удалось, то вызываем функцию с аргументами полученными с помощью
# операции извлечения среза и распаковки списка в отдельные аргументы.
option(*command[1:])
Вывод :
command? ->read 2017 admin
'Read' Function with given args:
2017
admin
command? ->
Бонусом небольшое объяснение про звездочку.
Инструкция
* в зависимости от того где она находится делает разные вещи(помимо умножения):
В строке
с объявлением функции (
def create(*args): ) она позволяет "запаковать"
все переданные функции аргументы в один кортеж
args. То есть нет необходимости указывать какие именно позиционные аргументы ожидает получить функция, можно передать любое их количество (нуль и более).
В строке
с вызовом функции (
option(*command[1:]) ) она позволяет "распаковать" все элементы последовательности в отдельные позиционные аргументы. То есть все объекты в указанной последовательности command[1:] будут передаваться в функцию как отдельные позиционные аргументы.
В примере сверху если предварительно не распаковать command[1:] в отдельные аргументы, звездочка запакует в кортеж args целый список, т.е. получим (['2017', 'admin']) - кортеж с одним объектом внутри, что сломает наши функции, придется дополнить цикл тремя лишними символами для их работоспособности (добавить индексацию кортежа: for arg in args[0]). Если же распаковать, то получим кортеж с двумя объектами внутри, что позволит напрямую пройтись в цикле по кортежу.
Больше информации про распаковку аргументов, индексацию списка и извлечению срезов можно найти в гугле. ( Например про родственника звездочки * двойную звездочку ** которая помогает в работе с именованными аргументами)