如何判断一个Python变量是字符串还是列表?
我有一个程序,它需要一个字符串列表作为输入,但我想让它也能接受一个单独的字符串,并把这个字符串转换成一个只包含这个字符串的列表。例如:
def func( files ):
for f in files:
doSomethingWithFile( f )
func( ['file1','file2','file3'] )
func( 'file1' ) # should be treated like ['file1']
我的这个函数怎么知道传入的是一个字符串还是一个列表呢?我知道有一个叫做 type
的函数,但有没有更符合Python风格的方法呢?
8 个回答
32
我个人不太喜欢这种做法——它干扰了鸭子类型(duck typing)。有人可能会说,这种做法不符合“显式比隐式好”的原则。那为什么不使用可变参数语法呢:
def func( *files ):
for f in files:
doSomethingWithFile( f )
func( 'file1', 'file2', 'file3' )
func( 'file1' )
func( *listOfFiles )
40
isinstance(your_var, basestring)
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。
38
其实,检查类型并没有什么不符合Python风格的地方。不过,如果你愿意让调用者多承担一点责任:
def func( *files ):
for f in files:
doSomethingWithFile( f )
func( *['file1','file2','file3'] ) #Is treated like func('file1','file2','file3')
func( 'file1' )
我觉得这样做更符合Python的风格,因为“明确比隐含更好”。在这里,调用者至少能意识到输入已经是列表的形式。