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

发布于 2025-01-10 21:48:18 字数 545 浏览 0 评论 0原文

假设我有以下函数:

def myF(a, b):
    return a*b-2*b

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

如果我写:

def myF(a, b=a-1):
    return a*b-2*b

我收到错误消息:

NameError: name 'a' is not defined

我可以使用下面的代码:

def myF(a, b):
    return a*b-2*b

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

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

如何避免 myDefaultF 并使 myFb 使用默认值 a-1 而不会出现错误?

Suppose I have the function:

def myF(a, b):
    return a*b-2*b

and let's say that I want a default value for b to be a-1.

If I write:

def myF(a, b=a-1):
    return a*b-2*b

I get the error message:

NameError: name 'a' is not defined

I can use the code below:

def myF(a, b):
    return a*b-2*b

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

to have myF with default value, but I don't like it.

How can I avoid myDefaultF and have myF with default value a-1 for b without errors?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

饮惑 2025-01-17 21:48:18

您可以执行以下操作:

def myF(a, b=None):
    if b is None:
        b = a - 1
    return a * b - 2 * b

You can do the following:

def myF(a, b=None):
    if b is None:
        b = a - 1
    return a * b - 2 * b
内心激荡 2025-01-17 21:48:18

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

def myF(a, b=lambda a: a-1):
    if callable(b):
        b = b(a)
    return a * b - 2 * b

这允许您动态地为 b 设置不同的函数。

# 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

If you need to have the value of b be a function of a, but you might need that function to change, you can set the default value of b to be a lambda function and then check if b is callable in the function block.

def myF(a, b=lambda a: a-1):
    if callable(b):
        b = b(a)
    return a * b - 2 * b

This allows you to set a different function for b on the fly as well.

# 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
-黛色若梦 2025-01-17 21:48:18

您可以使用 try- except 子句:

def myF(a, b=None):
  try:
    return a*b-2*b
  except:
    return a*(a-1)-2*(a-1)

You can use a try-except clause:

def myF(a, b=None):
  try:
    return a*b-2*b
  except:
    return a*(a-1)-2*(a-1)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文