gpt4 book ai didi

python - 需要二分之一的关键字参数

转载 作者:行者123 更新时间:2023-12-04 22:32:00 25 4
gpt4 key购买 nike

我有一个可以接受关键字参数的函数,我想要求其中之一。比方说美元和欧元,我想要一个,而且只有一个。现在,我正在这样做(示例),但我发现它非常复杂。还有其他更好的方法吗?

def set_value(country, **kargs):

if len(kargs) == 1:
if kargs.keys()[0] == 'dollar':
pass # do something
elif kargs.keys()[0] == 'euro':
pass # do something
else:
raise ValueError('One keyword argument is required: dollar=x or euro=x')
else:
raise ValueError('One keyword argument is required: dollar=x or euro=x')

谢谢!

最佳答案

您可以在 dictionary keys view 上使用设置操作:

if len(kargs.viewkeys() & {'dollar', 'euro'}) != 1:
raise ValueError('One keyword argument is required: dollar=x or euro=x')

在 Python 3 中,使用 kargs.keys()反而。

集合操作不同结果的演示:
>>> kargs = {'dollar': 1, 'euro': 3, 'foo': 'bar'}
>>> kargs.viewkeys() & {'dollar', 'euro'}
set(['dollar', 'euro'])
>>> del kargs['euro']
>>> kargs.viewkeys() & {'dollar', 'euro'}
set(['dollar'])
>>> del kargs['dollar']
>>> kargs.viewkeys() & {'dollar', 'euro'}
set([])

换句话说, &集合交集为您提供一组存在于两个集合中的所有键;无论是在字典中还是在您的显式集文字中。只有当一个且只有一个命名键存在时,交集的长度才会为 1。

如果您不想允许除 dollar 之外的任何其他关键字参数和 euro ,那么您也可以使用适当的子集测试。使用 <只有当左侧集合严格小于右侧集合时,两个集合才为真;它只有比另一组更少的键,并且没有额外的键:
if {}.viewkeys() < kargs.viewkeys() < {'dollar', 'euro'}:
raise ValueError('One keyword argument is required: dollar=x or euro=x')

在 Python 3 上,这可以拼写为:
if set() < kargs.keys() < {'dollar', 'euro'}:

反而。

演示:
>>> kargs = {'dollar': 1, 'euro': 3, 'foo': 'bar'}
>>> {}.viewkeys() < kargs.viewkeys() < {'dollar', 'euro'}
False
>>> del kargs['foo']
>>> {}.viewkeys() < kargs.viewkeys() < {'dollar', 'euro'}
False
>>> del kargs['dollar']
>>> {}.viewkeys() < kargs.viewkeys() < {'dollar', 'euro'}
True
>>> del kargs['euro']
>>> {}.viewkeys() < kargs.viewkeys() < {'dollar', 'euro'}
False

请注意,现在 'foo'键不再被接受。

关于python - 需要二分之一的关键字参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19122988/

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