我已经遇到了这么多次.我正在处理很多可以接受字符串列表的方法.几次我不小心传递了一个字符串,它被分解成一个列表,并使用每个字符,这不是所需的行为.
- 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]