python以数组为参数的函数_python – 使用参数数组的长度作为同一函数的另一个参数的默认值...

这是我第一次在SO中提出一个问题,所以如果我不知道怎么回事,请不要犹豫,编辑它或者让我修改它.

我认为我的问题很普遍,所以我很惊讶没有找到任何与此主题相关的问题.如果我错过了,这个问题是重复的,如果你能提供一个已经回答的地方的链接,我将非常感激.

想象一下,我需要用(至少)三个参数来实现一个函数:数组a,起始索引和结束索引.如果未提供,则start参数应引用数组的第一个位置(start = 0),而end参数应设置为最后一个位置(end = len(a) – 1).显然,定义:

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

#do_something

pass

不起作用,导致异常(NameError:名称’a’未定义).有一些解决方法,例如使用end = -1或end = None,并有条件地将它分配给len(a) – 如果需要,则在函数体内:

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启动/停止/步进的方式 – 这使得您的函数提供了关于内置/其他库工作方式的一致界面:

def func(a, *args):

slc = slice(*args)

for el in a[slc]:

print(el)

如果你只想按顺序支持开始/结束,那么(注意,无效是指len(a)当用作end或0用作start时):

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

return a[start:end]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值