gpt4 book ai didi

python - 将 Python 切片语法传递给函数

转载 作者:太空狗 更新时间:2023-10-29 17:06:24 24 4
gpt4 key购买 nike

在 Python 中,是否可以将通用切片语法精确封装并传递?我知道我可以使用 slice__slice__ 来模拟切片。但我想传递与我放在方括号中的语法完全相同的语法,这些语法将与 __getitem__ 一起使用。

例如,假设我编写了一个函数来返回列表的某个片段。

def get_important_values(some_list, some_condition, slice):
elems = filter(some_condition, some_list)
return elems[slice]

如果我手动传入一个切片对象,这会很好地工作:

In [233]: get_important_values([1,2,3,4], lambda x: (x%2) == 0, slice(0, None))
Out[233]: [2, 4]

但我想让用户通过的是完全他们在 __getitem__ 中使用的相同切片:

get_important_values([1,2,3,4], lambda x: (x%2) == 0, (0:-1) )

# or

get_important_values([1,2,3,4], lambda x: (x%2) == 0, (0:) )

显然这会产生语法错误。但是,有没有什么方法可以让这项工作成功,而无需为 x:y:t 类型的切片编写我自己的迷你解析器,并强制用户将它们作为字符串传递?

动机

我可以让这个示例函数直接返回一些可切片的东西,比如 filter(some_condition, some_list),这将是作为列表的整个结果。而在我的实际例子中,内部函数要复杂得多,如果提前知道用户想要的切片,就可以大大简化计算。但我希望用户不必做太多额外的事情来提前告诉我切片。

最佳答案

也许以下内容对您有用:

class SliceMaker(object):
def __getitem__(self, item):
return item

make_slice = SliceMaker()

print make_slice[3]
print make_slice[0:]
print make_slice[:-1]
print make_slice[1:10:2,...]

想法是您使用 make_slice[] 而不是手动创建 slice 的实例。通过这样做,您将能够充分利用熟悉的方括号语法。

关于python - 将 Python 切片语法传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13706258/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com