Ich habe eine Funktion mit einer langen Liste von Argumenten definiert. Die Gesamtzahl der Zeichen in der Definition liegt über 80 und entspricht nicht PEP8.
def my_function(argument_one, argument_two, argument_three, argument_four, argument_five):
Was kann der beste Ansatz sein, um horizontales Scrollen zu vermeiden?
Antworten:
Ein Beispiel finden Sie in PEP 8:
class Rectangle(Blob): def __init__(self, width, height, color='black', emphasis=None, highlight=0):
Das ist also die offizielle Antwort. Persönlich verabscheue ich diesen Ansatz, bei dem Fortsetzungslinien führende Leerzeichen haben, die keiner echten Einrückungsstufe entsprechen. Mein Ansatz wäre:
class Rectangle(Blob): def __init__( self, width, height, color='black', emphasis=None, highlight=0 ):
. . . oder lassen Sie die Zeile einfach über 80 Zeichen laufen.
quelle
Für Python-Code, der Typanmerkungen verwendet , empfehle ich Folgendes:
def some_func( foo: str, bar: str = 'default_string', qux: Optional[str] = None, qui: Optional[int] = None, ) -> List[str]: """ This is an example function. """ print(foo) ...
Wenn Sie yapf verwenden , können Sie diese Optionen verwenden in
.style.yapf
:quelle
Persönlich habe ich mir auch die gleiche Lösung ausgedacht wie @BrenBarns zweiter Stil. Ich mag seine Art, die Einrückung von Funktionsparametern UND deren Implementierung richtig darzustellen, obwohl dieses "unglückliche Gesicht" für einige andere Menschen etwas ungewöhnlich ist.
Heutzutage gibt PEP8 speziell ein Beispiel für einen solchen Fall. Vielleicht wird der Mainstream diesen Stil anpassen:
# More indentation included to distinguish this from the rest. def long_function_name( var_one, var_two, var_three, var_four): print(var_one)
quelle
def my_function(argument_one, argument_two, argument_three, argument_four, argument_five):
quelle
1. Was ich empfehlen würde
Obwohl es die Funktion für mehr als ein Argument ausführlicher macht , denke ich, dass dies am besten ist - das folgende Beispiel stammt von
Python
-:def my_function( argument_one, argument_two, argument_three, argument_four, argument_five, ): ...
2. Warum?
git diff
s zu verwenden , da das Ändern einer Variablen nur diese Änderung anzeigt. Wenn Sie mehr als ein Argument in jeder Zeile haben, wird es später visuell ärgerlicher.git diff
später ein besseres ergibt .JavaScript
und sehr verbreitetDart
.3. Wie auch immer ...
Eine gute Konvention ist besser als eine schlechte, aber es ist viel wichtiger, eine durchzusetzen, als unnötig wählerisch zu sein .
Wenn Sie sich für die Verwendung eines Standards entschieden haben, teilen Sie Ihre Entscheidung Ihren Kollegen mit und verwenden Sie einen automatisierten Formatierer. Zum Beispiel ist Prettier eine beliebte Wahl für
JavaScript
inVS Code
; und dieDart
Sprache hat eine weltweit standardisiert:dartfmt
- um sie konsequent durchzusetzen und den Bedarf an manueller Bearbeitung zu verringern.quelle
Ich finde mich so ziemlich interessant:
def my_function( argument_one, argument_two, argument_three, argument_four, argument_five ): ...
Es ermöglicht das Falten von Code, um die Funktionssignaturen ganz einfach zu enthüllen. Betrachten Sie beispielsweise das folgende Snippet:
def my_function( argument_one, argument_two, argument_three, argument_four, argument_five ): s1 = 1 s2 = 2 if s1 + s2: s3 = 3 def my_other_function(argument_one, argument_two, argument_three): s1 = 1 s2 = 2 if s1 + s2: s3 = 3
Auf diese Weise können Sie die gesamte Datei mit einem Code falten und alle Funktionen / Signaturen gleichzeitig anzeigen, dh:
quelle
Ich persönlich mag es, die Parameter einzeln pro Zeile anzuordnen, beginnend mit den offenen Klammern und unter Beibehaltung dieses Einzugs.
flake8
scheint auch damit zufrieden zu sein.def guess_device_type(device_name: str, username: str=app.config['KEY_TACACS_USER'], password: str=app.config['KEY_TACACS_PASS'], command: str='show version') -> str: """Get a device_type string for netmiko"""
quelle
command
werden falsche Diff-Linien erzeugt. 3) Das Eingeben des Funktionsblocks ist ein Dedent (dies ist nicht intuitiv, da in Python das Einrücken normalerweise einen Block beginnt).black
meinen Code Autoformat.