We provide Linux to the World

ON AMAZON:



https://www.amazon.com/Voice-Desert-Valerio-Stefano-ebook/dp/B0CJLZ2QY5/



https://www.amazon.it/dp/B0CT9YL557

We support WINRAR [What is this] - [Download .exe file(s) for Windows]

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
SITEMAP
Audiobooks by Valerio Di Stefano: Single Download - Complete Download [TAR] [WIM] [ZIP] [RAR] - Alphabetical Download  [TAR] [WIM] [ZIP] [RAR] - Download Instructions

Make a donation: IBAN: IT36M0708677020000000008016 - BIC/SWIFT:  ICRAITRRU60 - VALERIO DI STEFANO or
Privacy Policy Cookie Policy Terms and Conditions
Python (Programmiersprache) – Wikipedia

Python (Programmiersprache)

aus Wikipedia, der freien Enzyklopädie

Achtung!
Die Neutralität dieses Artikels oder Abschnitts ist umstritten. Die Gründe stehen auf der Diskussionsseite. Entferne diesen Baustein bitte erst, wenn er nicht mehr nötig ist.
Python
Erscheinungsjahr: 1990
Entwickler: Python Software Foundation
Aktuelle Version: 2.5.2  (22. Februar 2008)
Typisierung: stark, dynamisch („Duck Typing“)
wichtige Implementierungen: CPython, Jython, IronPython, PyPy
Einflüsse: ABC, Algol 60, Modula-3, Icon, C, Perl, LISP, Smalltalk, TCL
Beeinflusste: Ruby, Boo
Betriebssystem: Plattformunabhängig
Lizenz: Python License
Website: www.python.org

Python [ˈpaɪθn̩] ist eine Programmiersprache, die mehrere Programmierparadigmen ermöglicht. So wird die objektorientierte, aspektorientierte und funktionale Programmierung unterstützt.

Die Sprache wurde Anfang der 1990er Jahre von Guido van Rossum am Centrum voor Wiskunde en Informatica (Zentrum für Mathematik und Informatik) in Amsterdam als Nachfolger für die Programmier-Lehrsprache ABC entwickelt, ursprünglich für das verteilte Betriebssystem Amoeba. Alle bisherigen Implementierungen der Sprache (siehe auch Jython oder Stackless Python) übersetzen den Text eines Python-Programms transparent in einen Zwischencode, der dann von einem Interpreter ausgeführt wird.

Der Name referiert die britische Komikertruppe Monty Python, nicht etwa die gleichnamige Schlangengattung Pythons. In der Dokumentation finden sich daher auch viele Anspielungen auf Sketche aus dem Flying Circus.[1]

Inhaltsverzeichnis

[Bearbeiten] Ziele

Python wurde mit dem Ziel entworfen, möglichst einfach und übersichtlich zu sein. Dies wird durch zwei Dinge erreicht: Zum einen enthält die Sprache einen sehr mächtigen Funktionsumfang in nur relativ wenigen (31) Schlüsselwörtern[2], zum anderen wurde die Syntax reduziert und auf Übersichtlichkeit optimiert. Dies führt dazu, dass Python eine Sprache ist, in der man schnell, einfach und leicht programmieren kann. Sie ist daher besonders dort geeignet, wo Übersichtlichkeit und Lesbarkeit des Codes eine herausragende Rolle spielen – z. B. in der Teamarbeit, bei Beschäftigung mit dem Quellcode nach längeren Pausen oder bei Programmieranfängern.

Durch die Möglichkeit, auch Programme anderer Sprachen als Modul einzubetten, werden viele Nischen in der Programmierung abgedeckt. Bei Bedarf lassen sich so beispielsweise zeitkritische Teile durch maschinennah in C programmierte Routinen ersetzen, oder Python kann als Skriptsprache eines anderen Programms dienen (Beispiele: OpenOffice.org, Blender, Maya, PyMOL, SPSS und Gimp).

Python ist eine Multiparadigmensprache. Das heißt, es zwingt den Programmierer nicht zu einem einzigen bestimmten Programmierparadigma, sondern erlaubt es, das für die jeweilige Aufgabe am besten geeignete Paradigma zu wählen. Objektorientierte und strukturierte Programmierung werden vollständig unterstützt, weiterhin gibt es Spracheigenschaften für funktionale und aspektorientierte Programmierung.

Die Datentypen werden dynamisch verwaltet; eine statische Typprüfung (wie z. B. bei C++) gibt es nicht. Die Freigabe nicht mehr benutzter Speicherbereiche erfolgt durch automatische Speicherbereinigung (garbage collection).

[Bearbeiten] Datentypen und Strukturen

Python besitzt eine größere Anzahl von grundlegenden Datentypen. Neben der herkömmlichen Ganzzahl- und Gleitkommaarithmetik unterstützt es transparent auch beliebig große Ganzzahlen und komplexe Zahlen.

Es verfügt über die übliche Ausstattung an Zeichenkettenoperationen, Zeichenketten sind in Python allerdings unveränderliche Objekte (wie auch in Java). Damit führen Operationen, die das Ändern einer Zeichenkette bewerkstelligen sollen – wie z. B. die Ersetzung von Zeichen – dazu, dass stattdessen eine neue Zeichenkette zurückgegeben wird.

In Python ist der Datentyp an das Objekt (den Wert) gebunden und nicht an eine Variable, d. h. Datentypen werden dynamisch vergeben, so wie bei Smalltalk oder LISP – und nicht wie bei Java. Alle Werte werden per Referenz übergeben. In Python ist alles ein Objekt; Klassen, Typen, Methoden, Module etc.

Trotz der dynamischen Typverwaltung enthält Python eine gewisse Typprüfung. Diese ist strenger als bei Perl, aber weniger strikt als etwa bei Objective CAML. Implizite Umwandlungen sind für numerische Typen definiert, so dass man beispielsweise eine komplexe Zahl mit einer langen Ganzzahl ohne explizite Typumwandlung multiplizieren kann. Anders als bei Perl gibt es allerdings keine implizite Umwandlung zwischen Zahlen und Zeichenketten; in Operationen für Zeichenketten kann also anstelle einer Zeichenkette nicht direkt eine Zahl verwendet werden.

[Bearbeiten] Sammeltypen

Python besitzt mehrere Sammeltypen, darunter Listen, Tupel, Mengen (Sets) und Wörterbücher (Dictionaries). Listen, Tupel und Zeichenketten sind Folgen (Sequenzen) und kennen fast alle die gleichen Methoden: Über die Zeichen einer Kette kann man ebenso iterieren wie über die Elemente einer Liste. Listen sind erweiterbare Felder (Arrays), wohingegen Tupel eine feste Länge haben und unveränderbar sind.

Der Zweck solcher Unveränderbarkeit hängt mit den Wörterbüchern zusammen, ein Datentyp, der auch als assoziatives Array bezeichnet wird. Um auch unter den Bedingungen der Übergabe per Referenz die Datenkonsistenz zu sichern, müssen die Schlüssel eines Wörterbuches vom Typ „unveränderbar“ sein. Die ins Wörterbuch eingetragenen Werte können dagegen von beliebigem Typ sein.

Sets sind Mengen von Objekten und in cPython ab Version 2.4 im Standardsprachumfang enthalten. Diese Datenstruktur kann beliebige (paarweise unterschiedliche) Objekte aufnehmen und stellt Mengenoperationen wie beispielsweise Durchschnitt, Differenz, Vereinigung zur Verfügung.

[Bearbeiten] Objektsystem

Das Typsystem von Python ist auf das Klassensystem abgestimmt. Obwohl die eingebauten Datentypen genau genommen keine Klassen sind, können Klassen von einem Typ erben. So kann man die Eigenschaften von Zeichenketten oder Wörterbüchern erweitern – auch von Ganzzahlen. Python unterstützt daneben Mehrfachvererbung.

Die Sprache unterstützt direkt den Umgang mit Typen und Klassen. Typen können ausgelesen (ermittelt) und verglichen werden und verhalten sich wie Objekte – in Wirklichkeit sind die Typen (wie in Smalltalk) selbst ein Objekt. Die Attribute eines Objektes können als Wörterbuch extrahiert werden.

[Bearbeiten] Syntax

Eines der Entwurfsziele für Python war die gute Lesbarkeit des Quellcodes. Die Anweisungen benutzen häufig englische Schlüsselwörter. Darüber hinaus besitzt Python weniger syntaktische Konstruktionen als viele andere strukturierte Sprachen, wie C, Perl oder Pascal.

  • zwei Schleifenformen
    • for zur Iteration über die Elemente einer Sequenz
    • while zur Wiederholung einer Schleife solange ein logischer Ausdruck wahr ist.
  • Verzweigungen
    • if … elif … else für Verzweigungen

Beim letzten Punkt bieten andere Programmiersprachen zusätzlich switch und/oder goto. Diese wurden zugunsten der Lesbarkeit in Python weggelassen und können durch if-Konstrukte abgebildet werden.

[Bearbeiten] Strukturierung durch Einrücken

Python benutzt Einrückungen als Strukturierungselement. Hierin unterscheidet es sich von den meisten anderen Programmiersprachen, bei denen Blöcke durch Klammern oder Schlüsselworte markiert werden und im Gegenzug Leerräume keine Semantik tragen. Bei diesen Sprachen ist die Einrückung zur optischen Hervorhebung eines Blockes zwar erlaubt und in der Regel auch erwünscht, aber nicht vorgeschrieben. Programmierer, die bereits andere Programmiersprachen kennen, fühlen sich mitunter durch diese Vorschrift in ihrer Freiheit eingeschränkt. Für Programmierneulinge wird dieser Zwang zu lesbarem Stil aber als Vorteil gesehen.

Hierzu ein kurzes Beispiel: Hier sind Funktionen in C und in Python, die das gleiche tun – die Fakultät einer Ganzzahl berechnen.

Fakultätsfunktion in C (ohne Einrückung):

int fakultaet(int x) { if (x > 1) return x * fakultaet(x - 1); else return 1; }

Fakultätsfunktion in C (mit Einrückung):

int fakultaet(int x)
{
    if (x > 1)
        return x * fakultaet(x - 1);
    else
        return 1;
}

Jetzt die gleiche Funktion in Python:

def fakultaet(x):
    if x > 1:
        return x * fakultaet(x - 1)
    else:
        return 1

Dadurch tritt das Dangling Else-Problem bei Python nicht auf.

Es ist jedoch darauf zu achten, die Einrückungen im gesamten Programmtext gleich zu gestalten. Die gemischte Verwendung von Leerzeichen und Tabulatorzeichen kann zu Einrückungen führen, die nicht der Blockstruktur entsprechen. Der Python-Interpreter geht davon aus, dass ein Tabulator-Zeichen genau acht Leerzeichen entspricht, auch wenn der Editor einen Tabulator in der Breite von z. B. vier einfachen Leerzeichen darstellt. Mithilfe der Kommandozeilenoption -t oder des in der Standardbibliothek enthaltenen Skripts "tabnanny" kann man seine Skripte auf einheitliche Verwendung von Tabulatoren bzw. Leerzeichen überprüfen.

[Bearbeiten] Funktionales Programmieren

Ausdrucksstarke syntaktische Elemente zur funktionalen Programmierung vereinfachen das Arbeiten mit Listen und anderen Sammeltypen. Eine solche Vereinfachung ist die Listennotation, die aus der funktionalen Programmiersprache Haskell stammt; hier bei der Berechnung der ersten fünf Zweierpotenzen:

zahlen = [1, 2, 3, 4, 5]
zweierpotenzen = [2 ** n for n in zahlen]

Weil in Python Funktionen als Argumente auftreten dürfen, kann man auch ausgeklügeltere Konstruktionen ausdrücken, wie den Continuation-passing style.

Pythons Schlüsselwort lambda könnte manche Anhänger der funktionalen Programmierung fehlleiten. Solche lambda-Blöcke in Python können nur Ausdrücke enthalten, aber keine Anweisungen. Damit sind sie nicht der allgemeinste Weg, um eine Funktion zurückzugeben. Die übliche Vorgehensweise ist stattdessen, den Namen einer lokalen Funktion zurückzugeben. Das folgende Beispiel zeigt dies anhand einer einfachen Funktion nach den Ideen von Haskell Brooks Curry:

def add_and_print_maker(x):
    def temp(y):
        print "%d + %d = %d" % (x, y, x + y)
    return temp

[Bearbeiten] Ausnahmebehandlung

Python unterstützt (und nutzt ausgiebig) die Ausnahmebehandlung (engl. exception handling) als ein Mittel, um Fehlerbedingungen zu testen. Dies ist so weit in Python integriert, dass es sogar möglich ist, Syntaxfehler abzufangen und zur Laufzeit zu behandeln.

Ausnahmen haben einige Vorteile gegenüber anderen beim Programmieren üblichen Verfahren der Fehlerbehandlung (wie z.B. Fehler-Rückgabewerte und globale Statusvariablen). Sie sind Thread-sicher und können leicht bis in die höchste Programmebene weitergegeben werden, oder an einer beliebigen anderen Ebene der Funktionsaufruffolge behandelt werden. Der korrekte Einsatz von Ausnahmebehandlungen beim Zugriff auf dynamische Ressourcen erleichtert es zudem, bestimmte auf Race Conditions basierende Sicherheitslücken zu vermeiden, die entstehen können, wenn Zugriffe auf bereits veralteten Statusabfragen basieren.

Ausnahmen und deren Behandlung stellen einen grundlegenden Programmierstil dar. Sie führen dazu, dass der Code zur Fehlerbehandlung nicht mit dem eigentlichen Programmcode vermischt ist, wie das oft in Programmiersprachen ohne eigene Ausnahmebehandlung (z. B. C) beim Test von Rückgabewerten, typischerweise auf − 1, der Ganzzahl-Repräsentation für einen Fehler, zwangsläufig geschieht.

Der Python-Ansatz legt den Einsatz von Ausnahmen nahe, wann immer eine Fehlerbedingung entstehen könnte. Nützlich ist dieses Prinzip beispielsweise bei der Konstruktion robuster Eingabeaufforderungen:

while True:
    try:
        num = raw_input("Eine Zahl eingeben: ")
        num = int(num)
        break
    except ValueError:
        print "Eine _Zahl_, bitte!"

Dieser Code wird den Benutzer so lange nach einer Nummer fragen, bis dieser eine Zeichenfolge eingibt, die sich per int() in eine Ganzzahl konvertieren lässt. Durch die Ausnahmebehandlung wird hier vermieden, dass eine Fehleingabe zu einem Laufzeitfehler führt, der das Programm zur Beendigung zwingt.

Ebenso könnte etwa auch das hier nicht berücksichtigte Interrupt-Signal (SIGINT, häufig Strg+C) einfach mittels Ausnahmebehandlung in Python abgefangen und behandelt werden (except KeyboardInterrupt: …).

[Bearbeiten] Standardbibliothek

Python verfügt über eine große Standardbibliothek, wodurch es sich für viele Anwendungen gut eignet. Das liegt an der sogenannten „batteries included“-Philosophie der Python-Module. Die Module der Standardbibliothek können mit in C oder Python selbst geschriebenen Modulen ergänzt werden.

Die Standardbibliothek ist besonders auf Internet-Anwendungen zugeschnitten, mit der Unterstützung einer großen Anzahl von Standardformaten und -Protokollen (wie Multipurpose Internet Mail Extensions und HTTP). Module zur Schaffung grafischer Schnittstellen, zur Verbindung mit relationalen Datenbanken und zur Manipulation regulärer Ausdrücke sind ebenfalls enthalten.

Die Standardbibliothek ist eine der größten Stärken von Python. Das meiste davon ist plattformunabhängig, so dass auch größere Python-Programme oft auf Unix, Windows, Mac OS X und anderen Plattformen ohne Änderung laufen.

Mit Hilfe des mitgelieferten Moduls Tkinter kann in Python (wie in Perl und Tcl) schnell eine grafische Oberfläche (GUI) mit Tk erzeugt werden. Es gibt darüber hinaus eine Vielzahl von weiteren Wrappern von Drittanbietern. Sie stellen Anbindungen (engl. language bindings) zu GUI-Bibliotheken anderer Programmiersprachen wie z. B. PyGTK, PyQt, PyKDE, wxPython, PyObjC und PyFLTK zur Verfügung.

[Bearbeiten] Beispiel

Ein Beispiel für die gute Lesbarkeit und die Kompaktheit von Python-Code, hier anhand des Quicksort-Algorithmus:

def quicksort(liste):
    if len(liste) <= 1:
        return liste
    pivotelement = liste[0]
    links  = [element for element in liste[1:] if element <  pivotelement]
    rechts = [element for element in liste[1:] if element >= pivotelement]
    return quicksort(links) + [pivotelement] + quicksort(rechts)

Hier ermöglicht insbesondere die Listennotation für die Variablen links und rechts eine kompakte Darstellung. Zum Vergleich eine imperative Formulierung dieser zwei Zeilen:

...
    links=[]; rechts=[]            #Leere Listen links und rechts
    for element in liste[1:]:      #Ab einschließlich liste[1] jedes Element durchlaufen
        if element < liste[0]:
            links.append(element)  #wenn < dann an linke Liste anhängen
        else: 
            rechts.append(element) #wenn nicht < (also >=) dann an rechte Liste anhängen
...

[Bearbeiten] Einsatz

  • So wie LISP, Ruby, Groovy – und Perl im Debugger – unterstützt der Python-Interpreter auch einen interaktiven Modus, in dem Ausdrücke am Terminal eingegeben und die Ergebnisse sofort betrachtet werden können. Das ist nicht nur für Neulinge angenehm, die die Sprache lernen, sondern genauso auch für erfahrene Programmierer: Code-Stückchen können interaktiv ausgiebig getestet werden, bevor man sie in ein geeignetes Programm aufnimmt.
  • Python wird im Rahmen des Projektes 100-Dollar-Laptop als Standardsprache für die Benutzeroberfläche verwendet. Da der 100-Dollar-Laptop für die Schulausbildung von Kindern konzipiert ist, soll bei Benutzung der dafür gestalteten grafischen Benutzeroberfläche „Sugar“ auf Knopfdruck der gerade laufende Python-Quellcode angezeigt werden.[3] Damit soll Kindern die Möglichkeit gegeben werden, die dahinterliegende Informationstechnologie real zu erleben und nach Belieben „hinter die Kulissen“ zu schauen.

[Bearbeiten] Verbreitung

  • Python ist für die meisten gängigen Betriebssysteme frei erhältlich und ist eine der drei Sprachen, die häufig in einer LAMP-Umgebung eingesetzt werden. Um Python in den Webserver einzubinden, wurde mod_python entwickelt, das die Ausführung im Vergleich zu CGI wesentlich beschleunigt und Daten persistent speichern kann. Es gibt einen in Java implementierten Python-Interpreter namens Jython. Mittlerweile gibt es auch eine Python-Implementierung (IronPython) für die .NET- bzw. Mono-Plattform. Um Python als Skriptsprache für Programme in C++ zu nutzen, setzt sich vermehrt die Boost.Python-Bibliothek durch. Ein Python-Parser für Parrot und ein in Python geschriebener Interpreter für Python, PyPy, welcher von der EU gefördert wurde, sind ebenfalls in Entwicklung.
  • Es gibt einen Python-Interpreter für das Symbian-Betriebssystem, so dass Python auf verschiedenen Mobiltelefonen verfügbar ist.
  • Es existiert ein Python-Interpreter für Microcontroller namens PyMite.[4]
  • PyShell ist ein Kommandozeileninterpreter für verschiedene unixoide Computer-Betriebssysteme, die neben klassischen Unix-Shellkommandos auch direkte Eingaben in Python-Form verarbeiten kann.
  • Python in der Version 2.5.1 ist Bestandteil von AmigaOS 4.0.

[Bearbeiten] Kritik

  • Insbesondere Umsteiger von anderen Programmiersprachen fühlen sich durch die Verwendung von Einrückungen zur Strukturierung des Quelltexts in ihrer Freiheit eingeschränkt, oder fürchten Probleme, wenn sowohl Tabulatoren als auch Leerzeichen zur Einrückung verwendet werden.
  • Bei der Definition (aber nicht beim Aufruf) von Methoden muss der Parameter self, der dem Objekt entspricht, dessen Methode aufgerufen wird, explizit angegeben werden. Dies wird oft als inelegant und "nicht objektorientiert" empfunden[5]
  • In einer Methodendefinition erfordert der Aufruf der Basisklassenversion derselben Methode die explzite Angabe der Klasse und Instanz. Dies wird als Verletzung des DRY (Don't Repeat Yourself)-Prinzips gesehen, und behindert Umbenennungen (dies soll in Python 3 behoben werden[6])
  • Einige in anderen Sprachen gebräuchliche Kontrollstrukturen, wie do/while[5] oder switch/case, sind in Python nicht vorhanden und müssen auf andere Weise realisiert werden (z.B. durch while True: ... break bzw. if/elsif/elsif.../else)
  • Die Division von zwei ganzzahligen Operanden wird, wie in den meisten anderen Programmiersprachen auch, als Ganzzahl-Division ausgeführt, was viele Anfänger überrascht, und auch Experten hin und wieder zu Fehlern verleitet. Z.B. ergibt 3/2 = 1, und nicht, wie man naiv erwarten würde, 1,5. (Dieses Problem wird schrittweise korrigiert: seit Python 2.2 kann man optional angeben, dass "/" immer eine echte Division durchführen soll. Für die Ganzzahldivision wurde der Operator "//" eingeführt. In Python 3.0 wird dieses Verhalten immer aktiv sein[7])
  • Auf Multiprozessor-Systemen behindert der sogenannte Global Interpreter Lock (GIL) von CPython die Effizienz von Python-Anwendungen, die Multithreading benutzen.[8] (Diese Beschränkung existiert unter Jython oder IronPython nicht.) Es wird daher empfohlen statt Threads mehrere miteinander kommunizierende Prozesse zu verwenden.[9][10]

[Bearbeiten] Literatur

[Bearbeiten] Quellen

  1. Offizielle Python FAQ, sowie Python Tutorial, Kapitel 1
  2. http://docs.python.org/ref/keywords.html
  3. OLPC-Wiki: „Python für den 100-Dollar-Laptop
  4. PyMite in der Python Wiki
  5. a b http://web.archive.org/web/20031002184114/www.amk.ca/python/writing/warts.html
  6. http://www.python.org/dev/peps/pep-3135/
  7. http://www.python.org/dev/peps/pep-0238/
  8. http://blog.snaplogic.org/?p=94
  9. http://www.python.org/doc/faq/library/#can-t-we-get-rid-of-the-global-interpreter-lock
  10. http://www.artima.com/weblogs/viewpost.jsp?thread=214235

[Bearbeiten] Weblinks

Wikibooks
 Wikibooks: Python-Programmierung – Lern- und Lehrmaterialien
Commons
 Commons: Python – Bilder, Videos und Audiodateien
Dieser Artikel wurde in die Liste der lesenswerten Artikel aufgenommen.

Static Wikipedia 2008 (March - no images)

aa - ab - als - am - an - ang - ar - arc - as - bar - bat_smg - bi - bug - bxr - cho - co - cr - csb - cv - cy - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - jbo - jv - ka - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nn - -

Static Wikipedia 2007 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -
https://www.classicistranieri.it - https://www.ebooksgratis.com - https://www.gutenbergaustralia.com - https://www.englishwikipedia.com - https://www.wikipediazim.com - https://www.wikisourcezim.com - https://www.projectgutenberg.net - https://www.projectgutenberg.es - https://www.radioascolto.com - https://www.debitoformativo.it - https://www.wikipediaforschools.org - https://www.projectgutenbergzim.com