Функция Python с множеством необязательных аргументов - PullRequest
0 голосов
/ 24 сентября 2018

В настоящее время у меня есть функция с множеством необязательных аргументов, что-то вроде этого:

def many_argument_function(required1, required2, optional1=1, optional2=2,
                           optional3=None, optional4="Test", optional5="g",
                           optional6=2, optional7=(0, 255, 0), optional8=0.5):
                           # Do stuff

Но в действительности у нее более 20 необязательных аргументов, которые принимают пять строк даже с ограничением в 120 символов.

Существует ли шаблон проектирования, чтобы упростить это / сделать его красивее?

PS Я рассмотрел возможность создания отдельного файла конфигурации для этой функции, но затем вызывать его было бы раздражающим, поскольку в большинстве случаев только один илииспользуются два необязательных аргумента.

EDIT1: я не хочу использовать kwargs, так как мне нужны имена аргументов и значения по умолчанию, видимые в моей IDE (PyCharm)

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Нет ничего плохого в том, чтобы перечислять только один параметр в строке.

def many_argument_function(
        required1,
        required2,
        optional1=1,
        optional2=2,
        optional3=None,
        optional4="Test",
        optional5="g",
        optional6=2,
        optional7=(0, 255, 0),
        optional8=0.5
    ):

    """
    This function does some stuff.
    """

    # Do stuff

PEP 8 поддерживает этот стиль отступа , и хотя в его собственном примере несколько параметров помещаются в одну строку,Я считаю, что намного проще сканировать большой список параметров, если каждый находится в отдельной строке.

0 голосов
/ 24 сентября 2018

Возможно, что вы можете сгруппировать похожие параметры и сохранить их в объекте и передать эти объекты с этими значениями вместо 20 различных параметров.

Например,

def functionExample(Object colors, Object, numbers, Object traits, Object words);

С каждым объектом выше, имеющим 5 различных значений в каждом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...