Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python检查参数是字符串还是包含一个字符串的列表_Python_Python 3.x - Fatal编程技术网

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
是最好的选择

我将检查vs
str
,以便函数接受除
list
s以外的容器(例如
deque
s和
tuple
s)


我倾向于使用
*args
参数来避免检查

def f(*args):
    for arg in args:
        print(arg)

f('foo')
foo

f(*['foo'])
foo
当然,调用者必须使用正确的呼叫约定,这可能有问题,也可能没有问题

如果上述方法不可行,并且重新设计应用程序以避免此参数重载也不可行,那么
isinstance
是最好的选择

我将检查vs
str
,以便函数接受除
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)