首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:函数作为函数参数的默认值

Python:函数作为函数参数的默认值
EN

Stack Overflow用户
提问于 2022-03-01 08:01:42
回答 3查看 349关注 0票数 3

假设我有一个函数:

代码语言:javascript
复制
def myF(a, b):
    return a*b-2*b

假设我希望b的默认值是a-1

如果我写:

代码语言:javascript
复制
def myF(a, b=a-1):
    return a*b-2*b

我得到了错误消息:

代码语言:javascript
复制
NameError: name 'a' is not defined

我可以使用以下代码:

代码语言:javascript
复制
def myF(a, b):
    return a*b-2*b

def myDefaultF(a):
    return myF(a, a-1)

拥有默认值的myF,但我不喜欢它。

如何避免myDefaultF,并使myF具有默认值a-1作为b,而没有错误?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-03-01 08:04:47

您可以执行以下操作:

代码语言:javascript
复制
def myF(a, b=None):
    if b is None:
        b = a - 1
    return a * b - 2 * b
票数 7
EN

Stack Overflow用户

发布于 2022-03-01 08:22:12

如果需要b的值是a的函数,但可能需要更改该函数,则可以将b的默认值设置为lambda函数,然后检查b在函数块中是否可调用。

代码语言:javascript
复制
def myF(a, b=lambda a: a-1):
    if callable(b):
        b = b(a)
    return a * b - 2 * b

这也允许您为b设置一个不同的函数。

代码语言:javascript
复制
# pass b as an integer
myF(1, 1)
# returns: -1


# use default function for b
myF(4)
# returns: 6


# set b to be 2*a + 1
myF(3, lambda a: 2*a+1)
# returns: 7
票数 3
EN

Stack Overflow用户

发布于 2022-03-01 08:07:25

您可以使用“试-除”子句:

代码语言:javascript
复制
def myF(a, b=None):
  try:
    return a*b-2*b
  except:
    return a*(a-1)-2*(a-1)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71305358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档