【问题标题】:Is there a way to use a function parameter as another parameter of the same function?有没有办法将函数参数用作同一函数的另一个参数?
【发布时间】: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


【解决方案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 是什么。

【讨论】:

  • 非常感谢您的帮助!
猜你喜欢
  • 2020-06-05
  • 2020-10-21
  • 2021-08-15
  • 2011-02-10
  • 2018-11-13
  • 2018-08-19
  • 1970-01-01
  • 1970-01-01
  • 2011-11-19
相关资源
最近更新 更多