【问题标题】:Python function using If statement使用 If 语句的 Python 函数
【发布时间】:2019-12-03 11:10:58
【问题描述】:

我创建了一个函数列表,它们单独工作正常。然而,其他开发人员必须单独调用这些函数。

这样调用函数。我想在创建模块时进行更多简化,比如用户应该使用以下行调用

'type' 将是以下任何一种(强制)

a、b、c、d

对于每种类型,应该从模块中调用相关函数

'info' 将由开发者输入(可选)

'param' 将是 DBNAME(SQL、ORACLE、TERADATA 等)的必填列表,其余为可选列表。

我已经为类型创建了下面的类。但是,我无法使用上述类型使用 IF 语句创建正确的代码来创建上述函数。我怎样才能做到这一点?

【问题讨论】:

  • 这似乎不会为用户简化任何事情。 N 个函数调用将被 N 个(略有不同)函数调用替换。
  • 你的意思是像this这样的吗?

标签: python-3.x


【解决方案1】:

IIUC。您可以使用dict 调用所需的函数。

例如:

def log_info(info=None):
    print('log_info', info)

def log_info_DBCS(info=None):
    print('log_info', info)

def log_info_DBName(param, info=None):
    print('log_info_DBName', param, info)

def log_info_TableName(info=None):
    print('log_info_TableName', info)  

def log_info_RecordCount(info=None):
    print('log_info_RecordCount', info)

def log_info_Duration(info=None):
    print('log_info_Duration', info)


def call_func(func, **kargs):
    f = {'log_info': log_info,
         'log_info_DBCS': log_info_DBCS,
         'log_info_DBName': log_info_DBName,
         'log_info_TableName': log_info_TableName,
         'log_info_RecordCount': log_info_RecordCount,
         'log_info_Duration': log_info_Duration}

    return f[func](**kargs)

typ = 'log_info_DBName'
dbname = 'SQL'    

call_func(typ, **{"param":dbname})
call_func(typ, **{"param":dbname, 'info': "Hello World"})

【讨论】:

    【解决方案2】:

    首先,我不会命名 type,因为它是内置的。

    其次,您不需要任何if 语句;看起来唯一不同的是错误字符串,因此您可以将其粘贴到枚举值中,并将其用作格式字符串:

    from enum import Enum
    
    class LogType(Enum):
      Info = "cmd: {}"
      DBName = "cmd: Connected to database-({})"
      # .. etc.
    
    def log_info(logtype, info):
        logger.info(logtype.value.format(info))
    

    【讨论】:

      猜你喜欢
      • 2017-12-05
      • 2020-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多