[PYTHON] Augmentez la visibilité de la source avec des conseils de type

Qu'est-ce qu'un indice de type?

Avec les indicateurs de type, vous pouvez définir des types d'arguments et de valeurs de retour dans votre programme et les coder comme s'il s'agissait d'un langage à typage statique. Les conseils de type sont traités comme des méta-informations et n'affectent pas le programme en cours d'exécution.

En gros, vous n'écrivez pas de types en python. C'est parce que python est un langage typé dynamiquement. Le typage dynamique signifie que python détermine le type et sélectionne le type approprié lorsque le programme est exécuté. Â Typage statique: déterminez le type au moment de la compilation. Le langage cible est C ou Java.

Objectif de l'utilisation des indices de type

Meilleure visibilité du code source

Bien que python ait également le concept de types, vous pouvez écrire des programmes sans connaître les types. Cependant, si vous écrivez un programme sans connaître le type, il est difficile de remarquer que la structure de données est manquante ou que le contenu de traitement est incorrect. Il est difficile d'identifier la cause même si une erreur inattendue se produit pendant l'exécution. Même dans les revues, il est difficile de transmettre l'essence et le but du programme créé à des tiers.

En utilisant des indices de type, les arguments des classes et des fonctions deviennent plus clairs. Cela facilite la transmission de l'intention du programme. Plus il y a de fichiers source, plus c'est efficace.

Amélioration de l'efficacité du développement

Lors de l'examen du programme avec help (), le conseil de type donné peut être affiché.

nohint.py



#Il y a une valeur de retour
def getword(name, age):
    return f"je{name}est.{age}歳est."

#Aucune valeur de retour
def outputword(name, age):
    print(f"je{name}est.{age}歳est.")

if __name__ == "__main__":
    print(getword("Tester Taro", 30))
    outputword("Testez Hanako", 25)

$ python
Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 23:11:46) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import nohint
>>> help(nohint)
Help on module nohint:

NAME
    nohint - #Il y a une valeur de retour

FUNCTIONS
    getword(name, age)
        #Il y a une valeur de retour

    outputword(name, age)
        #Aucune valeur de retour

FILE
    c:\users\xxx\documents\nohint.py

hintbase.py


from typing import NoReturn

#Il y a une valeur de retour
def getword(name : str, age : int) -> str:
    return f"je{name}est.{age}歳est."

#Aucune valeur de retour
def outputword1(name : str, age : int):
    print(f"je{name}est.{age}歳est.")

#Aucune valeur de retour
def outputword2(name : str, age : int) -> None:
    print(f"je{name}est.{age}歳est.")

#Aucune valeur de retour
def outputword3(name : str, age : int) -> NoReturn:
    print(f"je{name}est.{age}歳est.")

if __name__ == "__main__":
    print(getword("Tester Taro", 30))
    outputword1("Testez Hanako", 23)
    outputword2("Tester Manako", 24)
    outputword3("Tester Yamako", 25)

$ python
Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 23:11:46) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import hintbase
>>> help(hintbase)
Help on module hintbase:

NAME
    hintbase

FUNCTIONS
    getword(name: str, age: int) -> str
        #Il y a une valeur de retour

    outputword1(name: str, age: int)
        #Aucune valeur de retour

    outputword2(name: str, age: int) -> None
        #Aucune valeur de retour

    outputword3(name: str, age: int) -> NoReturn
        #Aucune valeur de retour

DATA
    NoReturn = typing.NoReturn

FILE
    c:\users\xxx\documents\hintbase.py

Pour utiliser des conseils de saisie

typing est un module ajouté dans python3.5, vous pouvez donc l'utiliser depuis le début. tapant officiel

Comment écrire des indices de type

syntaxe

nom de la fonction def(Nom de l'argument:Moule, Nom de l'argument:Moule, ...) ->Type de retour:

Écrivez le nom du type avec deux points après le nom de l'argument. S'il y a plusieurs arguments, séparez-les par une virgule. S'il n'y a pas de valeur de retour, utilisez "None" ou "NoReturn". Le -> type de retour peut être omis. Si vous souhaitez utiliser NoReturn, vous devez l'importer à partir de la saisie.

hint-base.py


from typing import NoReturn

#Il y a une valeur de retour
def getword(name : str, age : int) -> str:
    return f"je{name}est.{age}歳est."

#Aucune valeur de retour
def outputword1(name : str, age : int):
    print(f"je{name}est.{age}歳est.")

#Aucune valeur de retour
def outputword2(name : str, age : int) -> None:
    print(f"je{name}est.{age}歳est.")

#Aucune valeur de retour
def outputword3(name : str, age : int) -> NoReturn:
    print(f"je{name}est.{age}歳est.")

if __name__ == "__main__":
    print(getword("Tester Taro", 30))
    outputword1("Testez Hanako", 23)
    outputword2("Tester Manako", 24)
    outputword3("Tester Yamako", 25)

$ python hint-base.py
Je suis Test Taro. 30 ans.
Je suis un test Hanako. J'ai 23 ans.
Je suis un manako de test. J'ai 24 ans.
Je suis Test Yamako. J'ai 25 ans.

Pour les cours faits maison

Dans la méthode de votre propre classe, le premier argument est «self», mais «self» ne nécessite pas d'indication de type. La même chose s'applique aux méthodes de classe, et aucune indication de type n'est requise pour le premier argument cls.

hint-class.py


from typing import Type, NoReturn

class Words:

    #constructeur
    def __init__(self, name : str, age : int):
        self.name = name
        self.age = age

    #Il y a une valeur de retour
    def getword(self) -> str:
        return f"je{self.name}est.{self.age}歳est."

    #Aucune valeur de retour
    def setword(self, name : str, age : int) -> NoReturn:
        self.name = name
        self.age = age

if __name__ == "__main__":
    words = Words("Tester Taro", 30)
    print(words.getword())
    words.setword("Testez Hanako", 23)
    print(words.getword())

$ python hint-class.py
Je suis Test Taro. 30 ans.
Je suis un test Hanako. J'ai 23 ans.

Recommended Posts

Augmentez la visibilité de la source avec des conseils de type
Essayez les astuces de saisie
Je voulais aussi vérifier les indices de type avec numpy
[Français] PEP 0484 - Conseils de type
Formater la source du langage C avec pycparser