在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:编写返回错误的代码

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)


既然计算会有所不同,为什么不将这一部分作为函数名,并具有两个不同的函数(而不是一堆if(:

def funcWavelen(w):
    ...
def funcFreq(f):
    ...

最新更新