【发布时间】:2020-08-28 13:54:49
【问题描述】:
我有一个函数可以接受类似列表的元组并对其进行迭代:
def fn(arglist):
for col, extra in arglist:
# do stuff with col, extra
这里col 应该是一个字符串,extra 是一个额外参数的字典。
通常 extra 最终是空的,所以人们经常这样调用这个函数:
fn(arglist=[ ('foo', {}), ('bar', {}), ('baz', {}) ])
我想更改 fn 以便它可以接受 either 元组列表(如上)或简单的字符串列表,这将允许您制作与上面相同的调用只是:
fn(arglist=[ 'foo', 'bar', 'baz'])
如何更改 fn 以执行相同的迭代但在传递字符串的情况下使用空字典?
我可以明确检查元素是否可迭代,例如:
def fn(arglist):
for maybe_tuple in arglist:
if isinstance(obj, Iterable):
col, extra = maybe_tuple
else:
col, extra = maybe_tuple, {}
...但这似乎很尴尬。这里有什么更pythonic的方式来处理元组和非元组的情况?
【问题讨论】:
-
这实际上行不通 - 字符串也是可迭代的。
-
只检查item是否是一个字符串实例。
-
一种可能性是使用
type(arglist[0])和type(arglist[1])检查参数的类型并相应地转换参数?
标签: python python-3.x