【问题标题】:Forcing python function parameters to not have order强制python函数参数没有顺序
【发布时间】:2022-11-14 03:44:44
【问题描述】:

我有一个带有大量参数的python函数:

def func(p1=0, p2=0, p3=0, p4=0, p5=0, ..., pN=0) -> None: pass

我想强制用户将参数设置为关键字参数。

我想到了一个对我来说似乎不合适的解决方案:

def func(*_, p1=0, p2=0, p3=0, p4=0, p5=0, ..., pN=0) -> None: pass

如果给出了不需要的有序参数,甚至将有序参数与无序参数分开,我什至可以引发错误:

def func(p1, p2, p3, *unwanted, p4=0, p5=0, p6=0, ..., pN=0) -> None:
    if unwanted: raise TypeError

没看到有人这样,有问题吗?

【问题讨论】:

  • 我不太确定我是否理解了这个问题,但试试func(p1, p2, p3, *, p4=0, ..., pN=0)
  • 你实际上并不需要_* 单独足以标记普通参数和仅关键字参数之间的“边界”。 (*_*args 相同:它是一个名为_ 的参数,它收集任何未分配给其他参数的位置参数。它可以标记普通参数和仅关键字参数之间的界限。)

标签: python function arguments keyword-argument


【解决方案1】:

这已经是标准方法了。它定义在PEP3102

它在许多图书馆中使用。

举个例子:在'drop函数中,*之后的所有参数都是关键字:

DataFrame.drop(labels=None, *, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise')

请注意,如果您只想忽略参数,则不需要_,裸* 就足够了。

【讨论】:

    猜你喜欢
    • 2019-10-10
    • 2019-06-26
    • 1970-01-01
    • 2019-08-20
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    • 2013-01-29
    • 2011-03-28
    相关资源
    最近更新 更多