Python 对可能的函数式编程的解释

问题描述 投票:0回答:1

我正在阅读一个具有此语法的Python脚本

a,b = foo(c,d)(f,g)
因为这是我第一次看到这种语法。我不知道如何解释。你能帮我理解吗?谢谢。

Unfortunately I am not authorized to share the code.

foo 的结构如下。

def foo(n):
   def todo(func):
      def dodo(*args, **kargs):
         ...
         ...
         ...
         return func(*args, **kargs)
      return dodo
   return todo
python python-3.x methods functional-programming
1个回答
3
投票

大家好,

a,b = foo(c,d)(f,g)
的意思是

  1. 使用参数 c 和 d 执行 foo (返回一个函数)(
    foo(c,d)
    )
  2. 执行参数 f 和 g 返回的函数(返回长度为 2 的列表)(
    foo(c,d)(f,g)
    (
    func(f,g)
    ))
  3. 指定列表的第一项 (
    a,b = foo(c,d)(f,g)
    (
    a = foo(c,d)(f,g)[0]
    ))
  4. 分配 b 列表的第二项 (
    b = foo(c,d)(f,g)[1]
    )

所以

a,b = foo(c,d)(f,g)
是一种写作方式

save = foo(c,d)(f,g)
a = save[0]
b = save[1]

示例:

(警告:c、d、f 和 g 在我的示例中都是整数)

foo 返回一个函数。示例:

def foo(c,d):
    if c+d > 10:
        return func1
    else:
        return func2

所以你用 f 和 g 执行 func1 (或 func2),

然后将输出 1 保存到 a,将输出 2 保存到 b

func1 和 func2 示例:

def func1(f,g):
    return [f+1,g+1]
def func2(f,g):
    return [f-1,g-1]

那么该片段将按如下方式使用:

c = 5
d = 8
f = 19
g = 4
def func1(f,g):
    return [f+1,g+1]
def func2(f,g):
    return [f-1,g-1]

def foo(c,d):
    if c+d > 10:
        return func1
    else:
        return func2

a,b = foo(c,d)(f,g)

如果我们在末尾添加打印然后

a 将是 20

b 将为 5。

© www.soinside.com 2019 - 2024. All rights reserved.