Avec PEP8 et PEP257, un codage Python qui n'est pas gênant à montrer aux gens!

introduction

Bonjour. Immédiatement, le code source que vous avez écrit est-il facile à lire?

Il existe de nombreuses opportunités pour des personnes autres que vous-même de voir le code que vous écrivez, par exemple lors du co-développement avec plusieurs personnes, de sa publication sur Internet ou de sa diffusion. Si le code que vous écrivez à de tels moments est bien formaté, vous serez en mesure de le comprendre rapidement sans aucun malentendu, non seulement pour le lecteur mais aussi pour réviser votre propre code.

Dans de tels cas, les conventions utilisées pour formater le code Python sont ** PEP 8 ** et ** PEP 257 **.

Cet article ne suit pas strictement le contenu de PEP 8 et PEP 257, mais présente quelques règles typiques qui peuvent être comprises avec désinvolture et obtenir l'apparence minimale **. Faire.

Shebang, commentaire magique

#!/usr/bin/env python
# -*- coding: utf-8 -*-

Tout d'abord, cela est souvent écrit au début du code. La première ligne est ** Shiban (Sheban) ** et la deuxième ligne est appelée ** Magic Comment **.

** Shiban ** décrit quelque chose comme "Veuillez exécuter ce fichier avec ce programme".

En écrivant ceci, lorsque vous souhaitez exécuter ce code (temporairement nommé sample.py),

$ python sample.py

ne pas

$ ./sample.py

Vous pourrez l'exécuter avec la commande de.

Vient ensuite ** Magic Comment **, qui selon PEP8 n'est ** pas obligatoire ** s'il s'agit de code source Python3 et écrit en UTF-8.

Le commentaire magique décrit l'encodage de caractères du code écrit, et il semble qu'il ne devrait pas être décrit car le code de caractère par défaut dans Python 3 est UTF-8.

déclaration d'importation

Il existe trois règles principales pour les instructions d'importation.

# OK
import os
import sys

# NG
import sys, os
from sklearn.model_selection import GridSearchCV, train_test_split
import os
import sys

from sklearn.model_selection import GridSearchCV, train_test_split

from mypackage import sample

Docstring

Une description de la fonction ou de la classe définie. C'est beaucoup de travail à décrire, mais cela semble différent avec et sans.

def my_func(x):
    """
Renvoie la valeur au carré.

    Parameters
    ----------
    x : int
Valeur entière cible

    Returns
    -------
    y : int
Valeur au carré d'entrée
    """
    y = x ** 2
    return y

Mettez la Docstring entre ** 3 doubles guillemets **. La cotation simple est NG. Vous pouvez écrire le contenu après la ligne avec des guillemets doubles.

#C'est aussi OK
def my_func_hoge(x):
    """Renvoie la valeur au carré.

    Parameters
    ----------
    x : int
Valeur entière cible

    Returns
    -------
    y : int
Valeur au carré d'entrée
    """
    y = x ** 2
    return y


#Écrivons au moins un résumé.
def my_func_fuga(x):
    """Renvoie la valeur au carré."""
    y = x ** 2
    return y

Sur la première ligne, écrivez un résumé de la fonction ou de la classe cible. En guise de mise en garde, assurez-vous que le dernier caractère est un point demi-largeur **.

Après le résumé, insérez une ligne vide pour énumérer les arguments, et après l'argument, insérez une ligne vide pour énumérer les valeurs de retour.

Il semble qu'il y ait des choses qui sont bonnes avec Jupyter etc. si vous écrivez ceci, mais l'explication ici est omise.

Retrait

C'est ce qu'on appelle l'abaissement. Utilisez ** 4 espaces ** au lieu de tabulations. Cependant, lors de l'utilisation de tensorflow, le retrait a tendance à être profond, donc deux espaces sont acceptables.

#Si l'argument de la fonction devient long, la ligne saute selon la position de parenthèse gauche.
a = long_name_function(hikisu_ichi, hikisu_ni,
                       hikisu_san, hikisu_yon)

#Réduisez le retrait et commencez une nouvelle ligne
b = long_name_function(
    hikisu_ichi, hikisu_ni,
    hikisu_san, hikisu_yon)

#Les sauts de ligne avec un retrait abaissé à partir du milieu sont NG
c = long_name_function(hikisu_ichi, hikisu_ni,
    hikisu_san, hikisu_yon)

Pause dans les formules longues

#Il est OK s'il est unifié de casser avant ou après la formule
result_1 = (sushiki_ichi
            + sushiki_ni
            - (sushiki_san - susiki_yon)
            - susiki_go)

result_2 = (sushiki_ichi +
            sushiki_ni -
            (sushiki_san - susiki_yon) -
            susiki_go)

Interligne

En principe, laissez deux lignes au niveau supérieur, c'est-à-dire des sauts de ligne sans retrait, et une ou moins de lignes dans le cas contraire.

S'il faut ouvrir un espace dans la ligne

# OK
hoge = {'fuga': [0]}

# NG
hoge = { 'fuga': [ 0 ] }
# OK
if a == b:
    c = {'d': 1}

# NG
if a == b :
    c = {'d' : 1}

#L'exception est le deux-points utilisé pour le tranchage
array[2:5]
a = i + 1
b = c >= d
e = f not in g_list
h = j and k

#Cependant, il est utilisé pour décrire les paramètres par défaut dans les fonctions, etc.=Ne laissez pas d'espace des deux côtés
def hoge(piyo=None):
    pass

#Utilisé pour décrire les arguments lors de la spécification des mots-clés de fonction=Ne laissez pas d'espace des deux côtés
piyopiyo = hoge(piyo=1)
x = (b + (b**2 - 4*a*c) ** 0.5) / (-2*a)

Résumé

Comment était-ce? Cette fois, je n'ai pas couvert tous les PEP 8 et PEP 257, mais j'espère que vous comprendrez approximativement le type de points auxquels vous devriez prêter attention.

Je serais très heureux si vous lisiez cet article et que vous souhaitiez poursuivre un codage lisible et beau.

référence

Recommended Posts

Avec PEP8 et PEP257, un codage Python qui n'est pas gênant à montrer aux gens!
Conforme à la norme de codage Python PEP8
Fractal pour faire et jouer avec Python
Comment utiliser is et == en Python
J'ai essayé de mettre en œuvre un apprentissage en profondeur qui n'est pas profond avec uniquement NumPy
Lisez le fichier CSV avec Python et convertissez-le en DataFrame tel quel
Grattage de la nourriture avec python et sortie en CSV
MessagePack-Try pour lier Java et Python avec RPC
Le journal Python n'est pas sorti avec docker-compose up
Construire un environnement conforme à la norme de codage Python (PEP8) avec Eclipse + PyDev
Que comparez-vous avec Python et ==?
[Python] Mention à plusieurs personnes avec l'API de Slack
Utilisez Ruby et Python pour trouver la probabilité qu'une carte avec un nombre naturel de 1 à 100 soit un multiple de 3 et non un multiple de 5.
Il est facile d'exécuter SQL avec Python et de générer le résultat dans Excel
Je veux gérer l'optimisation avec python et cplex
Notez qu'écrire comme ça avec ruby c'est écrire comme ça avec python
Essayez le fonctionnement de la base de données avec Python et visualisez avec d3
Ce n'est pas facile d'écrire Python, c'est facile d'écrire numpy et scipy
[Python] tkinter Code susceptible d'être réutilisé
[Python] Comment écrire une docstring conforme à PEP8
[Python] pandas Code susceptible d'être réutilisé
Lors de l'écriture dans un fichier csv avec python, une histoire que j'ai fait une légère erreur et n'a pas respecté la date de livraison
Feuille de route d'apprentissage qui vous permet de développer et de publier des services à partir de zéro avec Python
[Python] Qu'est-ce qu'un tuple? Explique comment utiliser sans toucher et comment l'utiliser avec des exemples.
[VLC] Comment gérer le problème de ne pas être au premier plan pendant la lecture
API Nifty Cloud facile à utiliser avec botocore et python
Après tout, il est faux de chat avec le sous-processus python.
Comment tester cette exception est déclenchée dans python unittest
écran et écran partagé avec connexion python et ssh au serveur distant
Générez un mot de passe facile à retenir avec apg
[Python] Comment jouer avec les variables de classe avec décorateur et métaclasse
Comment se connecter à diverses bases de données à partir de Python (PEP 249) et SQL Alchemy
[Introduction à l'application Udemy Python3 +] 36. Utilisation de In et Not
Conseils pour coder courts et faciles à lire en Python
Essayez d'ouvrir une sous-fenêtre avec PyQt5 et Python
[Jouons avec Python] Traitement d'image en monochrome et points
Comment écrire une classe méta qui prend en charge à la fois python2 et python3
Convertir une vidéo en noir et blanc avec ffmpeg + python + opencv
J'ai essayé de créer une interface graphique à trois yeux côte à côte avec Python et Tkinter
Je souhaite générer une sortie lors de la conversion de la valeur du type (par exemple, datetime) qui n'est pas pris en charge lors de la sortie de json avec python
L'histoire de la définition de la clé privée à 600 avec chmod
Obtenez des données supplémentaires vers LDAP avec python (Writer et Reader)
Comment se connecter à AtCoder avec Python et soumettre automatiquement
Résumé des modules qui automatisent et facilitent l'installation de WebDriver avec Python
On m'a dit que je ne pouvais pas trouver XML_SetHashSalt lorsque j'ai essayé d'utiliser pip avec python.
Comment gérer le problème du déplacement du répertoire actuel lorsque Python est exécuté depuis Atom
[Python] Qu'est-ce que pip? Expliquez la liste des commandes et comment l'utiliser avec des exemples réels
J'ai été surpris de savoir comment enregistrer des objets avec python, qui est léger et très économe en énergie.
NameError: le nom global'dot_parser 'n'est pas défini et que faire quand il apparaît en python
Programmation avec Python et Tkinter
Chiffrement et déchiffrement avec Python
Le rond de Python n'est pas strictement rond
Python et matériel - Utilisation de RS232C avec Python -
Connectez-vous à Wikipedia avec Python
Publiez sur Slack avec Python 3
La liste Python n'est pas une liste