【发布时间】:2015-05-19 12:14:04
【问题描述】:
我是 python 的初学者,我遇到了一个需要可选参数的函数的问题。 此函数获取可变数量的文件路径作为参数,可以是 2 到 n 个参数。 之后,可以将一定数量的可选参数传递给该函数。 我试图做这样的事情:
def compareNfilesParameters(*args):
start_time = time.time()
listFiles = []
listParameters = []
for argument in args:
if str(argument).endswith(".vcf"):
listFiles.append(str(argument))
else:
listParameters.append(argument)
因此,如果参数具有文件扩展名,则将其视为文件路径参数之一,其他参数则视为可选参数。
我想做的是让用户像这样调用函数:
function('a.vcf', 'b.vcf', 'c.vcf')
或
function('a.vcf', 'b.vcf', 'c.vcf', 0, 1)
或
function('a.vcf', 'b.vcf', 'c.vcf', 0, 1, 4,...,3)
我尝试了不同的方法,但没有一个让我满意。
第一种方法是将函数声明为:
def compareNfilesParameters(*args)
但是这样,如果我得到例如 3 个参数,2 肯定是文件路径,最后一个我不知道它指的是哪个变量。所以我需要指定每个值并为我想要使用默认值的参数传递“-1”。
第二种方法如下:
def compareNfilesParameters(*args, par1 = 10, par2 = 15 ..)
但是这样我需要调用如下函数:
compareNfilesParameters(path1, path2, path3, par1 = 10)
不喜欢
compareNfilesParameters(path1, path2, path3, 10)
或者 10 将在 args 输入中被考虑,对吗?我不想使用这种方法,因为调用该函数会变得非常冗长。
你会怎么做?
【问题讨论】:
-
如果您提供默认值,如果您不想更改默认值,则无需向函数传递任何内容。例如,如果您执行了
def foo(a, b, c=10),如果您不想更改c的值,则可以使用foo(a, b)调用该函数。 -
简单地使用将所有路径保存为列表或元组的参数以及所有其他参数是可选的怎么样?喜欢
compareNfilesParameters(files, *args)
标签: python pointers optional-parameters