标记作为参数传递的函数中未使用的参数

Marking unused parameters in functions passed as arguments

提问人:sds 提问时间:9/7/2023 更新时间:9/8/2023 访问量:54

问:

我有一个高阶函数:

def mymap(f,...):
    ...
    x = f(a, logger)
    ...

我需要传递给它,它只需要一个参数:f

def bigfun(...):
    ...
    def f(a, logger):
        return a
    mymap(f, ...)
    ...

上面的代码工作正常,但抱怨pylint

Unused argument 'logger' (unused-argument)

如果我使用以下命令定义:f_

def bigfun(...):
    ...
    def f(a, _logger):
        return a
    mymap(f, ...)
    ...

代码中断

TypeError: bigfun.<locals>.f() got an unexpected keyword argument 'logger'

当然,我可以添加 ,但这是 TRT 吗?# pylint: disable=unused-argumentf

python pylint 可选参数 未使用的变量

评论

2赞 Random Davis 9/7/2023
为什么不使用?**kwargs
2赞 sds 9/7/2023
@RandomDavis:因为如果可能的话,代码应该是自记录的,在这种情况下,会混淆代码。kwargs
2赞 Anentropic 9/7/2023
我认为自行记录它无论如何都不需要的参数没有多大价值。一种选择是按位置参数进行调用(以避免在使用下划线名称时出现“得到意外的关键字参数”错误)。但是 lint 忽略规则在这里似乎很好。mymapf
1赞 tdelaney 9/8/2023
def mymap(f,...):不是一回事。对于这个问题,我认为一个工作的例子,包括一个真实的呼叫签名,是很重要的。诸如内部功能之类的东西,可能与局部变量结合,也可能不与局部变量结合,并且可以澄清有关和的问题。fbigfun*args**kwargs
1赞 tdelaney 9/8/2023
您的代码中没有关键字参数,因此您不会收到该错误。如果你给我们失败的线,至少会有一些东西可以猜测。但就目前而言,没有足够的代码来解决这个问题。

答:

0赞 Pierre.Sassoulas 9/8/2023 #1

它没有显示在您给出的代码中,但为了引发“TypeError: bigfun..f() 得到了一个意想不到的关键字参数 'logger'“,一定是。如果将函数签名从 更改为 ,则带有关键字 args 的调用代码需要使用新名称 () 或变为位置 ()。mymap(f, ...)mymap(f, logger=my_logger)logger_loggermymap(f, _logger = my_logger)mymap(f, my_logger)