我已经遇到了这么多次.我正在处理很多可以接受字符串列表的方法.几次我不小心传递了一个字符串,它被分解成一个列表,并使用每个字符,这不是所需的行为.
def test(a,b): x = [] x.extend(a) x.extend(b) return x x = [1,2,3,4]
我不想发生什么事情
test(x,'test') [1,4,'t','e','s','t']
我必须诉诸一个奇怪的语法:
test(x,['list'])
我想让这些工作隐含地工作:
test(x,'list') [1,'test'] test(x,['one','two','three']) [1,'one','three']
我真的觉得有一个“pythonic”的方式来做这个或涉及鸭打字的东西,但我看不到它.我知道我可以使用isinstance()来检查它是否是一个字符串,但我觉得有更好的方法.
编辑:我使用的是python 2.4.3
解决方法
嗯,这可能很简单:
>>> def a(*args): ... x=[] ... for i in args: ... if '__iter__' in dir(i): ... x+=list(i) ... else: ... x.append(i) ... return x ... >>> a(1,4) [1,4] >>> a(1,[3,4]) [1,4],'123') [1,'123'] >>> a(1,'123',1231,(1,4)) [1,1,4]