如何判断一个Python变量是字符串还是列表?

63 投票
8 回答
52020 浏览
提问于 2025-04-15 11:27

我有一个程序,它需要一个字符串列表作为输入,但我想让它也能接受一个单独的字符串,并把这个字符串转换成一个只包含这个字符串的列表。例如:

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的风格,因为“明确比隐含更好”。在这里,调用者至少能意识到输入已经是列表的形式。

撰写回答