具有许多可选参数的Python函数

时间:2018-09-24 16:28:36

标签: python design-patterns

我目前有一个带有许多可选参数的函数,如下所示:

Scenario: Load the page
    Given I pause the server  # calls pause_server endpoint
    And I go to the page  # calls get_data endpoint
    Then the data is 'Loading...'
    Given I resume the server  # calls resume_server endpoint
    Then the data is '<data>'

但是实际上,它有20多个可选参数,即使有120个字符的行限制,它们也要占用5行。

是否有一种简化设计/使其更漂亮的设计模式?

P.S。我考虑过为此功能创建一个单独的配置文件,但是随后调用它会很烦人,因为大多数时候只使用一个或两个可选参数。

EDIT1:我不想使用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 ,因为我想在我的IDE(PyCharm)中看到参数名称和默认值

2 个答案:

答案 0 :(得分:3)

仅在每行列出一个参数并没有错。

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 endorses this style of indentation,虽然它自己的示例将多个参数放在一行上,但我发现,如果每个参数都在一行上,则扫描一大堆参数要容易得多。

答案 1 :(得分:0)

有可能您可以将相似的参数分组并将其存储到一个对象中,并使用这些值传递这些对象,而不用具有20个不同的参数。

例如,

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

上面的每个对象中的每个对象具有5个不同的值。