Analyse approfondie de Python--Fonction Currying

零到壹度
Libérer: 2018-04-19 16:08:47
original
2157 Les gens l'ont consulté

L'exemple de cet article décrit une analyse approfondie de la fonction Python--Currying. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

1. Définition :

1) Il s'agit de changer la fonction d'origine qui accepte deux paramètres en une nouvelle qui accepte un processus de fonction de paramètre. La nouvelle fonction renvoie une fonction avec le deuxième paramètre d'origine comme paramètre

2) Exemple : Currying de la fonction d'addition : La méthode consiste à convertir la fonction en fonction Currying par imbrication.

def add(x,y):
    return x + y
def add(x):
    def _add(y):
        return x + y
    return _add
Copier après la connexion

2. Application :

Condition requise :

Une fonction d'ajout Je souhaite améliorer sa fonction et pouvoir sortir le paramètre appelé et appelé. information. .

def add(x,y):
    return x + y
Copier après la connexion

Nous ajoutons maintenant la fonction de sortie d'informations

def add(x,y):
    print('call add,x + y')  #log output to the console
    return x + y
Copier après la connexion

Bien que la fonction d'ajout ci-dessus remplisse les exigences, elle présente les trois inconvénients suivants :

1. Imprimer déclaration Le degré de couplage est trop élevé.

2. La fonction d'addition appartient à la fonction commerciale, et la fonction de sortie d'informations peut appartenir au code de fonction non commerciale et ne doit pas être placée dans l'ajout de fonction commerciale.

Ensuite, nous apportons les améliorations suivantes :

def add(x,y):
    return x + y
def logger(fn):
    print('begin')  #enhanced output
    x = fn(4,5)
    print('end')    #enhanced features
    return x
print(logger(add))
Copier après la connexion

Les améliorations ci-dessus réalisent la séparation des fonctions métier, mais la transmission de paramètres dans l'appel de fonction fn est un problème. Nous voulons transmettre des paramètres de manière flexible, mais les paramètres sont dans la fonction interne. Comment utiliser le langage flexible Python pour résoudre ce problème ?

def add(x,y):
    return x + y
def logger(fn):
    def _logger(*args,**kwargs):
        print('begin')
        c = fn(*args,**kwargs)
        print('end')
        return c
    return _logger
logger(add)(2,3)
Copier après la connexion

Maintenant, nous pouvons saisir les paramètres de manière flexible

Quelques exemples plus spécifiques sont donnés ci-dessous :

def ad1(m,n,*,l=909):
    return m + n + l
def loger(fn,*args,**kwargs):
    print('What\'s the matter?')
    ret = fn(*args,**kwargs)
    return ret
print(loger(ad1,2,3,l=4))   #Can you currying them?
Copier après la connexion
def add(x,y,*,z=9):
    return x + y + z
def logger(fn,*args,**kwargs):
    print('This is a stupid function')
    ret = fn(*args,**kwargs)  #after collections it needs to be deconstructed
    return ret
print(logger(add,2,4,z=17))
Copier après la connexion
def ad1(m,n,*,l=909):
    return m + n + l
def loger(fn):
    def _loger(*args,**kwargs):   #append a function as wrapper
        print('What\'s the matter?')    
        ret = fn(*args,**kwargs)   #the function which is be wrapped and transfer args and kwargs
        return ret
    return _loger
#print(loger(ad1)(2,3,l=4))  also okay
t = loger(ad1)  #defind the function loger
r = t(2,3,l=4)  # income parameters and transfer it
print(r)
Copier après la connexion

Trois, résumé :

Après avoir appris le Currying, les connaissances les plus importantes et essentielles en python nous attendront - Décorateur.


Recommandations associées :

currying de la fonction js

Currying dans les expressions fonctionnelles

Portée, currying des fonctions JavaScript

Curry

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!