如果在 python 方法调用中参数为 None,则使用默认参数

新手上路,请多包涵

有点奇怪的问题,但我在编码时偶然发现了这个问题。

这是我的代码

编辑: 我添加了类以使我的结构更清晰

class Hidden(object):
    def x(self, aa, bb="John Doe"):
        print aa, bb

class Open(object):
    def __init__(self):
        self.h = Hidden()

    def y(self, a, b=None):
        # get rid of this if-else-foo
        if b is None:
            self.h.x(a)
        else:
            self.h.x(a, b)

o = Open()
o.y("Hello") # > Hello John Doe

o.y("Hello", "Mister X") # > Hello Mister X

如果 bNone (未设置),我希望方法 x 在没有参数的情况下被调用(使用默认值)。

我想知道是否有办法摆脱 if-else foo?

解决方案

因为我只能接受一个答案,所以我可以说,所有列出的解决方案都有效。

这是我对给定答案的总结:

  1. @Duncan:对我来说,这是实现我想要的最好的方式。
  2. @falsetru:这也是一个不错的方法,尽管我认为带有 *args 的方法很难阅读。
  3. @peter-wood 和@tgg:两个版本都可以工作并节省 3 行代码。但是 if 语句仍然存在,我想避免这种情况。

原文由 ppasler 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 558
2 个回答

从你更新的课程问题来看,简单的方法就是别名 self.h.x as y

 class Open(object):
    def __init__(self):
        self.h = Hidden()
        self.y = self.h.x

现在当你调用 o.y(...) 你实际上只是在调用 Hidden.x

 o = Open()
o.y("Hello") # > Hello John Doe

o.y("Hello", "Mister X") # > Hello Mister X

原文由 Duncan 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您可以修改 x

 def x(a, b=None):
    b = "John Doe" if b is None else b
    print a, b

原文由 Peter Wood 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题