gpt4 book ai didi

在 map 中使用局部函数时出现 Python ValueError

转载 作者:行者123 更新时间:2023-12-04 16:58:45 25 4
gpt4 key购买 nike

我正在尝试制作一个包含由不同功能处理过的数据的列表。下面的代码不起作用,因为a和b这两个函数不在map函数的范围内

def outer_func():
def a():
return "Something"
def b():
return "Something else"
map(lambda x: eval(x)(), ['a', 'b'])

我尝试将函数包装在一个类中,下面的代码工作得很好。
class fcontainer():
def a(self):
return "Something"

def b(self):
return "Something else"

def test():
f = fcontainer()
return map(lambda x: getattr(f, x)(), ['a', 'b'])

现在,我的问题是:
  • 为什么 a 和 b 不存在于 map 函数中?
  • 有没有一种“正确”的方式来做我想做的事情?
  • 我应该最终坐下来,把头围在装饰者身上吗? :)

  • 谢谢!

    更新:第一个例子可以通过首先在outer_func范围内获取函数,然后使用map来工作:
    functions = [eval(i) for i in ['a', 'b']]
    return map(lambda x: x(), functions)

    这有效,但它是两行而不是一行 >:|

    最佳答案

    是否有必要有一个字符串列表( ['a', 'b'] )?也许你最好将函数对象直接放入列表中:[a, b] .

    return map(lambda x: x(), [a, b])

    对我来说似乎很容易。

    如果你想作为装饰者来做,那就不会容易多了:
    def outer_func():
    funcs = []
    def funcapp(func): # so that a and b are still in place...
    funcs.append(func)
    return func
    @funcapp
    def a():
    return "Something"
    @funcapp
    def b():
    return "Something else"
    return funcs

    关于在 map 中使用局部函数时出现 Python ValueError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21062001/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com