【问题标题】:Define function and it's parameter based on configuration in python根据python中的配置定义函数及其参数
【发布时间】:2020-05-02 17:16:03
【问题描述】:

我必须编写一个带有类及其函数的 python 脚本。功能参数应根据配置而变化。在“C”语言中,它可以使用#ifdef 或#if Macro 来实现

#ifdef MULTIPLE_APPLICATION
uint8 check_actions(int machine, int application_instance, int error_limit)
{
          .....
}
#else /*single applciation*/
uint8 check_actions(int machine, int error_limit)
{
        .....
}

以同样的方式,我如何在 python 中实现。因为我在 python 中找不到任何替换 #ifdef 的东西。我想要类似的东西

#ifdef MULTIPLE_APPLICATION
def check_actions(self, machine, application_instance, error_limit)
#else
def check_actions(self, machine, error_limit)
    .......
    .......

【问题讨论】:

  • Python "def" 只是为函数对象分配名称的语句("command")。所以“def”可以像其他语句一样有条件地执行。
  • 可以使用if-else 语句执行此操作,但是您不会在 Python 中执行此操作,您可以使用某种默认参数。
  • @faressalem 我已经看到了对我的用例没有用的款待。 debug 是在编译期间使用 -o 选项,这不是我的情况。
  • @MichaelButscher 你能详细说明一下吗?因为我是python的初学者

标签: python python-3.x


【解决方案1】:

python 是一种纯 OOP 语言!没有#if 宏。这里的情况完全不同。您可以通过多种方式解决它。一种简单的方法是定义外部函数和 2 个嵌套的内部函数,并调用与传递给外部函数的 var 对应的内部函数之一。见下文:

def check_action(application_stat, *args, **kwargs):
    def check_single_app_action(*args, **kwargs):
        #do some thing
        return
    def check_multi_app_action(*args, **kwargs):
        #do some work
        return
    if application_stat=='single':
        check_single_app_action(args, kwargs) 
    else:
        check_multi_app_action(args, kwargs)
    return

【讨论】:

  • @Cool_Binami,这是最接近 c 类代码的解决方案。为什么?因为使用两个内部函数(check_multi_app_action 和 check_single_app_action),解释器在运行此代码时根本不构造它们,只有当 if else 中的调用发生时,运行时构造函数才会构建它们并将函数绑定到它们的名称.所以说 OOP,我们不构建对象告诉我们需要它们(并且函数是对象)祝你好运
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-05
  • 2018-08-07
  • 2021-07-28
  • 2011-06-02
  • 2013-08-14
  • 2023-03-18
  • 1970-01-01
相关资源
最近更新 更多