【问题标题】:accessing lambda value passed to function python访问传递给函数 python 的 lambda 值
【发布时间】:2015-01-22 20:20:30
【问题描述】:

当我在调用函数的同一行上传递值时,我试图访问 lambda 函数的值。我可以获得该值的唯一方法是返回(f)。有什么方法可以访问之前的值并将其与其他值进行比较?

def func(f):
    return(f)

func(lambda x: x*2)(3)
6

【问题讨论】:

  • 问题是什么?访问什么变量?在哪里?
  • 你说的是什么意思?
  • 当我将 lambda 函数传递给 func() 并在 func() 调用行的末尾为 lambda x 提供 (3) 的值。它将 (3) 传递给 func() 中的 lambda 并产生值 6。我如何访问函数体中的这六个值。
  • 在哪个函数的主体中?请详细说明。

标签: python function python-3.x lambda arguments


【解决方案1】:

你不能。 (3) 被传递给 func() 返回的内容,因此 func 无法访问它。这就是发生的事情:

def func(f):
    return f  # parenthesis unnecessary.
func(lambda x: x*2)(3)

其中,当 lambda 函数返回时,变成:

(lambda x: x*2)(3)

这是:

3*2  # 6

这样,您会看到该函数不会与传递给 lambda 的参数交互。你不能直接访问它。

【讨论】:

    【解决方案2】:

    我仍然不确定您的用例 - 您是否正在尝试做这样的事情?

    def func(f, *args):
      result = f(*args)
      # Do some simple comparison with the result of the lambda
      myValue = 8
      msg = "8 > %d" if 8>result else "8 <= %d"
      return msg % result
    
    print(func(lambda x:x*2, 3))  # prints 8 > 6
    print(func(lambda x:x*2, 5))  # prints 8 <= 10
    print(func(lambda x:x**2, 3)) # prints 8 <= 9
    

    如您所见,这样做需要更改 func 以接受 lambda 的参数以及 lambda 本身。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 2017-08-15
      • 2013-12-20
      相关资源
      最近更新 更多