【发布时间】:2017-03-24 15:26:59
【问题描述】:
我从用户那里获取了一些参数,并通过函数传递给函数(每个函数在不同的类中),直到它最终到达一个执行某些处理的函数,然后将解决方案返回到链上。在链上,函数变得越来越抽象,合并了下层函数多次运行的结果。
我应该在哪里使用*args 和**kwargs?
我认为*args 和*kwargs 可以用于函数不显式使用参数的每个函数。但是,实际参数需要在top_level 中定义,以便用户知道函数期望什么。
我应该在哪里定义输入的含义?
我认为它们应该在top_level 中定义,因为这是最终用户可能希望查看文档的那个。
我应该在哪里定义哪些默认值?
我认为它们应该在top_level 中定义,因为这是最终用户与之交互的地方。
这是一个演示参数传递的简单示例,我没有展示函数如何变得越来越抽象或它们如何与不同的类交互,因为我觉得这是不必要的细节。
def top_level(a=1, b=1, c=1, d=1, e=1):
""" Compute sum of five numbers.
:param a: int, a
:param b: int, b
:param c: int, c
:param d: int, d
:param e: int, e
:return: int, sum
"""
return mid_level(a, b, c, d, e)
def mid_level(*args, **kwargs):
return bottom_level(*args, **kwargs)
def bottom_level(a, b, c, d, e):
return a + b + c + d + e
print top_level(1, 2, 3)
8
有这样的传递参数的 Python 约定吗?
【问题讨论】:
-
我知道您正在尝试做一个例子,但很难想象一个实际的用例是因为
mid_level目前没有任何用途。事实上,从这个角度来看,bottom_level也不是。 -
@Julien 是的,在真实环境中,
top_level可能是用户与之交互的模块,mid_level是核心模块,而“bottom_level”是描述数据结构的模块。 -
用户界面,如从命令行通过用户输入?还是来自命令参数?
-
来自 python 控制台。用户可能会说
import my_module,然后是print top_level(1, 2, 3)。
标签: python coding-style