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