La base de python décoré avec une fonction partielle

Tout d'abord, décorateur

1.1 Vue d'ensemble

Une addition dynamique du code en mode exécution, appelé le « décorateur » (le décorateur)

Décorateur est en fait une fermeture, la fonction retourne une fonction comme une version de remplacement de la fonction, est essentiellement une fonction qui renvoie des fonctions d'ordre supérieur

1.2 décorateur simple,

La fonction peut aussi être un objet, et la fonction d'objet peut être affecté à des variables, donc par des variables peuvent également appeler la fonction

def now():
    ptint("2018-3-18")

f = now
f()

Il est un objet de fonction _NAME_ propriété, vous pouvez obtenir le nom de la fonction:

def now():
    print("2018-4-3")

f = now
f()
print(now.__name__)
print(f.__name__)
#结果
'now'
'now'

Maintenant, nous devons améliorer les fonctions de fonction maintenant (), comme l'impression pendant un certain temps avant que la fonction est appelée délimiteurs.

def log(func):
    def wrapper():
        print("**********")
        return func()
    return wrapper

def now():
    print("2018-3-18")

#装饰器的调用
f = log(now)
f()
1.3 décorateurs complexes

Exigences: Entrez l'âge et l'imprimer

def getAge(age):
    print("Tom age is %d"%age)
getAge(10)

#调用getAge方法得到年龄,但是如果输入的是负数就会得到不符合常理的结果
getAge(-10)

def wrapper(func):
    def inner(num):
        if num < 0:
            num = 0
        return func(num)
    return inner
newGetAge = wrapper(getAge)
newGetAge(-10)

De cette façon, notre code devient plus simple, les contrôles aux limites logiques isolés dans des processus séparés, et le dossier de demande par les décorateurs mode de réalisation où nous devons vérifier.

Un autre but de la voie par le début de la méthode de calcul et les déclarations d'appel de méthode avant que la valeur limite peut être vérifiée dans le même but, mais ne sont pas réduits à néant, le décorateur nous permet d'obtenir le moins de contrôle des coordonnées des codes .

1,4 décorateur @ identificateur

Utiliser @ identifiant est appliqué à la fonction décorative

python2.4 et support au-dessus de l'utilisation d'identifiants @ applications décoratives sur la fonction, juste avant la définition des fonctions requises par le nom de @ et décorateurs

def logger(func):
    def inner(*args,**kwargs):
        print("***********")
        return func(*args, **kwargs)
    return inner

@logger
def myPrint():
    print("you are very good")

myPrint()

Note: Par exemple, dans le processus de développement réel de la société, s'il y a quelqu'un d'autre pour écrire une fonction que vous souhaitez ajouter ou modifier certaines fonctions auxquelles certaines fonctions, tandis que d'autres vous demandent de ne pas à modifier arbitrairement la fonction des autres, à ce moment, vous pouvez en utilisant décorateur, sans modifier le code source d'autres personnes peuvent également ajouter vos propres fonctions.

D'autre part, la fonction partielle

Le module functools python fournit de nombreuses fonctions utiles, dont l'une est la fonction partielle (fonction partielle).

Tout simplement la fonction partielle du rôle est de mettre des paramètres à la fonction fixe (qui est, définissez la valeur par défaut), retourne une nouvelle fonction, appeler cette nouvelle fonction sera plus facile.

#functools 模块
import functools
#int()函数将字符串转换为整数,默认按十进制转换
#可以设置进制
print(int("100",base = 2))
#结果为4,100是二进制中4的表示

#类似于偏函数的功能
def int2(str, base=2):
    return int(str, base)
print(int2("10"))

#functools.partical可以帮助创建偏函数,不用自己定义int2函数
#作用:把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新的函数会更简单。
int3 = functools.partial(int, base=2)
print(int3("100"))
#在创建偏函数的时候,实际上固定了关键字参数base
#结果
4

exemple 2

import functools
max2 = functools.partical(max, 10)
#实际上会把10作为*args的一部分自动加到左边
max2(5, 6, 7)
相当于
args =(10, 5, 6, 7)
max(args)

exercice:

Conception de l'ajout d'une fonction partielle, en utilisant add () lorsque les besoins de l'opérateur au module d'importation nécessite la fonction partielle est la fonction, trouver un certain nombre de 100 et ajouté.

portée à trois variables

3.1 Vue d'ensemble

programme en cours en python, créer, modifier, le temps de trouver le nom variable, les noms de variables sont stockés dans un espace que nous appelons l'espace de noms, également connu sous le nom portée.

En termes simples, la portée variable fait référence à la gamme de variables qui peuvent être utilisées

Les variables ne peuvent pas accéder au programme en tout lieu, l'accès dépend de l'endroit où la variable est affectée.

3.2 Champ d'application de la division

L (local) portée locale

Les variables locales: mot-clé def est inclus dans un bloc d'instructions tel que défini dans la variable qui est définie dans la fonction, chaque fois que la fonction est appelée crée une nouvelle portée locale.

Remarque: Si vous devez assigner des variables globales dans une fonction, déclarer la variable comme variables globales dans la fonction par l'instruction globale

E (encaissantes) portées imbriquées

champ d'application de la fonction également connu, la fonction de fermeture extérieur dans la fonction

G (global) portée mondiale

Les variables définies dans le niveau du module, chaque module est une portée globale

Note: La portée de la portée mondiale est limitée dans un seul module de fichier

B (intégré) portée construit

La fixation du module au sein du système des variables définies, telles que dans un module de commande interne prédéfinie.

#查看所有的内置变量
print(vars())
3.3 Résolution Nom de la variable loi LEGB

Les noms de variables de recherche prioritaires: variable locale> champs d'application imbriquée> portée globale> intégré Portée

règle LEGB :

Lorsque vous utilisez un nom variable en fonction indéterminée, python sera suivi par quatre champs d'application de recherche en fonction des priorités, et ainsi de déterminer l'importance des noms de variables.

Premières recherches portée locale (L), suivi par les portées imbriquées def ou fonctions lambda dans une couche de structure imbriquée (E), suivi de portée mondiale (G), et les champs finalement construit (B) .

Selon ce principe pour trouver, en premier lieu trouvé à l'arrêt, et si aucune ne trouve, l'erreur se produit NameError

def func():
    var = 300
    print("var",var)
var = 100
func()
print("var", var)
#结果
300
100
3.4 Mot mondial
#声明全局变量
global var

var = 200
def func():
    # var = 200
    print("var_", var)
    def fun():
        var = 100
        print("var", var)
    fun()
func()

Remarque: python seul module (Module1), classe (classe) et une fonction (def, lambda) avant d'introduire un nouveau champ d'application, d'autres blocs de code, comme if / else, try / except, pour / tout comme ne sont pas l'introduction de nouvelles possibilités, que les définitions de variables de ces déclarations peuvent également être utilisés à l'extérieur.

if 1:
    num = 10
print(num)
Publié 31 articles originaux · louange won 4 · Vues 3518

Je suppose que tu aimes

Origine blog.csdn.net/qq_29074261/article/details/80016724
conseillé
Classement