def foo(name, *args, **kwargs):
我需要删除*args
的前两个参数,以防其长度(len(args)
)大于2。有可能吗?在
以下是我需要这样做的原因: 我有以下功能:
^{pr2}$我需要在这个函数的参数中添加一个可选的布尔参数,而不破坏向后兼容性。所以我把函数改为:
def foo2(name, *otherfiles, **kwargs):
kwargs.setdefault('relativePath', True)
if len(otherfiles)>0:
xml = otherfiles[0]
else:
kwargs.setdefault('xml', 'my.xml')
xml = kwargs['xml']
if len(otherfiles)>1:
xsd = otherfiles[1]
else:
kwargs.setdefault('xsd', 'my.xsd')
xsd = kwargs['xsd']
print('name: ' + name)
print('xml: ' + xml)
print('xsd: ' + xsd)
print(otherfiles)
现在我通过检查foo
和{
foo('my_name', '../my.xml', '../my.xsd', 'file1', 'file2')
print('===============================================================')
foo2('my_name', '../my.xml', '../my.xsd', 'file1', 'file2')
输出:
name: my_name
xml: ../my.xml
xsd: ../my.xsd
('file1', 'file2')
===============================================================
name: my_name
xml: ../my.xml
xsd: ../my.xsd
('../my.xml', '../my.xsd', 'file1', 'file2')
如您所见,otherfiles
的前两项应该删除,以保持旧的功能。在
无法从
args
中删除项,因为它是tuple
。因为tuple
是不可变的但是我们可以根据我们的逻辑创建一个包含
args
项的新变量。我们可以在下一个过程中使用新变量。在演示1:
如果在下一个过程中不需要变量的值,我们可以重写相同的变量名
演示2
^{pr2}$相关问题 更多 >
编程相关推荐