Élément de mémo Python efficace 4 Écrire une fonction d'aide au lieu d'une expression compliquée

** Notes sur Python efficace ** Élément 4: Écrire des fonctions d'assistance au lieu d'expressions complexes

** Ecrivez une fonction d'aide car écrire une expression compliquée en une seule phrase réduira la lisibilité ** Si vous en avez envie, python mettra une énorme quantité de syntaxe dans une phrase, mais elle sera très difficile à lire, vous devriez donc fournir une fonction d'aide pour améliorer la lisibilité.

Exemple d'obtention du contenu d'une requête URL

Exemple simple

#Demander des arguments à partir de la requête URL

from urllib.parse import parse_qs
my_values = parse_qs('red=5&blue=0&green=',
                     keep_blank_values=True)
print('red:     ', my_values.get('red'))
print('green:   ', my_values.get('green'))
print('opacity: ', my_values.get('opacity'))

>>>
red:      ['5']
green:    ['']
opacity:  None

⇒ Lorsqu'il n'y a pas de valeur, il vaut mieux unifier à zéro

#Comparez avant et après l'expression à l'aide de l'opérateur ou
red = my_values.get('red', [''])[0] or 0
green = my_values.get('green', [''])[0] or 0
opacity = my_values.get('opacity', [''])[0] or 0
print('red:     %r' % red)
print('green    %r' % green)
print('opacity  %r' % opacity)

>>>
red:     '5'
green    0
opacity  0

J'ai pu le faire, mais c'est difficile à voir. .. .. De plus, il existe des cas où vous souhaitez traiter des nombres avec des formules mathématiques au lieu de chaînes de caractères. Alors enveloppons-le avec int ()!

red = int(my_values.get('red', [''])[0] or 0)
print('red:     %r' % red)

>>>
red:     5

C'est assez difficile à voir. Peu de gens peuvent le comprendre en un coup d'œil. Vous n'avez pas besoin de ranger autant de choses dans une ligne en premier lieu.

Jugons facilement la condition avec if / else

red = my_values.get('red', [''])
red = int(red[0]) if red[0] else 0
print('red:     %r' % red)

>>>
red:     5

C'est un peu soigné, mais la description de la déclaration if n'est pas belle Si vous l'écrivez avec une instruction if stricte

red = my_values.get('red', [''])
if red[0]:
    red = int(red[0])
else:
    red = 0
print('red:      %r' % red)
>>>
red:      5

C'est transmis, mais c'est difficile à revoir.

Écrivons une fonction d'assistance

def get_first_int(values, key, default=0):
    found = values.get(key,[''])
    if found[0]:
        found = int(found[0])
    else:
        found = default
    return found

red = get_first_int(my_values, 'red')
print('red:     %r' % red)

>>>
red:     5

Résumé

python a beaucoup de descriptions utiles, mais si vous l'utilisez trop, il restera lisible. Écrivez beaucoup de fonctions d'assistance en fonction de la situation.

Recommended Posts

Élément de mémo Python efficace 4 Écrire une fonction d'aide au lieu d'une expression compliquée
Élément de mémoire Python efficace 7 Utilisez la notation d'inclusion de liste au lieu de la carte et du filtre
Élément de mémo Python efficace 3
expression canonique python ou mémo d'objet correspondant
Un mémo que j'ai écrit une fonction de base en Python en utilisant la récurrence
Mémo Python efficace Élément 10 Énumérer à partir de la plage
Un mémo qui a fait un tutoriel pour exécuter python sur heroku
Dessiner un graphique d'une fonction quadratique en Python
Récupérer l'appelant d'une fonction en Python
EP 4 Fonctions d'aide à l'écriture au lieu d'expressions complexes
Mémo connecté à HiveServer2 d'EMR avec python
Comment écrire un type liste / dictionnaire de Python3
[Python] Un mémo pour écrire du CSV verticalement avec Pandas
J'ai essayé d'utiliser Python (3) au lieu d'un calculateur de fonctions
expression lambda de python ...
mémo d'expression régulière python
Comment développer dans un environnement virtuel Python [Memo]
Élément de mémo Python efficace 19 Donner un comportement facultatif aux arguments de mot-clé
Python> Lire à partir d'une chaîne multiligne au lieu d'un fichier> io.StringIO ()
Élément de note Python efficace 16 Envisagez de renvoyer un générateur sans renvoyer une liste
Créer une fonction en Python
Ecrire une fonction de densité du noyau
[python] Valeur de l'objet fonction (?)
[Python] L'origine du nom de la fonction python
[Python] Mémo des phrases fréquemment utilisées dans les scripts Python
Élément de mémo Python efficace 11 Utilisez zip pour traiter les itérateurs en parallèle
J'ai essayé de créer une expression régulière de "montant" en utilisant Python
[Python 3.8 ~] Comment définir intelligemment des fonctions récursives avec des expressions lambda
J'ai essayé de créer une expression régulière de "temps" en utilisant Python
Note Python efficace Item 15 Savoir comment les fermetures sont liées à la portée de la fonction
J'ai essayé de créer une expression régulière de "date" en utilisant Python
Une fonction qui mesure le temps de traitement d'une méthode en python
[Python3] Définition d'un décorateur qui mesure le temps d'exécution d'une fonction
L'idée d'alimenter le fichier de configuration avec un fichier python au lieu de yaml
[Python] Une fonction simple pour trouver les coordonnées du centre d'un cercle