Heim > Backend-Entwicklung > Python-Tutorial > So verwenden Sie Python-Funktionen

So verwenden Sie Python-Funktionen

WBOY
Freigeben: 2023-05-08 12:07:17
nach vorne
1034 Leute haben es durchsucht

    1. So verwenden Sie eine Funktion: Definieren Sie sie zuerst und rufen Sie sie dann auf. Die Definitionsphase erkennt nur die Syntax und führt den Code nicht aus.

    Die Aufrufphase beginnt mit der Ausführung des Codes.

    Funktionen haben Rückgabewerte ​​

    Beim Definieren und Aufrufen gibt es keine Parameter. Es gibt auch keine Parameter. Beim Definieren gibt es Parameter. Beim Aufruf müssen Parameter vorhanden sein Typen sind nicht betroffen

    3. Namespace und Geltungsbereich

    Namespace wird zum Speichern verwendet. Der Ort, an dem die Speicheradresse des Namens an den Wert gebunden ist (Speicherplatz)

    Bei der Suche nach einem Wert müssen Sie den Namen verwenden und auf ihn zugreifen Name, Sie müssen den Namespace nachschlagen

    Namespaces sind in drei Kategorien unterteilt

    Eingebaute Namespaces: Gespeichert Dies ist der Name, der mit dem Python-Interpreter geliefert wird


    Lebenszyklus: Wird wirksam, wenn der Interpreter gestartet wird. und es wird ungültig, wenn der Interpreter geschlossen wird

    Globaler Namensraum: Es speichert den Namen auf Dateiebene

    Lebenszyklus: Python im Interpreter interpretieren und ausführen Es wird wirksam, wenn die Datei ausgeführt wird, und wird ungültig, nachdem die Datei ausgeführt wurde ausgeführt. Lokaler Namespace: Der innerhalb der Funktion definierte Name wird nur vorübergehend generiert, wenn die Funktion aufgerufen wird ;Global->Lokal

    Die Reihenfolge, in der nach Namen gesucht wird

    Suchen Sie anhand des aktuellen Standorts nach

    Angenommen, Sie befinden sich gerade im Lokalbereich, lautet die Suchreihenfolge: lokal->global-> ; Eingebaut

    Angenommen, Sie befinden sich derzeit in der globalen Welt, lautet die Suchreihenfolge: global-> Die Suchreihenfolge der integrierten

    Namen wurde während der Funktionsdefinitionsphase (d. h. der Suche) festgelegt Die Reihenfolge der Namen wurde bei der Überprüfung der Syntax festgelegt. Sie hat nichts mit der Aufrufposition der Funktion zu tun

    Das heißt, egal wo Sie die Funktion aufrufen, Sie müssen zu der Stelle zurückkehren, an der sich die Funktion befindet wurde ursprünglich definiert, um die Suchbeziehung des Namens zu bestimmenBereich: Bereich bezieht sich auf den Bereich der Funktion

    Globale Wirkung Domäne: Enthält die Namen im integrierten Namespace und im globalen Namespace

    Funktionen: Global gültig, global survivable

    Lokaler Geltungsbereich: Enthält die Namen im lokalen Namespace

    Features: Lokal gültige, temporäre Überlebensfähigkeit

    Global: Deklarieren Sie lokal einen Namen, der aus dem globalen Geltungsbereich stammt, der zum lokalen Ändern des globalen unveränderlichen Typs verwendet werden kann

    Nicht lokal: Deklarieren Sie einen Namen, der aus einem Bereich außerhalb der aktuellen Ebene stammt und lokal verwendet werden kann. Ändern Sie den unveränderlichen Typ der äußeren Funktion

    4. Die Abschlussfunktion wird innerhalb der Funktion definiert und enthält einen Verweis auf den Bereichsnamen Sie müssen das Konzept von Funktionsobjekten kombinieren, um die Abschlussfunktion zur Verwendung in den globalen Bereich zurückzugeben und so die hierarchischen Einschränkungen von Funktionen aufzuheben. Die Abschlussfunktion bietet eine Lösung für die Übergabe von Werten an die Funktion Körper

    def c(a=[]):
        a.append(1)
        print(a)
    c()
    c()
    c()
    Nach dem Login kopieren

    5. Parameter der Funktion

    5.1 Definitionsphase

    Positionsparameter

    In der Definitionsphase werden von Formalparametern in der Reihenfolge von links nach rechts definiert

    Standardformalparameter

    Bereits zugewiesene Werte ​​während ihrer Initialisierung während der Definitionsphase

    Schlüsselwortparameter

    Kostenlose Themen

    Formale Parameter mit variabler Länge args

    Überlauf Positionsparameter, in Tupel gepackt, akzeptiert, dem Variablennamen von args zugewiesen

    benanntes Schlüsselwort Parameter

    Parameter zwischen * und müssen in der Form Schlüssel = Wert übergeben werden

    Variablenlänge Die tatsächlichen Parameter des Positionsformparameters kwargs

    Überlaufschlüsselwort werden in ein Wörterbuch gepackt, von ** akzeptiert und der Variablen zugewiesen kwargs

    Beziehung zwischen formalen Parametern und tatsächlichen Parametern: Beim Aufruf der Funktion wird der Wert des tatsächlichen Parameters an den Variablennamen des formalen Parameters gebunden. Diese Bindungsbeziehung ist vorübergehend wirksam und wird nach Abschluss des Aufrufs ungültig.

    5.2 Aufrufphase

    Positionsparameter

    Die Aufrufphase folgt den eingehenden Werten, die von links nach rechts übergeben werden, und entspricht eins zu eins den formalen Parametern. Schlüsselwort-Aktualparameter In der Aufrufphase werden die Werte gemäß dem Schlüssel=Wert-Format an die formalen Parameter übergeben. Bei denen mit * in den tatsächlichen Parametern wird der Wert vor der Übergabe in Positionsparameter zerlegt und dann zugewiesen

    Der *. * im tatsächlichen Parameter wird vor der Übergabe des Werts in Schlüsselwortargumente zerlegt und dann zugewiesen 6 Decorator: Abschlussfunktionsanwendung

    Decorator ist ein Tool zum Hinzufügen neuer Funktionen zum dekorierten Objekt

    **Hinweis:* * Der Dekorator selbst kann ein beliebiges aufrufbares Objekt sein, und das dekorierte Objekt kann auch ein beliebiges aufrufbares Objekt sein. Warum Dekoratoren verwenden? Die Implementierung von Dekoratoren muss zwei Hauptprinzipien folgen

    1. Ändern Sie nicht den Quellcode des dekorierten Objekts.

    2 Ändern Sie nicht die Aufrufmethode des dekorierten Objekts. Das Ziel des Dekorators: neue Funktionen hinzuzufügen zum dekorierten Objekt hinzufügen und dabei die Prinzipien 1 und 2 befolgen

    python解释器一旦运行到@装饰器的名字,就会调用装饰器,然后将被装饰函数的内存地址当作参数传给装饰器,最后将装饰器调用的结果赋值给原函数名 foo=auth(foo) 此时的foo是闭包函数wrapper

    6.3无参装饰器

    import time
    def timmer(func):
        def wrapper(*args,**kwargs):
            start_time=time.time()
            res=func(*args,**kwargs)
            stop_time=time.time()
            print('run time is %s' %(stop_time-start_time))
            return res
        return wrapper
    
    @timmer
    def foo():
        time.sleep(3)
        print('from foo')
    foo()
    Nach dem Login kopieren

    6.4有参装饰器

    def auth(driver='file'):
        def auth3(func):
            def wrapper(*args,**kwargs):
                name=input("user: ")
                pwd=input("pwd: ")
    
            if driver == 'file':
                if name == 'egon' and pwd == '123':
                    print('login successful')
                    res=func(*args,**kwargs)
                    return res
            elif driver == 'ldap':
                print('ldap')
        return wrapper
    return auth3
    
    @auth(driver='file')
    def foo(name):
        print(name)
    
    foo('egon')
    Nach dem Login kopieren

    7.题目

    #题目一:
    db='db.txt'
    login_status={'user':None,'status':False}
    def auth(auth_type='file'):
        def auth3(func):
            def wrapper(*args,**kwargs):
                if login_status['user'] and login_status['status']:
                    return func(*args,**kwargs)
                if auth_type == 'file':
                    with open(db,encoding='utf-8') as f:
                        dic=eval(f.read())
                    name=input('username: ').strip()
                    password=input('password: ').strip()
                    if name in dic and password == dic[name]:
                        login_status['user']=name
                        login_status['status']=True
                        res=func(*args,**kwargs)
                        return res
                    else:
                        print('username or password error')
                elif auth_type == 'sql':
                    pass
                else:
                    pass
            return wrapper
        return auth3
    
    @auth()
    def index():
        print('index')
    
    @auth(auth_type='file')
    def home(name):
        print('welcome %s to home' %name)
    
    
    # index()
    # home('egon')
    
    #题目二
    import time,random
    user={'user':None,'login_time':None,'timeout':0.000003,}
    
    def timmer(func):
        def wrapper(*args,**kwargs):
            s1=time.time()
            res=func(*args,**kwargs)
            s2=time.time()
            print('%s' %(s2-s1))
            return res
        return wrapper
    
    
    def auth(func):
        def wrapper(*args,**kwargs):
            if user['user']:
                timeout=time.time()-user['login_time']
                if timeout < user[&#39;timeout&#39;]:
                    return func(*args,**kwargs)
            name=input(&#39;name>>: &#39;).strip()
            password=input(&#39;password>>: &#39;).strip()
            if name == &#39;egon&#39; and password == &#39;123&#39;:
                user[&#39;user&#39;]=name
                user[&#39;login_time&#39;]=time.time()
                res=func(*args,**kwargs)
                return res
        return wrapper
    
    @auth
    def index():
        time.sleep(random.randrange(3))
        print(&#39;welcome to index&#39;)
    
    @auth
    def home(name):
        time.sleep(random.randrange(3))
        print(&#39;welcome %s to home &#39; %name)
    
    index()
    home(&#39;egon&#39;)
    
    #题目三:简单版本
    import requests
    import os
    cache_file=&#39;cache.txt&#39;
    def make_cache(func):
        def wrapper(*args,**kwargs):
            if not os.path.exists(cache_file):
                with open(cache_file,&#39;w&#39;):pass
    
            if os.path.getsize(cache_file):
                with open(cache_file,&#39;r&#39;,encoding=&#39;utf-8&#39;) as f:
                    res=f.read()
            else:
                res=func(*args,**kwargs)
                with open(cache_file,&#39;w&#39;,encoding=&#39;utf-8&#39;) as f:
                    f.write(res)
            return res
        return wrapper
    
    @make_cache
    def get(url):
        return requests.get(url).text
    
    
    # res=get(&#39;https://www.python.org&#39;)
    
    # print(res)
    
    #题目四:扩展版本
    import requests,os,hashlib
    engine_settings={
        &#39;file&#39;:{&#39;dirname&#39;:&#39;./db&#39;},
        &#39;mysql&#39;:{
            &#39;host&#39;:&#39;127.0.0.1&#39;,
            &#39;port&#39;:3306,
            &#39;user&#39;:&#39;root&#39;,
            &#39;password&#39;:&#39;123&#39;},
        &#39;redis&#39;:{
            &#39;host&#39;:&#39;127.0.0.1&#39;,
            &#39;port&#39;:6379,
            &#39;user&#39;:&#39;root&#39;,
            &#39;password&#39;:&#39;123&#39;},
    }
    
    def make_cache(engine=&#39;file&#39;):
        if engine not in engine_settings:
            raise TypeError(&#39;egine not valid&#39;)
        def deco(func):
            def wrapper(url):
                if engine == &#39;file&#39;:
                    m=hashlib.md5(url.encode(&#39;utf-8&#39;))
                    cache_filename=m.hexdigest()
                    cache_filepath=r&#39;%s/%s&#39; %(engine_settings[&#39;file&#39;][&#39;dirname&#39;],cache_filename)
    
                    if os.path.exists(cache_filepath) and os.path.getsize(cache_filepath):
                        return open(cache_filepath,encoding=&#39;utf-8&#39;).read()
    
                    res=func(url)
                    with open(cache_filepath,&#39;w&#39;,encoding=&#39;utf-8&#39;) as f:
                        f.write(res)
                    return res
                elif engine == &#39;mysql&#39;:
                    pass
                elif engine == &#39;redis&#39;:
                    pass
                else:
                    pass
    
            return wrapper
        return deco
    
    @make_cache(engine=&#39;file&#39;)
    def get(url):
        return requests.get(url).text
    
    # print(get(&#39;https://www.python.org&#39;))
    print(get(&#39;https://www.baidu.com&#39;))
    
    
    #题目五
    route_dic={}
    
    def make_route(name):
        def deco(func):
            route_dic[name]=func
        return deco
    @make_route(&#39;select&#39;)
    def func1():
        print(&#39;select&#39;)
    
    @make_route(&#39;insert&#39;)
    def func2():
        print(&#39;insert&#39;)
    
    @make_route(&#39;update&#39;)
    def func3():
        print(&#39;update&#39;)
    
    @make_route(&#39;delete&#39;)
    def func4():
        print(&#39;delete&#39;)
    
    print(route_dic)
    
    
    #题目六
    import time
    import os
    
    def logger(logfile):
        def deco(func):
            if not os.path.exists(logfile):
                with open(logfile,&#39;w&#39;):pass
    
            def wrapper(*args,**kwargs):
                res=func(*args,**kwargs)
                with open(logfile,&#39;a&#39;,encoding=&#39;utf-8&#39;) as f:
                    f.write(&#39;%s %s run\n&#39; %(time.strftime(&#39;%Y-%m-%d %X&#39;),func.__name__))
                return res
            return wrapper
        return deco
    
    @logger(logfile=&#39;aaaaaaaaaaaaaaaaaaaaa.log&#39;)
    def index():
        print(&#39;index&#39;)
    
    index()
    Nach dem Login kopieren

    Das obige ist der detaillierte Inhalt vonSo verwenden Sie Python-Funktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Verwandte Etiketten:
    Quelle:yisu.com
    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
    Beliebte Tutorials
    Mehr>
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage