1 回答
TA贡献1946条经验 获得超3个赞
这里发生的是pack_padded_sequence经过修饰以返回部分应用的函数,并且在修饰代码中有一个函数将参数接受为*args, **kwargs。该函数传递args给另一个函数,该函数检查first arg。当您将所有参数传递packed_padded_sequence为关键字参数时,该参数args为空,因此args[0]引发IndexError。如果input作为位置参数传递,args则不为空,并且IndexError不引发。
此示例代码演示了该行为(Pytorch代码不容易阅读)。
def decorator(func):
def wrapper(*args, **kwargs):
print('Args:', repr(args))
print('Kwargs:', repr(kwargs))
return func(*args, **kwargs)
return wrapper
@decorator
def f(a, b=0, c=0):
return a, b, c
if __name__ == '__main__':
print('Positional argument...')
print(f(1, b=2, c=3))
print('All keyword arguments...')
print(f(a=1, b=2, c=3))
代码产生以下输出:
Positional argument...
Args: (1,) <- Args is populated
Kwargs: {'b': 2, 'c': 3}
(1, 2, 3)
All keyword arguments...
Args: () <- Args is empty
Kwargs: {'a': 1, 'b': 2, 'c': 3}
(1, 2, 3)
添加回答
举报