有没有办法将功能参数用作同一功能的另一个参数?

时间:2019-05-05 12:21:36

标签: python string search substring

我是Python和stackoverflow的新手,我正在定义一个类似于内置find()的Python函数,该函数采用一个字符串和一个子字符串作为参数,以及两个可选参数来指定开始和结束索引。 我想通过指定默认参数来使后两个参数保持可选。但我希望默认情况下,结束索引为第一个参数的长度:

    def search(string, substr, start = 0, end = len(string)):
        lenss = len(substr)
        while start < end:
            if string[start : lenss] == substr:
                return start
            start += 1
            lenss += 1
        return False

但这给我一个错误:

Traceback (most recent call last):
    def search(string, substr, start = 0, end = len(string)):
NameError: name 'string' is not defined

我尝试过的是将最后一个参数设置为None并添加一个监护人:

def search(string, substr, start = 0, end = None):
    if end is None:
           end  = len(string)
    lenss = len(substr)
    while start < end:
        if string[start : lenss] == substr:
            return start
        start += 1
        lenss += 1
    return False

这可以完成工作,但是我想知道是否有更有效的方法来完成此工作,并且是否可以将一个参数分配给另一个具有相同功能的参数。 预先感谢。

1 个答案:

答案 0 :(得分:1)

您在这里进行操作的方法是一种很好且正确的方法:
(清理间隔要更常规一些)

def search(string, substr, start=0, end=None):
    if end is None:
        end = len(string)

另一种常用的方法是:

def search(string, substr, start=0, end=None):
    end = len(string) if end is None else end

不幸的是,实际上没有别的好方法。一个功能参数不能引用另一个参数,因为仅在定义该功能时才评估默认参数值。在定义上对它们进行评估时,无法对end=len(string)进行评估,因为无法知道string在传递给函数时是什么。