在 python 中,可以定义一个带有任意数量的位置参数的函数,如下所示:
def f(*args):
print(args)
f(1, 2, 3) # (1, 2, 3)
当调用 as 时f(a, b, c),所有位置参数都放在一个元组中。这种行为在 python 2和3文档中有所描述,但我还没有找到它的 PEP。
PEP 3132,first, *middle, last = seqence在“接受”下引入扩展的可迭代解包 ( ) 状态,即
使加星标的目标成为元组而不是列表。这将与函数的 *args 一致,但会使结果的进一步处理更加困难。
进行了讨论。如果我写了一个包装器,我可能还想进一步处理这样的参数:
def force_type(position, type):
def wrapper(f):
def new(*args, **kwargs):
args = list(args) # Why?
args[position] = type(args[position])
return f(*args, **kwargs)
return new
return wrapper
@force_type(1, int)
def func(a, b, c):
assert isinstance(b, int)
这进一步处理由较硬的事实args是一个tuple。在引入的早期阶段是否没有使用包装器?如果是这样,为什么这在 python3 中没有通过其他兼容性破坏性更改进行更改(PEP3132 更倾向于易于处理而不是一致性(这似乎至少类似于兼容性破坏性更改中的兼容性)。
为什么 a 函数*args(仍然)atuple即使 alist允许更容易的进一步处理?
慕斯王
MMTTMM
幕布斯7119047
相关分类