python - 使用参数数组的长度作为同一函数的另一个参数的默认值

标签 python python-2.7

这是我第一次在 SO 中提问,所以如果我以某种方式没有正确地做它,请不要犹豫编辑它或让我修改它。

我认为我的问题有点笼统,所以我很惊讶没有找到与此主题相关的任何以前的问题。如果我错过了它并且这个问题重复了,如果你能提供一个链接到已经回答的地方,我将不胜感激。

假设我需要使用(至少)三个参数实现一个函数:数组astart 索引和end 索引.如果没有提供,start参数应该指向数组的第一个位置(start = 0),而end参数应该被设置到最后一个位置 (end = len(a) - 1)。显然,定义:

def function(a, start = 0, end = (len(a) - 1)):
    #do_something
    pass

不起作用,导致异常(NameError: name 'a' is not defined)。有一些解决方法,例如使用 end = -1end = None,并有条件地将其分配给 len(a) - 1 如果函数体内需要:

def function(a, start = 0, end = -1):
    end = end if end != -1 else (len(a) -1)
    #do_something

但我觉得应该有一种更“pythonic”的方式来处理这种情况,不仅是数组的长度,而且任何参数的默认值是另一个(非可选)参数的函数。你会如何处理这样的情况?条件赋值是最好的选择吗?

谢谢!

最佳答案

通常使用诸如 None 之类的标记值:

def func(a, start=0, end=None):
    if end is None:
        end = # whatever
    # do stuff

但是,对于您的实际用例,已经有一种内置方法可以执行此操作,它符合 Python 启动/停止/步进的方式 - 这使您的函数提供与内置/其他库工作方式一致的接口(interface):

def func(a, *args):
    slc = slice(*args)
    for el in a[slc]:
        print(el)

参见 https://docs.python.org/2/library/functions.html#slice


如果您只想按该顺序支持开始/结束,那么(注意 None 实际上意味着 until len(a) 当当用作开始时用作结束0:

def func(a, start=0, end=None):
    return a[start:end]

关于python - 使用参数数组的长度作为同一函数的另一个参数的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28212364/

相关文章:

python - login_required 装饰器给出 "object has no attribute ' user'"错误

Python:如何写入文件并下载它?

python - 如何生成词频直方图,其中条形根据高度排序

python - Kivy:在重新进入屏幕时将切换按钮重置为 "normal"

python - 从列表中生成多个条件语句

python - 指定一维 np.array 是 Fortran 有序的有什么意义吗?

python - 无法删除Python3.5

python - Nonetype 对象没有附加属性将列表附加到 dict

python - 似乎append()添加了变量而不是它们的值

python - 使用字典过滤 pandas 数据框的列值