如何编写一个切片的函数?

use*_*783 11 python numpy slice

我想在Python中编写一个函数,它将一个切片作为参数.理想情况下,用户可以按如下方式调用该函数:

foo(a:b:c)
Run Code Online (Sandbox Code Playgroud)

不幸的是,这种语法不Python允许-使用a:b:c只允许范围内[],没有().

因此,我认为我的功能有三种可能性:

  1. 要求用户使用切片"构造函数"(其s_行为类似于numpy提供的版本):

    foo(slice(a, b, c))
    foo(s_[a:b:c])
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将我的函数的逻辑放入一个__getitem__方法:

    foo[a:b:c]
    
    Run Code Online (Sandbox Code Playgroud)
  3. 放弃尝试切片并单独开始,停止和步骤:

    foo(a, b, c)
    
    Run Code Online (Sandbox Code Playgroud)

有没有办法让原始语法工作?如果不是,首选哪种解决方法语法?或者还有另一种更好的选择吗?

gg3*_*349 10

不要让用户感到惊讶.

如果您使用切片语法与开发人员对切片语法的期望一致,那么同一个开发人员将期望使用方括号操作,即__getitem__()方法.

相反,如果返回的对象不是原始对象的切片,那么如果您坚持使用__getitem__()解决方案,人们就会感到困惑.使用函数调用foo(a, b, c),根本不提及切片,如果有意义,可以选择指定默认值.