定义依赖于相互排除的参数的函数的最佳方法是什么,即一次只需要指定一个参数的参数集。一个简单的例子是一个函数,它以一个物理参数作为输入,比如频率。现在我希望用户能够直接指定频率或波长,这样他们就可以同样地调用。
func(freq=10)
func(wavelen=1).
一种选择是kwargs,但是是否有更好的方法(例如,关于docstring)?
发布于 2022-01-02 13:32:01
假设所有可能的参数名称都已知,那么使用默认的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)
发布于 2022-01-02 13:37:59
既然计算将是不同的,那么为什么不将函数名称的这一部分设置为两个不同的函数(而不是一组ifs):
def funcWavelen(w):
...
def funcFreq(f):
...
https://stackoverflow.com/questions/70556319
复制相似问题