我是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
这可以完成工作,但是我想知道是否有更有效的方法来完成此工作,并且是否可以将一个参数分配给另一个具有相同功能的参数。 预先感谢。
答案 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
在传递给函数时是什么。