L'affectation de variables est un problème que nous rencontrons souvent dans le développement quotidien.L'article suivant vous présente principalement certains problèmes auxquels il faut prêter attention lors de l'attribution de fonctions à des variables en python.L'article le présente à travers un exemple de code. et a une certaine valeur de référence et d'apprentissage pour tous les amis qui en ont besoin peuvent y jeter un œil ci-dessous.
Préface
Cet article vous présente principalement certains problèmes auxquels il faut prêter attention lors de l'attribution de fonctions à des variables en Python. partagez-les avec vous. Étude de référence, pas grand chose à dire ci-dessous, jetons un œil à l'introduction détaillée :
J'ai vu deux formes d'affectation de fonctions à des variables, l'une est
a=f
L'autre est
a=f()
Il y a une différence entre ces deux formes. Résumons-les respectivement. .
1. Le type a=f pointe les variables vers des fonctions.
Vérifiez-le avec le code :
>>> f = abs >>> f(-10) 10
Explication selon laquelle la variable f pointe désormais vers la fonction abs elle-même. Appeler directement la fonction abs()
revient exactement à appeler la variable f()
. Ceci est un exemple tiré du didacticiel python du professeur Liao Xuefeng. Maintenant, appeler f()
et appeler abs()
sont les mêmes.
Un autre exemple de fonction d'usine :
def maker(N): def action(X): return X**N return action
La valeur de retour externe de cette fonction imbriquée est la valeur interne. nom de la fonction Notez qu'il n'y a pas de parenthèses. Il y a une grande différence qu'il y ait des parenthèses ou non. A ce moment, la fonction externe est appelée :
f=maker(2)
Ensuite, comme mentionné ci-dessus, f pointe vers la fonction d'action, et la condition de restriction est N=2, ce qui peut être compris comme f est N La fonction d'action lorsqu'elle est égale à 2. Appelons-le :
>>> f(3) 9
Prouvez que les fonctions f et action sont identiques.
2. Le type a=f() appartient au processus d'attribution de la valeur de retour de f() à un
A ici reçoit uniquement la valeur de retour de f()
, si f()
n'a pas de valeur de retour, alors a se voit attribuer la valeur Aucune. Une chose à noter ici est que lors de l'exécution de a=f()
, f()
s'exécutera une fois, ce que je viens de comprendre, comme :
>>> def add(x,y): z=x+y print(z) >>>a=add(3,4) 7
Bien que une seule instruction d'affectation est exécutée ici, le résultat 7 est affiché, indiquant que la fonction de processus d'affectation add est exécutée. Cependant, la valeur de a est None et ne peut être affichée que via l'instruction d'impression. Non seulement la fonction de procédure d'affectation sera exécutée, mais également l'instruction return qui y est écrite.
>>>def log(func): def wrapper(*args, **kw): print('call %s():' % func.__name__) return func(*args, **kw) return wrapper >>>@log >>>def now(): print('2015-3-25')
C'est la routine dans la section décorateur du didacticiel Python du professeur Liao Xuefeng. Au début, je pensais que l'instruction return func(*args,**kw)
renvoyait la fonction now()
(. c'est-à-dire la fonction func), il a été découvert plus tard que la fonction now n'a pas de valeur de retour, qui est None, donc en fait, cette instruction est exécutée pendant le processus d'affectation, c'est-à-dire que l'instruction print de la fonction now est exécutée.
Dans l'exercice suivant, une variante consiste à imprimer « début de l'appel » et « fin de l'appel » avant et après l'appel de fonction. Le programme écrit par un internaute ci-dessous ressemble à ceci : func(*args,**kw)
Au début, je n'ai pas bien compris pourquoi la phrase
def wrapper(*args,**kw): print(t+'begin call') result=func(*args,**kw) print(t+'end call') return result
result=func(*args,**kw)
Le résultat est le même.
def wrapper(*args,**kw): print(t+'begin call') func(*args,**kw) print(t+'end call')
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!