2016-03-23 8 views
3

Welche Konventionen gelten für die Anordnung von Parametern in Python? Zum BeispielWelche Konventionen gelten für die Anordnung von Parametern in Python?

def plot_graph(G, filename, ...) 

# OR 

def plot_graph(filename, G, ...) 

Es gibt keine Diskussion in PEP 0008 -- Style Guide for Python Code | Python.org

Auszug aus der Antwort von Conventions for order of parameters in a function,

Wenn eine Sprache eines Hash/map/assoziatives Array als einzelnen Parameter ermöglicht vorbei, versuchen Sie, das zu übergeben. Dies ist besonders nützlich für Methoden mit> = 3 Parametern, BESONDERS wenn diese Parameter an verschachtelte Funktionsaufrufe übergeben werden.

Ist es extrem, jeden Parameter in ein Schlüssel/Wert-Paar zu konvertieren, wie def plot_graph(graph=None, filename=None, ...)?

+1

Es hängt wirklich davon ab, ob Sie einen Standardwert angeben möchten oder ob einige Argumente optional sind. Wenn alle Argumente notwendig sind und Sie Standardwerte angeben, wird es ein Fehler sein, jedes arg zu prüfen, wenn args1 None ist, wenn args2 ist Keine .. das wird hässlich ziemlich schnell werden –

+1

Wie andere erwähnt haben, gibt es keine Konvention und Einschränkung, außer wenn Sie Standardwerte haben, aber ich würde es so machen, dass die Funktionssignatur als ein vollständiger Satz liest. Wie, "Funktion, um ein Diagramm G und Dateiname foo". – Sergey

Antwort

2

Es gibt wirklich keine Konvention function parameters für die Bestellung, mit Ausnahme einer Einschränkung, dass Positions Nicht-Standard-Parameter gehen müssen, bevor Parameter mit Standardwerten und nur dann Schlüsselwortparameter, dh 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).

Normalerweise definieren Sie Parameter logisch basierend auf ihrer Bedeutung für die Funktion, z. Wenn Sie eine Funktion definieren, die eine Subtraktion durchführt, ist es logisch, dass der Minuend der erste Parameter und der Subtrahend der zweite Parameter sein sollte. In diesem Fall ist eine umgekehrte Reihenfolge möglich, aber es ist nicht logisch.

Wenn Sie darüber nachdenken, dass Ihre Funktion möglicherweise partially verwendet wird, könnte dies Ihre Entscheidung über die Parameterreihenfolge beeinflussen.

Die meisten Dinge, die Sie über Funktionsparameter wissen müssen, sind in der official tutorial.

P.S. In Bezug auf Ihr spezielles Beispiel mit Graph-Funktion ... Betrachtet man Ihren Funktionsnamen, wird er zur Darstellung eines Graphen verwendet, so dass ein als Argument bereitgestellt werden muss, ansonsten gibt es nichts anzuzeigen, daher macht graph=None standardmäßig keinen Sinn.

1

Es ist nicht extrem, nur Schlüsselwortargumente zu verwenden. Ich habe das in vielen Codebasen gesehen. Dadurch können Sie die Funktionalität erweitern (indem Sie Ihren Funktionen neue Schlüsselwortargumente hinzufügen), ohne den vorherigen Code zu unterbrechen. Es kann etwas mühsamer zu verwenden sein, aber auf jeden Fall einfacher zu pflegen und zu erweitern.

haben auch einen Blick auf PEP 3102 -- Keyword-Only Arguments, die eine Möglichkeit, die Verwendung von Keyword-Argumente in Python zu zwingen 3.