繁体   English   中英

Python 数据丰富 - 使用 getattr 调用基于 Name-String 的函数

[英]Python Data Enrichment - Calling functions based on Name-String with getattr

这是一个我觉得非常有用的小教程。 它是许多问题的汇编, 例如,您可以在此处找到这些问题。 我试图将它应用到真实世界的场景中,以使其更容易理解。


让我们想象一下,我们有一个想要丰富的数据集。 为此,我们将数据分组,我们需要在每个组上应用不同的 function。有很多方法可以做到这一点。

其中一种方法是根据名称拨打 function。 这里我们有class Test可以调用foobar的测试。
注意: foobar也可以是Test方法

在 class 之外,我们可以直接调用该方法:

def foo(s="Nothing"):
    print("this is foo")
    print("\"{}\" was given as arg".format(s))
    
def bar(s="Nothing"):
    print("this is bar")
    print("\"{}\" was given as arg".format(s))

class Test():
    def __init__(self):
        self.a = foo
        self.b = bar

t = Test()

t.a("Hello World")

这导致:

>>> this is foo
>>> "Hello World" was given as arg

但是,如果您必须调用的方法取决于您的数据所属的组,您会怎么做? 我们可以有 2 个组: onetwo

那么你可以创建一个条件循环......像这样:

group = "one"
if group == "one":
    t.a("Hello World")
else:
    t.b("Hello Moon")

太好了,行得通!

现在让我们想象一下,我们的数据可能属于 50 多个可能的组......
您能想象包含 50 个if... else if语句的代码吗?

上面的选项将很难读。 这就是为什么有一种方法可以根据名称作为字符串来调用 function 的原因。
这是一种方法:

创建一个单独的字典,保留需要应用于每个组的不同函数。

function_dict = {
    "one": "a",
    "two": "b"
}

然后我们使用内置的getattr function 根据组调用function:

def launchFunction(blah):
    getattr(t, function_dict[blah])("This Works Too")

这允许我们根据function_dict键调用foobar

launchFunction("two")

这将导致:

>>> this is bar
>>> "This Works Too" was given as arg

我希望这对某人有用。
请随时发表评论。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM