python可选参数到可选参数验证

python可选参数到可选参数验证,python,Python,在python中,如何验证可选到可选关键字参数 这个问题是我关于可选参数的问题的延伸,(顺便问一下,它有更好的名字吗?) 我们知道可以用这种方式定义可选参数: os.fdopen(fd[,mode[,bufsize]] 因此,如果我通过fdopen(sth,bufsize=16)错误地调用了fdopen,python会指出我必须指定模式来使用bufsize参数 这是如何实现的?如果Elses能够做到这一点,我显然可以写很多东西,但这将导致那些非常复杂的函数的一些真正混乱的代码,例如: 扩展(s

在python中,如何验证可选到可选关键字参数

这个问题是我关于可选参数的问题的延伸,(顺便问一下,它有更好的名字吗?)

我们知道可以用这种方式定义可选参数:

os.fdopen(fd[,mode[,bufsize]]
因此,如果我通过
fdopen(sth,bufsize=16)
错误地调用了
fdopen
,python会指出我必须指定
模式
来使用
bufsize
参数

这是如何实现的?如果Elses能够做到这一点,我显然可以写很多东西,但这将导致那些非常复杂的函数的一些真正混乱的代码,例如:

扩展(src、内核[、dst[、锚点[、迭代[、边界类型[、边界值]]]→ dst
在Python级别没有特定的语法。您必须定义普通的可选参数并自己进行验证


您正在查看的具体案例是用C实现的。根据您所在的平台,C实现是不同的

使用
PyArg\u ParseTuple
意味着此函数实际上不接受任何名称参数。如果您执行os.fdopen(sth,bufsize=16),您将得到一个类型错误:

>>> os.fdopen('', bufsize=16)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: fdopen() takes no keyword arguments
os.fdopen(“”,bufsize=16) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 TypeError:fdopen()不接受关键字参数
请注意,
bufsize
参数不应该依赖于
模式
参数。我认为这个函数可能早于关键字参数,尽管很难确定。关键字参数被添加到Python中,Python.org上最早的Python文档是for,到那时。

Python中没有实际的“可选到可选”,只有可选。其他语义由函数本身实现。由于python提供了许多编程方式来获取arglist、命名参数等,因此可以合理地进行一般编程,而不必求助于一百万个ifs。
>>> os.fdopen('', bufsize=16)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: fdopen() takes no keyword arguments