支持单个字符串和数组作为一个参数

时间:2017-11-05 08:53:04

标签: python string parameters polymorphism typing

extended a method有一个额外的字符串参数(平均值):

def classification_report(y_true, y_pred, labels=None, target_names=None,
                          sample_weight=None, digits=2, average='weighted'):

所以正常用法如下:

classification_report(y_true, y_pred, average='micro')

来自对Github的审核,审核人员建议同时支持多个值:average=['micro', 'weighted', 'macro']

在Python中解决这个问题的合适方法是什么?我知道参数可以有任何类型。但是如何使用字符串列表处理潜在的调用?参数的类型是什么? Union[str, List[str]]

目前我只期待一个字符串,这是直截了当的。但是如果我还允许一个字符串列表,我应该先用type(average)检查类型,然后相应地处理这些值吗?是否有一种优雅的方法可以将参数变量转换为统一类型,例如averages=listify(average),它接受​​字符串或字符串列表并始终返回字符串列表?

1 个答案:

答案 0 :(得分:2)

以下是pandas的一个例子:

if level is not None:
        if not isinstance(level, (tuple, list)):
            level = [level]

这是方法pandas.DataFrame.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill='')中的代码,其中级别应为int, str, tuple, or list, default None。这个简单的代码只是确保参数现在存储在列表中,无论它是如何给出的。