如何使函数参数可选?

时间:2017-11-28 21:07:22

标签: python

例如,我希望能够在函数内部注入行为,但如果我没有行为,我希望它具有默认行为

class TestDefaultParam:
   def defaultBehavior(file1, file2):
      return 2

   def action(file1, file2, behave=defaultBehavior):
      return behave(file1, file2)

if __name__ == '__main__':
   some = TestDefaultParam()
   print(some.action("test", "test"))

如果这不可能,我怎么能随意改变行动的行为?

使用此代码我收到此错误:

    Traceback (most recent call last):
    File ".\test.py", line 10, in <module>
     print(some.action("test", "test"))
    File ".\test.py", line 6, in action
     return behave(file1, file2)
    TypeError: 'str' object is not callable

1 个答案:

答案 0 :(得分:1)

也许this会有所帮助。在你的情况下,

def action(file1, file2, behavior=defaultBehavior):
    return behave(file1, file2)

没关系。但是,当然,如果将参数传递给“behave”参数,您应该在函数中处理它。例如,如果你打电话

action("somefile", "anotherfile", customBehavior)

然后你会想要类似下面的东西来处理它:

def action(file1, file2, behavior=defaultBehavior):

    if behave != defaultBehavior: # this means that behavior was set to something
        behave(file1, file2, behavior)
    else: # in this case, behave == defaultBehavior
        behave(file1, file2)

可以为behave()构建类似的东西。