首页 > 解决方案 > 通过多层 Python 堆栈传递相同的参数

问题描述

这确实是一个代码布局/设计问题。如果它有点模糊,请原谅我 - 很高兴澄清任何事情。

我有一个约 400 行 Python 程序(3 个文件),它具有生成“原始”对象(较小的原子对象)的函数、调用这些函数以使用这些原子对象构建稍微复杂的对象的函数……然后是函数调用那些构建最终(更大/更复杂)对象的对象。

我质疑程序设计的原因是每个函数都有很多参数(10-15),我每次都必须将它们传递给整个堆栈。我猜它使代码看起来比它需要的更长并且可能更混乱。

巩固这一点的最佳方法是什么?*args和的一些用途**kwargs

目前整个程序都是功能性的,我考虑过让它面向对象,但我还没有决定这是否真的会改善这一点。

这是一段代码,显示了通过堆栈的参数:

def gen_tag(tag_key_size, tag_value_size, key=''):
    # return string Tag key-value pair
    if key:
        held_key = 'tag_' + key
        held_key = held_key[:-4]
        val = _gen_string(tag_value_size)
        pair = f",{held_key}={val}"
    else:
        key = 'tag_' + _gen_string((tag_key_size-4))
        val = _gen_string(tag_value_size)
        pair = f",{key}={val}"

    return(pair)

def gen_tagset(num_tags, tag_key_size, tag_value_size, tag_keys):
    if tag_keys:
        tagset = ''.join(primitives.gen_tag(tag_key_size,tag_value_size, key=i) for i in tag_keys) + ' ' 
    else:
        tagset = ''.join(primitives.gen_tag(tag_key_size,tag_value_size) for i in range(num_tags)) + ' '
    
    return(tagset[1:])

def gen_line(measurement,
                num_tags,
                int_fields,
                float_fields,
                str_fields,
                tag_key_size,
                tag_value_size,
                field_key_size,
                int_value_size,
                float_value_size,
                str_value_size,
                precision,
                tag_keys,
                int_field_keys,
                float_field_keys,
                str_field_keys):


    tagset = sets.gen_tagset(num_tags, tag_key_size, tag_value_size, tag_keys)
    fieldset = sets.gen_fieldset(int_fields, float_fields, str_fields, field_key_size, int_value_size, float_value_size, str_value_size, int_field_keys, float_field_keys, str_field_keys)
    timestamp = primitives.gen_ts(precision)
    line = f"{measurement},{tagset}{fieldset}{timestamp}"

    return(line)

从那里,我有一个调用的函数,gen_tagset(<args>)然后是另一个从中构建的函数……每次都传递一长串类似的参数。

标签: python-3.xoptimization

解决方案


推荐阅读