python-3.x - 通过多层 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 - 如何在 Django REST Framework ModelSerializer 的创建函数中使用 field.set()?
- kubernetes - 无法从 Azure Kubernetes 服务中的另一个 pod 访问 pod
- php - 特定用户的sql查询日志
- javascript - 拒绝按钮总是更新第一条记录问题
- windows - 如何让 Anaconda Pyspark Jupyter 在 Windows 下使用 S3
- c - 将百分比显示添加到 makefile 输出
- java - 如何抑制硒日志
- python - 用 boto3 检索字母间隔
- promise - 如何让 Raku 中的承诺超时?
- javascript - angular 2+,通过hash(#) url滑动到指定元素