Python检查参数是字符串还是包含一个字符串的列表
我想向函数传递一个字符串参数。但是包含一个字符串元素的列表也可以 有没有一种更紧凑的方法Python检查参数是字符串还是包含一个字符串的列表,python,python-3.x,Python,Python 3.x,我想向函数传递一个字符串参数。但是包含一个字符串元素的列表也可以 有没有一种更紧凑的方法 files = ["myfile"] isinstance(files[0], list) and len(files[0]) == 1 你可以自己做 files = ["myfile"] function(files if isinstance(files, list) and len(files) == 1 else files[0]) 如果文件不是包含1项的列表,您可以将文件[0]更改为其他元素(
files = ["myfile"]
isinstance(files[0], list) and len(files[0]) == 1
你可以自己做
files = ["myfile"]
function(files if isinstance(files, list) and len(files) == 1 else files[0])
如果文件不是包含1项的列表,您可以将文件[0]更改为其他元素(如果需要不同的元素)。您可以通过
files = ["myfile"]
function(files if isinstance(files, list) and len(files) == 1 else files[0])
如果文件不是包含1项的列表,您也可以将文件[0]更改为其他元素。我倾向于使用
*args
参数来避免检查
def f(*args):
for arg in args:
print(arg)
f('foo')
foo
f(*['foo'])
foo
当然,调用者必须使用正确的呼叫约定,这可能有问题,也可能没有问题
如果上述方法不可行,并且重新设计应用程序以避免此参数重载也不可行,那么isinstance
是最好的选择
我将检查vsstr
,以便函数接受除list
s以外的容器(例如deque
s和tuple
s)
我倾向于使用
*args
参数来避免检查
def f(*args):
for arg in args:
print(arg)
f('foo')
foo
f(*['foo'])
foo
当然,调用者必须使用正确的呼叫约定,这可能有问题,也可能没有问题
如果上述方法不可行,并且重新设计应用程序以避免此参数重载也不可行,那么isinstance
是最好的选择
我将检查vsstr
,以便函数接受除list
s以外的容器(例如deque
s和tuple
s)
我不这么认为。但是,它看起来应该是
isinstance(files,list)和len(files)==1
而不是您可以使用final_string=''。join(lis[0])
您的isinstance(files[0],list)和len(files[0])==1将导致false。正确的方法可以是isinstance(文件[0],str)和len(文件)==1
@ForceBru是的,你是对的。在我的例子中,它返回False
,而在你的True
中,我不这么认为。但是,它看起来应该是isinstance(files,list)和len(files)==1
而不是您可以使用final_string=''。join(lis[0])
您的isinstance(files[0],list)和len(files[0])==1将导致false。正确的方法可以是isinstance(文件[0],str)和len(文件)==1
@ForceBru是的,你是对的。在我的例子中,它返回False
,在你的True
中,这是一个非常好的解决方案,但我有多个参数要用这种方式检查,我不能使用def(*args1,*args2,*args3)
这是一个非常好的解决方案,但我有多个参数要用这种方式检查,我不能使用def(*args1,*args2,*args3)