代码之家  ›  专栏  ›  技术社区  ›  Srikar Appalaraju Tonetel

Python中的可选参数

  •  0
  • Srikar Appalaraju Tonetel  · 技术社区  · 14 年前

    我只是想了解拥有这个功能的原因。或者是一件事可以做很多种方式?

    2 回复  |  直到 14 年前
        1
  •  6
  •   Alex Martelli    14 年前

    可选参数与多态性关系不大(甚至不需要你有类在身边!-)--它只是(主要用途!)你经常会有“很少需要”的论据来证明你的选择是正确的 通常地 以某种方式制造,但是 可以 有助于调用者进行不同的设置。

    例如,考虑内置 open . ,打开文本文件而不是二进制文件,打开它们是为了读取而不是为了写入,并且您对默认的缓冲很满意--所以,您只需 open('thefile.txt') 从此幸福地生活。能够指定 'r' 价值,当然往往是有用的。一旦你想要一个具有特殊缓冲选项的文件对象 然后

    继承和多态性对获得 with open('blah.txt') as f: 因此,简洁地说,虽然仍然允许相同的内置函数服务于更多的用例(例如,当您需要打开一个文件进行二进制追加而不需要任何缓冲。。。如果你经常编写代码,也许一年一次;-)。当然,适用于这些内置函数的便利性原则也适用于这些函数 写得也一样!-)

        2
  •  4
  •   Kevin Jacobs    14 年前

    Python中的可选参数有多种用途,但大多数情况下,它们是一种机制,用于在存在合理且不经常变化的值的情况下提供默认值。例如。:

    def open_http_connection(url, port=80, timeout=2):
      #...
    

    一个微妙的变化是当一个方法的多个行为需要基于所提供的参数,通常使用arity(参数的数量)或关键字参数。

    # Example of arity based optional arguments
    def do_something(*args):
      if not args:
        do_something1()
      elif len(args)==1:
        do_something2(args[0])
      else:
        do_something3(*args)
    

    研究如何在python中指定变量位置参数和关键字参数可能会有所帮助: here .

    这些用于指定可选和可变参数数的方法在语义上不像静态类型的面向对象语言中的方法重载或函数式编程语言中的多种形式的多重分派那样复杂。Python使用动态类型(有时称为 duck typing multi-methods 如果必须的话。)