Python 中的参数排序约定是什么?

What are the conventions for ordering parameters in Python?

Python 中参数的排序约定是什么?例如,

def plot_graph(G, filename, ...)

# OR

def plot_graph(filename, G, ...)

PEP 0008 -- Style Guide for Python Code | Python.org

没有讨论

摘自Conventions for order of parameters in a function,

的回答

If a language allows passing a hash/map/associative array as a single parameter, try to opt for passing that. This is especially useful for methods with >=3 parameters, ESPECIALLY when those same parameters will be passed to nested function calls.

def plot_graph(graph=None, filename=None, ...)一样把每个参数都转成键值对是不是很极端?

只使用关键字参数并不极端。我在许多代码库中都看到过这一点。这允许您扩展功能(通过向您的函数添加新的关键字参数)而不会破坏您以前的代码。它使用起来可能会稍微乏味一些,但绝对更容易维护和扩展。

另请参阅 PEP 3102 -- Keyword-Only Arguments,这是一种在 python 3.

中强制使用关键字参数的方法

确实没有排序约定 function parameters,除了一个限制,即位置非默认参数必须在默认参数之前,然后才是关键字参数,即 def func(pos_1, pos_n, pos_1_w_default='default_val', pos_n_w_default='default_val', *args, kw_1, kw_n, kw_1_w_default='default_val', kw_n_w_default='default_val', **kwargs).

通常您会根据参数对函数的含义来逻辑地定义参数顺序,例如如果你定义一个做减法的函数,这是合乎逻辑的,被减数应该是第一个参数,减数应该是第二个。在这种情况下,倒序是可能的,但这不合逻辑。

此外,如果您认为您的函数可能会被使用 partially,那可能会影响您对参数排序的决定。

您需要了解的关于函数参数的大部分内容都在 official tutorial

P.S。关于您使用图形函数的特定示例...考虑到您的函数名称,它用于显示图形,因此必须提供 graph 作为参数,否则没有任何内容可显示,因此 graph=None 通过默认值没有多大意义。