【问题标题】:Mutually excluding arguments in PythonPython中的相互排除参数
【发布时间】:2022-01-02 13:21:55
【问题描述】:

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

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

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

【问题讨论】:

    标签: python arguments keyword-argument docstring


    【解决方案1】:

    假设所有可能的参数名称都是已知的,那么使用默认值 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)
    
    
    
    
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-17
        • 1970-01-01
        • 2010-10-27
        • 2021-07-16
        • 1970-01-01
        • 1970-01-01
        • 2021-05-13
        • 1970-01-01
        相关资源
        最近更新 更多