gpt4 book ai didi

python - 是否可以从参数列表中删除一个项目?

转载 作者:太空宇宙 更新时间:2023-11-04 05:43:51 24 4
gpt4 key购买 nike

def foo(name, *args, **kwargs):

我需要删除 *args 的前两个参数,以防它的长度 (len(args)) 大于两个。有可能吗?

这就是我需要这样做的原因:我有以下功能:

def foo(name, xml='my.xml', xsd='my.xsd', *otherfiles):
print('name: ' + name)
print('xml: ' + xml)
print('xsd: ' + xsd)
print(otherfiles)

我需要在不破坏向后兼容性的情况下向该函数的参数添加一个可选的 bool 参数。所以我将函数更改为:

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)

现在我通过检查 foofoo2 的输出是否相同来测试向后兼容性:

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因为元组是不可变的

但我们可以根据我们的逻辑创建新变量,其中包含 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

def foo(name, *args, **kwargs):
print "args: ", args
print "Type of args: ", type(args)
if len(args)>2:
args = args[0], args[1] #- Created Same name variable.
print "Temp args:", args

关于python - 是否可以从参数列表中删除一个项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32943081/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com