0

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

我已经想到了几种方法,但都显得笨拙。对于我可以编写的每个概念函数:

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

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

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

4

2 回答 2

1

我倾向于只有一个函数采用可迭代的字符串。如果你需要用单个字符串调用它s,你总是可以调用它 asf([s])或 as f((s,))

于 2013-11-01T22:11:47.043 回答
1

isinstance 没问题。

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

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

于 2013-11-01T22:43:32.243 回答