gpt4 book ai didi

python字符串到函数: globals() vs sys.模块与字典

转载 作者:行者123 更新时间:2023-12-01 06:01:29 26 4
gpt4 key购买 nike

我想知道将字符串映射到函数的最佳方法是什么。到目前为止我知道我可以使用:

  1. 全局变量()[func_string]
  2. sys.modules[__name__]
  3. funcs_dictionary["func_string": func]

这是代码:

    >>> def foo(arg):
... print "I'm foo: %s" % arg
...
>>> def bar(arg):
... print "I'm bar: %s" % arg
...
>>>
>>> foo
<function foo at 0xb742c7d4>
>>> bar
<function bar at 0xb742c80c>
>>>

全局()[func_string]:

    >>> def exec_funcs_globals(funcs_string):
... for func_string in funcs_string:
... func = globals()[func_string]
... func("from globals() %s" % func)
...
>>> exec_funcs_globals(["foo", "bar"])
I'm foo: from globals() <function foo at 0xb742c7d4>
I'm bar: from globals() <function bar at 0xb742c80c>
>>>

sys.modules[__name__]:

    >>> import sys
>>>
>>> def exec_funcs_thismodule(funcs_string):
... thismodule = sys.modules[__name__]
... for func_string in funcs_string:
... func = getattr(thismodule, func_string)
... func("from thismodule %s" % func)
...
>>> exec_funcs_thismodule(["foo", "bar"])
I'm foo: from thismodule <function foo at 0xb742c7d4>
I'm bar: from thismodule <function bar at 0xb742c80c>
>>>

funcs_dictionary[“func_string”:func]:

    >>> funcs = {
... "foo" : foo,
... "bar" : bar
... }
>>>
>>> def exec_funcs_dict(funcs_string):
... for func_string in funcs_string:
... func = funcs[func_string]
... func("from thismodule %s" % func)
...
>>> exec_funcs_dict(["foo", "bar"])
I'm foo: from thismodule <function foo at 0xb742c7d4>
I'm bar: from thismodule <function bar at 0xb742c80c>

最初我担心 sys.modules[__name__] 会重新加载模块并损害性能。但上面的代码似乎表明函数指针是相同的,所以我想我不必担心它?

选项 1、2、3 的最佳用例是什么?

最佳答案

使用globals()是访问(和存储)您想要全局访问的变量的正常方法。

否则,通常的选择是实现调度字典(如选项 3)。

我还没有看到在任何地方使用sys.modules方法。

关于python字符串到函数: globals() vs sys.模块与字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10220620/

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