【问题标题】:Python interpretation of a possible functional programming一种可能的函数式编程的 Python 解释
【发布时间】:2021-02-08 04:20:24
【问题描述】:

大家好,我正在阅读具有此语法a,b = foo(c,d)(f,g) 的python 脚本,因为这是我第一次看到这种语法。我不知道如何解释。你能帮我理解PLZ吗?谢谢。

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

【问题讨论】:

  • 函数foo(c, d) 可能正在返回另一个接受两个参数的函数。
  • 并且该函数返回一个 2 元组、一个 2 列表或可以分解为 a,b 的东西 - 但如果没有 foo 的实现,这不是真正可以回答的,也不是它本身对 SO 来说是个好问题。
  • 某个函数(或其他可调用)正在返回(并且可能由其创建)名为 foo 的对象(它本身是一个函数或其他类型的可调用)。后者返回一个长度为 2 的序列,其元素被“解包”并分配给变量 ab
  • @Patrick:我不同意。 OP 似乎只是在询问如何理解所显示的代码应该被解释为做什么(一般或抽象)。

标签: python python-3.x methods functional-programming


【解决方案1】:

大家好,a,b = foo(c,d)(f,g) 表示

  1. 使用 args c 和 d 执行 foo(返回一个函数)(foo(c,d))
  2. 执行以 args 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 = 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]

那么sn-p会被如下使用:

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。

【讨论】:

    猜你喜欢
    • 2014-10-29
    • 2017-12-16
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    相关资源
    最近更新 更多