gpt4 book ai didi

python-2.7 - 在 python 2.7 中强制关键字参数

转载 作者:行者123 更新时间:2023-12-01 13:34:54 25 4
gpt4 key购买 nike

我知道我可以使用 * 来强制“命名”一个函数/方法的所有关键字参数。

如果我有

def abc(a, *, x=10, z=30):
pass

然后下面所有的工作

abc(5)
abc(8, x=12)
abc(9, z=31)
abc(x=17, a=4)

即使我将函数签名更改为 def abc(a, *, x=10, y=20, z=30),和

abc(7, 13)

抛出一个错误。

这非常重要,因为我可以使用逻辑位置,这将有助于随着时间的推移进行维护,而不必被迫使用基于历史的结束位置。

但是 * 在 Python 2.7 中无效,abc(a, *args, x=10, z=30)(我试过了)也不起作用。

有没有办法在 Python 2.7 中强制使用 x=12?或者换一种说法:使 abc(7, 13) 在 Python 2.7 上无效。

最佳答案

这样做的一种方法是添加一个永远不会获得有效位置值的虚拟关键字参数(因此不要检查 None):

_dummy = object()

def abc(a, dummy_kw=_dummy, x=10, z=30):
if dummy_kw is not _dummy:
raise TypeError("abc() takes 1 positional argument but at least 2 were given")

这将禁止 abc(7, 13) 并允许所有其他。 它适用于 Python 2 和 Python 3,因此当您有需要在两者上运行的代码时它很有用。

最初我使用:

 def _dummy():
pass

但正如@mata 指出的那样,_dummy=object() 也能正常工作,而且更干净。基本上任何未以其他方式使用的唯一内存位置都可以使用。

关于python-2.7 - 在 python 2.7 中强制关键字参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44284230/

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