【问题标题】:Using functools.partial with default values使用带默认值的 functools.partial
【发布时间】:2023-02-03 11:51:32
【问题描述】:

问题

正如标题所示,我正在尝试使用 functools.partial 为可调用对象创建默认设置。然而,一些参数相互依赖。

背景

想象一下,我有一个函数 _print_slice(items: list[int], start: int, end: int),它接收 list 并打印从 startend 的项目。

_print_slice定义

def _print_slice(items: list[int], start: int, end: int) -> None:
    print(items[start:end])

我想制作一个名为 print_list 的函数的部分版本,它打印整个列表,即 start = 0end = len(items)

print_list定义

def print_list(items: list[int]) -> None:
    _print_slice(items=items, start=0, end=len(items))

注意 print_list 只是 _print_slice 的包装。如果我没记错的话,这将是functools.partial 的完美用例,但是,考虑到end = len(items),我不确定使用 use partial 来完成此操作,请帮忙。

免责声明

这是该问题的一个非常简化的版本,以突出显示我要完成的任务。

【问题讨论】:

  • 要回答您提出的字面问题:使用 None 作为您为 end 参数传递的值,而不是 len(items)。我不知道这是否回答了真正的问题,你实际上并没有问,但也许它给了你一个想法。肯定没有办法对partial() 使用非常量值。

标签: python partials functools


【解决方案1】:

这不是functools.partial 的工作。它无法执行您想要的那种依赖参数计算。 functools.partial 旨在修复参数值,而不是根据其他参数值计算它们。

(由于切片处理 None 端点的方式,partial(_print_slice, start=None, end=None) 将具有您想要的行为,但这是列表切片实现将处理的内容,而不是 partial 处理的内容 - 它不会推广到 @987654326 的其他用途@。另外,它违反了_print_slice 参数注释。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 2022-11-03
    相关资源
    最近更新 更多