将应用于另一个variab的Python函数

2024-04-20 16:16:43 发布

您现在位置:Python中文网/ 问答频道 /正文

例如:

def some_function(a):
     if a == 1:
          return x ** 2
     else:
          return x - 1000

some_function(a)(b)

当我们有a==1时,得到b**2,在所有其他情况下得到b-1000。你知道吗

在python中,是否有可能得到一个未知变量作为返回值,该变量将被另一个变量替换?你知道吗

问题就是不要碰b,它对于函数来说是无法直接访问的。你知道吗

应该工作的代码是some_function(a)(b)。你知道吗


Tags: 函数代码returnifdef情况functionsome
3条回答

这通常被称为curryingpartial函数。在python中是这样的

from functools import partial

def some_function(a, x):
    if a == 1:
        return x ** 2
    else:
        return x - 1000

一般来说,您存储部分函数

a = 1
func = partial(some_function, a)
func(5)

但你也可以把它们当作一行。你知道吗

partial(some_function, 1)(5)
partial(some_function, 0)(1500)

或者,您可以让some_function返回一个函数

def some_function(a):
    if a == 1:
        return lambda b: b **2
    else:
        return lambda b: b - 1000

不过,使用partial通常是更灵活的方法。你知道吗

虽然Brian的答案是有效的,但是它有代码重复,并且不能利用函数闭包。你知道吗

函数闭包意味着函数定义范围内的变量在函数创建之后会被维护,即使变量现在超出了范围。你知道吗

def some_function(a):
    def f(x):
        if a == 1:
            return x ** 2
        else:
            return x - 1000
    return f

some_function(a)(b)

>>> some_function(1)(4)
16
>>> some_function(0)(1000)
0

在本例中,变量a仅在some_function的范围内定义,但由于我们在f(x)中使用它,因此当我们稍后调用返回的函数时,它仍然可用。你知道吗

在这种情况下,另一个答案是正确的,但可能不适合您正在尝试的操作。你知道吗

您要做的是返回一个函数,Python使之非常简单:

def some_function(a):
    if a == 1:
        def f(x):
            return x ** 2
    else:
        def f(x):
            return x - 1000
    return f

>>> some_function(1)(5)
25
>>> some_function(0)(1500)
500

相关问题 更多 >