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

2024-04-25 18:03:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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

这就完成了任务,但是我想知道是否有更有效的方法来完成这项工作,是否有一种方法可以将一个参数分配给同一个函数的另一个参数。 提前谢谢。你知道吗


Tags: 函数字符串nonesearch参数stringlenreturn
1条回答
网友
1楼 · 发布于 2024-04-25 18:03:08

您在这里的做法是一种正确的做法:
(将间距整理得更为常规)

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是什么。你知道吗

相关问题 更多 >