suchen
HeimBackend-EntwicklungPython-Tutorial[Python] Ein erster Blick auf „Funktionale Programmierung'

Funktionale Programmierung

Letztes Semester habe ich einen Kurs namens „Künstliche Intelligenz“ besucht. Der Lehrer hat uns gezwungen, eine Sprache namens Prolog zu lernen Wir haben vorher gelernt, dass mein Leben anders war. Ich habe lange darüber nachgedacht, den Turm von Hanoi zu schreiben, und habe ihn schließlich geändert (aus Angst, vom Lehrer entdeckt zu werden). Bevor ich es geschrieben habe, habe ich einen Absatz gepostet, um ein Gefühl dafür zu bekommen:

hanoi(N) :- dohanoi(N, 'a', 'b', 'c').
dohanoi(0, _ , _ , _ )    :- !.
dohanoi(N, A, B, C)    :-
  N1 is N-1,
  dohanoi(N1, A, C, B),
  writeln([move, N, A-->C]), 
  dohanoi(N1, B, A, C).

Damals habe ich es fast verstanden, aber der Hauptgrund war, dass es zu wenig Informationen gab und das Debuggen nicht möglich war Frage: Immer wenn ich auf einen Fehler stoße, wird mir immer wieder schwindelig. Es wird jedoch gesagt, dass Prolog damals mit Lisp konkurrieren konnte, und ich habe mich in letzter Zeit ein wenig für Lisp interessiert. Nachdem ich diese Dinge abgeschlossen habe, werde ich dieser Art von funktionaler Sprache meine Hommage erweisen.

Was ist funktionale Programmierung? Liao Da schrieb hier:

Funktionale Programmierung ist ein Programmierparadigma mit einem hohen Abstraktionsgrad. Daher gibt es für jede Funktion keine Variablen Die Eingabe ist bestimmt, die Ausgabe ist bestimmt. Wir nennen diese reine Funktion ohne Nebenwirkungen. In Programmiersprachen, die die Verwendung von Variablen zulassen, kann die gleiche Eingabe zu unterschiedlichen Ausgaben führen, da der Variablenstatus innerhalb der Funktion ungewiss ist. Daher hat diese Art von Funktion Nebenwirkungen.

Vielleicht haben Sie es nach dem Lesen immer noch nicht verstanden. Machen Sie sich keine Sorgen, lesen Sie zuerst diese Abschnitte.

Funktionen höherer Ordnung

In der Mathematik und Informatik ist eine Funktion höherer Ordnung eine Funktion, die mindestens eine der folgenden Bedingungen erfüllt:

  • Akzeptiert eine oder mehrere A-Funktionen als Eingabe

  • und gibt eine Funktion aus

Das heißt, die Funktion selbst wird als Parameter übergeben. oder eine Funktion zurückgeben.

Zum Beispiel können Sie einer Variablen wie eine normale Zuweisung eine Funktion zuweisen:

>>> min(1, 2)
1
>>> f = min
>>> f(1, 2)
1
>>> f
<built-in>
>>> min
<built-in></built-in></built-in>

Sie können einer Funktion auch einen Wert zuweisen (Fortsetzung des Codes):

>>> min = 10
>>> min(1, 2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
>>> f(1, 2)
1
>>> min = f
>>> min(1, 2)
1</module></stdin>

Okay, übergeben Sie Parameter, zum Beispiel eine Funktion, die die Summe aller Zahlen berechnet:

>>> def add(a, b):
...     return a+b
...

>>> def mysum(f, *l):
...     a = 0
...     for i in l:
...             a = f(a, i)
...     return a
...
>>> mysum(add, 1, 2, 3)
6
>>> mysum(add, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
55

Natürlich bedeutet das Ersetzen dieses f durch Multiplikation, dass das Produkt aller Zahlen berechnet wird.

Werfen wir einen Blick auf einige der in Python integrierten Funktionen höherer Ordnung, die häufig verwendet werden.

Karte/Reduzierung

Ich erinnere mich vage, dass ich dieses Wort letztes Semester gehört habe, als ich einen Cloud-Computing-Kurs belegte, aber der Kurs war sehr langweilig, also habe ich ihm anscheinend nicht viel zugehört Es seltsam zu finden, wenn ich es hier sehe. ?

Aber es gibt nicht viel zu sagen. Lassen Sie uns kurz über die Rolle der einzelnen Funktionen sprechen.

Für die Karte sieht die Berechnungsformel wie folgt aus:

map(f, [x1, x2, ..., xn]) = [f(x1), f(x2), ..., f(xn)]

Für die Reduzierung sieht die Berechnungsformel wie folgt aus:

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

Liao Dana sagte Sehr klar.

Filter

Filter ähnelt der Kartenfunktion, akzeptiert eine Funktion und ist iterierbar und gibt eine Liste zurück. Seine Funktion besteht jedoch darin, zu bestimmen, ob der Wert beibehalten werden soll, basierend darauf, ob die Funktion einen Wert zurückgibt ist wahr. Zum Beispiel:

def is_odd(n):
    return n % 2 == 1

list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
# 结果: [1, 5, 9, 15]

sortiert

Die sortierte Funktion ist auch eine Funktion höherer Ordnung. Durch Übergeben der Funktion an den Parameter Schlüssel kann die zu sortierende Reihenfolge über die Schlüsselfunktion verarbeitet werden Sortieren Sie es, aber es wird den Wert der Sequenz nicht ändern, zum Beispiel:

>>> sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]

Decorator (Decorator)

Ich werde nicht über anonyme Funktionen sprechen, ich werde eine nehmen Wenn ich sie später verwende, schaue ich mir den Dekorator schon lange an, also werde ich ihn mir noch einmal ansehen.

Einfacher Dekorator

Der erste ist ein einfacher Dekorator, der das Protokoll vor jedem Funktionsaufruf ausdruckt:

import logging

def log(func):
    def wrapper(*args, **kw):
        logging.warn("%s is running" % func.__name__)
        func(*args, **kw)
    return wrapper

Dies ist ein äußerst einfacher Dekorator, wie man ihn verwendet ? Die erste Verwendung, die ich gesehen habe, bestand darin, @ vor der Funktion hinzuzufügen, die dekoriert werden muss, aber tatsächlich ist dies ein syntaktischer Zucker von Python. Die ursprünglichste Verwendung ist verständlicher. Definieren Sie zuerst eine Funktion f:

def f():
    print("in function f")

f = log(f)

Nach dieser Definition rufen wir die f-Funktion auf:

>>> f()
WARNING:root:f is running
in function f

Das Ergebnis der Verwendung von @log ist das gleiche. Tatsächlich dient das @-Symbol als syntaktischer Zucker für den Dekorateur und hat dieselbe Funktion wie die vorherige Zuweisungsanweisung, wodurch der Code prägnanter und klarer aussieht und eine weitere Zuweisungsoperation wie die folgende vermieden wird:

@log
def f():
    print("in function f")

Dekorator mit Parametern

Manchmal müssen wir auch Parameter übergeben der Dekorator Um Parameter wie Status, Ebene und andere Informationen einzugeben, müssen Sie lediglich eine Funktionsschicht außerhalb der Wrapper-Funktion „umschließen“, wie unten gezeigt:

import logging

def log(level):
    def decorator(func):
        def wrapper(*args, **kw):
            logging.warn("%s is running at level %d" % (func.__name__, level))
            return func(*args, **kw)
        return wrapper
    return decorator

@log(2)
def f():
    print("in function f")
    
>>> f()
WARNING:root:f is running at level 2
in function f

Zum weiteren Verständnis

Um Decorator besser zu verstehen, können wir das Namensattribut der Funktion f ausdrucken:

#对于不加装饰器的 f,其 name 不变
>>> def f():
...     print("in function f")
...
>>> f.__name__
'f'

#对于添加装饰器的函数,其 name 改变了
>>> @log
... def f():
...     print("in function f")
...
>>> f.__name__
'wrapper'

Anhand der ersten Zuweisungsanweisung des Decorators können wir grob verstehen, was passiert ist: f = log(f) macht f Punkt to log( Der Rückgabewert von f) ist die Wrapper-Funktion. Jedes Mal, wenn die ursprüngliche Funktion f ausgeführt wird, wird die Wrapper-Funktion aufgerufen. In unserem Beispiel wird zuerst das Protokoll gedruckt und dann die ursprüngliche Funktion f ausgeführt.

Dabei gibt es jedoch ein Problem. Dadurch werden die Metainformationen der ursprünglichen Funktion f ersetzt und viele Informationen über f verschwinden. Dies ist schwer zu akzeptieren, aber glücklicherweise haben wir das functools-Modul. Ändern Die Funktion ist:

import functools
import logging

def log(func):
    functools.wraps(func)
    def wrapper(*args, **kw):
        logging.warn("%s is running" % func.__name__)
        func(*args, **kw)
    return wrapper

>>> @log
... def f():
...     print("in function f")
...
>>> f.__name__
'f'

Außerdem können Sie mehrere Dekoratoren zur gleichen Funktion hinzufügen:

@a
@b
@c
def f ():


# 等价于

f = a(b(c(f)))

Zusammenfassung

Ich bin nicht sehr Wenn Sie mit der funktionalen Programmierung vertraut sind, erhalten Sie hier nur ein kurzes Verständnis des Konzepts. Normalerweise ist es definitiv sinnvoller, imperative Programmierung zu verwenden. Es gibt jedoch rein funktionale Sprachen wie Haskell oder Lisp, und das Erlernen dieser Sprachen eröffnet eine neue Denkweise.

Weitere [Python]-Artikel zum Thema „Funktionale Programmierung“ finden Sie auf der chinesischen PHP-Website!

Stellungnahme
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
Python: Spiele, GUIs und mehrPython: Spiele, GUIs und mehrApr 13, 2025 am 12:14 AM

Python zeichnet sich in Gaming und GUI -Entwicklung aus. 1) Spielentwicklung verwendet Pygame, die Zeichnungen, Audio- und andere Funktionen bereitstellt, die für die Erstellung von 2D -Spielen geeignet sind. 2) Die GUI -Entwicklung kann Tkinter oder Pyqt auswählen. Tkinter ist einfach und einfach zu bedienen. PYQT hat reichhaltige Funktionen und ist für die berufliche Entwicklung geeignet.

Python vs. C: Anwendungen und Anwendungsfälle verglichenPython vs. C: Anwendungen und Anwendungsfälle verglichenApr 12, 2025 am 12:01 AM

Python eignet sich für Datenwissenschafts-, Webentwicklungs- und Automatisierungsaufgaben, während C für Systemprogrammierung, Spieleentwicklung und eingebettete Systeme geeignet ist. Python ist bekannt für seine Einfachheit und sein starkes Ökosystem, während C für seine hohen Leistung und die zugrunde liegenden Kontrollfunktionen bekannt ist.

Der 2-stündige Python-Plan: ein realistischer AnsatzDer 2-stündige Python-Plan: ein realistischer AnsatzApr 11, 2025 am 12:04 AM

Sie können grundlegende Programmierkonzepte und Fähigkeiten von Python innerhalb von 2 Stunden lernen. 1. Lernen Sie Variablen und Datentypen, 2. Master Control Flow (bedingte Anweisungen und Schleifen), 3.. Verstehen Sie die Definition und Verwendung von Funktionen, 4. Beginnen Sie schnell mit der Python -Programmierung durch einfache Beispiele und Code -Snippets.

Python: Erforschen der primären AnwendungenPython: Erforschen der primären AnwendungenApr 10, 2025 am 09:41 AM

Python wird in den Bereichen Webentwicklung, Datenwissenschaft, maschinelles Lernen, Automatisierung und Skripten häufig verwendet. 1) In der Webentwicklung vereinfachen Django und Flask Frameworks den Entwicklungsprozess. 2) In den Bereichen Datenwissenschaft und maschinelles Lernen bieten Numpy-, Pandas-, Scikit-Learn- und TensorFlow-Bibliotheken eine starke Unterstützung. 3) In Bezug auf Automatisierung und Skript ist Python für Aufgaben wie automatisiertes Test und Systemmanagement geeignet.

Wie viel Python können Sie in 2 Stunden lernen?Wie viel Python können Sie in 2 Stunden lernen?Apr 09, 2025 pm 04:33 PM

Sie können die Grundlagen von Python innerhalb von zwei Stunden lernen. 1. Lernen Sie Variablen und Datentypen, 2. Master -Steuerungsstrukturen wie wenn Aussagen und Schleifen, 3. Verstehen Sie die Definition und Verwendung von Funktionen. Diese werden Ihnen helfen, einfache Python -Programme zu schreiben.

Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer-Anfänger-Programmierbasis in Projekt- und problemorientierten Methoden?Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer-Anfänger-Programmierbasis in Projekt- und problemorientierten Methoden?Apr 02, 2025 am 07:18 AM

Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer -Anfänger für Programmierungen? Wenn Sie nur 10 Stunden Zeit haben, um Computer -Anfänger zu unterrichten, was Sie mit Programmierkenntnissen unterrichten möchten, was würden Sie dann beibringen ...

Wie kann man vom Browser vermeiden, wenn man überall Fiddler für das Lesen des Menschen in der Mitte verwendet?Wie kann man vom Browser vermeiden, wenn man überall Fiddler für das Lesen des Menschen in der Mitte verwendet?Apr 02, 2025 am 07:15 AM

Wie kann man nicht erkannt werden, wenn Sie Fiddlereverywhere für Man-in-the-Middle-Lesungen verwenden, wenn Sie FiddLereverywhere verwenden ...

Was soll ich tun, wenn das Modul '__builtin__' beim Laden der Gurkendatei in Python 3.6 nicht gefunden wird?Was soll ich tun, wenn das Modul '__builtin__' beim Laden der Gurkendatei in Python 3.6 nicht gefunden wird?Apr 02, 2025 am 07:12 AM

Laden Sie Gurkendateien in Python 3.6 Umgebungsbericht Fehler: ModulenotFoundError: Nomodulennamen ...

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

MantisBT

MantisBT

Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

MinGW – Minimalistisches GNU für Windows

MinGW – Minimalistisches GNU für Windows

Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Leistungsstarke integrierte PHP-Entwicklungsumgebung

EditPlus chinesische Crack-Version

EditPlus chinesische Crack-Version

Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung