相互排除 Python 中的参数

Mutually excluding arguments in Python

定义依赖于互斥参数的函数的最佳方法是什么,即我一次只需要指定一个参数的一组参数。一个简单的例子是将物理参数作为输入的函数,比如频率。现在我希望用户能够直接指定频率或波长,这样他们就可以平等地调用

func(freq=10)
func(wavelen=1).

一个选项是 kwargs,但是否有更好的方法(例如关于文档字符串)?

假设所有可能的参数名称都是已知的,使用默认值 None 怎么样?

def func(freq=None, wavelen=None):
   if freq:
       print(freq)
   elif wavelen:
       print(wavelen)

使用 elif 您可以优先考虑哪个参数更重要并首先考虑。如果给出了多个参数,您还可以使用 xor:

将代码写入 return 错误
def func(freq=None, wavelen=None):
   if not(freq ^ wavelen):
       raise Exception("More than one argument was passed")
   if freq:
       print(freq)
   elif wavelen:
       print(wavelen)




既然计算会有所不同,为什么不把函数名的那部分写成两个不同的函数(而不是一堆ifs):

def funcWavelen(w):
    ...

def funcFreq(f):
    ...