是否可以从参数列表中删除项?

2024-09-27 00:18:17 发布

您现在位置:Python中文网/ 问答频道 /正文

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的前两项应该删除,以保持旧的功能。在


Tags: name参数lenfoomydefargsxml
1条回答
网友
1楼 · 发布于 2024-09-27 00:18:17

无法从args中删除项,因为它是tuple因为tuple是不可变的

但是我们可以根据我们的逻辑创建一个包含args项的新变量。我们可以在下一个过程中使用新变量。在

演示1

def foo(name, *args, **kwargs):
    print "args: ", args
    print "Type of args: ", type(args)
    if len(args)>2:
        tmp_args = args[0], args[1]
    else:
        tmp_args = args

    print "Temp args:", tmp_args


print "Debug 1:"    
foo("ww", 12,3,4,4,5,6,7,7)
print "\nDebug 2:"
foo("ss", 1)


Debug 1:
args:  (12, 3, 4, 4, 5, 6, 7, 7)
Type of args:  <type 'tuple'>
Temp args: (12, 3)

Debug 2:
args:  (1,)
Type of args:  <type 'tuple'>
Temp args: (1,)

如果在下一个过程中不需要变量的值,我们可以重写相同的变量名

演示2

^{pr2}$

相关问题 更多 >

    热门问题