当前位置: 首页 > 知识库问答 >
问题:

尝试打印*args和**kwargs时出现奇怪的错误

应子真
2023-03-14

所以我在做一个定时器包装函数,但是我在尝试打印参数的时候不断地得到错误。

我的计时器功能看起来是这样的:

def time_me(fn):
    from time import time as t
    def wrapper(*args, **kwargs):
        start_time = t()
        fn(*args, **kwargs)
        end_time = t()
        print("executing {} with arguments {}, took: {}".format(fn.__name__, *args, end_time - start_time))
        return fn(*args, **kwargs)
    return wrapper

理想的情况下,它也会打印kwargs,但显然这是一个完全不同的问题,尽管我会非常感谢如果有人帮助我做这件事。所以当没有一个论点的时候,我的结果很好:

@time_me
def dummy_fn(N):
    from time import sleep as ts
    ts(0.2)
    return 

dummy_fn(1000)

给出:使用参数1000执行dummy_fn,取:0.2128157615661621

但是,如果我重新定义dummy_fn以获取更多的参数并传递它们,它仍然只打印第一个参数。当我尝试将*args转换为string时,我错误地指出“str()argument 2必须是str,而不是int”。我似乎也无法使用例如list()函数访问我的*args。

有人知道怎么解决这个吗?

共有1个答案

秦才
2023-03-14

在函数签名中使用*args可将参数分散为单个可迭代的args。如果您随后在函数体中使用*args,它会将它传回多个参数,而这是您不想要的--它会使您的.format调用混乱,因为它需要一个参数。只需按原样传递args,它就会被格式化为一个合适的字符串。

还要注意,包装器两次调用被包装的函数,这可能是您不想要的(从那时起,它运行的时间实际上是您所测量的时间的两倍,副作用正在重复,等等)。它应该调用它一次(在计时器内部),记住结果,然后返回结果。

这里有一个固定版本:

def time_me(fn):
    from time import time as t
    def wrapper(*args, **kwargs):
        start_time = t()
        result = fn(*args, **kwargs)
        end_time = t()
        print(f"executed {fn.__name} with arguments {args} and {kwargs}, took: {end_time - start_time}")
        return result
    return wrapper
 类似资料:
  • 问题内容: 我和之间有关系 所以当我尝试持久化对象时 我懂了 如您所见,它尝试插入正确的值,但是以某种方式将其标记为语法错误。我认为它缺少左右的单引号,但是由于它是在后台进行查询的,所以我不知道如何解决它。请注意,我对同一项目中的其他实体执行了完全相同的操作,并且工作正常。太沮丧了!! 问题答案: GROUP确实是保留的关键字,您必须对其进行转义。在JPA 2.0中,有一种标准化的方法来指定分隔标

  • 我有一个数据帧,我试图在条形图中绘制,但我面临一个奇怪的错误。 print语句给出: 然后是绘图代码:给出以下错误: ---------------------------------------------------------------------------KeyError回溯(最近一次调用上次)~/opt/anaconda3/lib/python3。8/现场包/熊猫/核心/索引/基础。

  • 我试图在返回几个元素的驾驶舱函数中使用use效应,但我得到了这个奇怪的错误,说“第6行: React Hook”use效应在函数“驾驶舱”中被称为“驾驶舱”,它既不是React函数组件,也不是自定义的React Hook函数反应-钩子/钩子规则”。 但我的座舱组件肯定是一个功能?

  • 我们正尝试通过以下http请求获取Office 365组元数据:https://graph.microsoft.com/v1.0/groups/?$select=description、displayName、groupTypes、mail、mailEnabled、mailNickname、onpremissieslastsyncdatetime、onpremissiessecurityident

  • 无法打印出格式错误弹出的结果。 尝试在没有getWaitingTime()和%-20d(最后一个)的情况下执行,它可以工作。 尝试执行1,并用getWaitingTime()替换seqNo,它可以工作。 不确定是什么错误。 它调用toString方法的部分。它从servicelist被称为。 至于错误是: JAVAutil。MissingFormatArgumentException:邮局的格式说

  • 我在打印报告时出现了一个奇怪的错误。