【发布时间】:2019-09-23 07:15:40
【问题描述】:
我是 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
这可以完成工作,但我想知道是否有更有效的方法来做到这一点,是否有办法将一个参数分配给相同函数的另一个参数。 提前致谢。
【问题讨论】:
-
你正在做的很好......除了你真的应该使用
if end is None而不是==...... -
@JonClements 感谢您让我知道这一点。我会编辑帖子
-
Python 中的默认参数值在最初定义函数时被评估一次。因此,它们不可能引用在实际调用函数之前甚至不存在的其他参数。
-
谢谢! @jasonharper
标签: python string search substring