Python“字符串或字符串列表”类型约定?

时间:2013-11-01 22:05:09

标签: python string list

我正在编写一些库函数,我发现自己希望函数接受字符串或字符串列表作为输入,并返回相同的类型。

我想到了几种方法,但两者看起来都很笨拙。对于我可以编写的每个概念函数:

  • 字符串和字符串列表的单独函数。但这需要调用代码知道变量的类型,并选择适当的函数。
  • 只是一个函数,它根据使用'isinstance(inputarg,str):'检测输入类型来决定做什么。这至少隐藏了库内而不是调用者中的多个选择。

但我想知道是否有一些我忽略的更优雅的方法或成语?

澄清:在这两个解决方案中,我更喜欢第二个解决方案,使得单个函数在接受(和返回)字符串或字符串列表的程度上具有多态性。然而,即使在这种情况下,基于isinstance()的转换似乎也是一种不太优雅,可能有更好的选择。

2 个答案:

答案 0 :(得分:1)

我倾向于只使用一个函数来获取可迭代的字符串。如果您需要使用单个字符串s来调用它,则可以将其称为f([s])f((s,))

答案 1 :(得分:1)

isinstance没问题。

最好是测试字符串(而不是列表)所需的某些方法的存在,并再次测试列表(而不是字符串)所需的某些方法,如果两者都没有,则引发AssertionError。

您可以使用hasattr()来测试方法。