Python 数据丰富 - 基于 Name-String 和 getattr 调用函数
Python Data Enrichment - Calling functions based on Name-String with getattr
这是一个我觉得非常有用的小教程。它是许多问题的汇编,您可以找到 here for example。我尝试将其应用到现实世界的场景中以使其更容易理解。
让我们想象一下,我们有一个想要丰富的数据集。为此,我们将数据分组,我们需要在每个组上应用不同的函数。
有很多方法可以做到这一点。
其中一种方法是根据名称调用函数。这里我们有 class Test
可以调用 foo
和 bar
.
注: foo
和 bar
也可以是 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 个组:one
和 two
.
那么你可以创建一个条件循环...像这样:
group = "one"
if group == "one":
t.a("Hello World")
else:
t.b("Hello Moon")
太好了,有用!
现在假设我们的数据可以属于 50 多个可能的组...
您能想象包含 50 个 if ... else if
语句的代码吗?
上面的选项很难读。这就是为什么有一种方法可以根据 Name 作为字符串调用函数的方法。
这是一种方法:
创建一个单独的字典,保留需要应用于每个组的不同函数。
function_dict = {
"one": "a",
"two": "b"
}
然后我们使用getattr
内置函数根据组调用函数:
def launchFunction(blah):
getattr(t, function_dict[blah])("This Works Too")
这允许我们根据 function_dict
键调用 foo
或 bar
:
launchFunction("two")
这将导致:
>>> this is bar
>>> "This Works Too" was given as arg
我希望这对某人有用。
欢迎评论。
这是一个我觉得非常有用的小教程。它是许多问题的汇编,您可以找到 here for example。我尝试将其应用到现实世界的场景中以使其更容易理解。
让我们想象一下,我们有一个想要丰富的数据集。为此,我们将数据分组,我们需要在每个组上应用不同的函数。 有很多方法可以做到这一点。
其中一种方法是根据名称调用函数。这里我们有 class Test
可以调用 foo
和 bar
.
注: foo
和 bar
也可以是 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 个组:one
和 two
.
那么你可以创建一个条件循环...像这样:
group = "one"
if group == "one":
t.a("Hello World")
else:
t.b("Hello Moon")
太好了,有用!
现在假设我们的数据可以属于 50 多个可能的组...
您能想象包含 50 个 if ... else if
语句的代码吗?
上面的选项很难读。这就是为什么有一种方法可以根据 Name 作为字符串调用函数的方法。
这是一种方法:
创建一个单独的字典,保留需要应用于每个组的不同函数。
function_dict = {
"one": "a",
"two": "b"
}
然后我们使用getattr
内置函数根据组调用函数:
def launchFunction(blah):
getattr(t, function_dict[blah])("This Works Too")
这允许我们根据 function_dict
键调用 foo
或 bar
:
launchFunction("two")
这将导致:
>>> this is bar
>>> "This Works Too" was given as arg
我希望这对某人有用。
欢迎评论。