web counter


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 - Wikipedia, wolna encyklopedia

Python

Z Wikipedii

Python - interpretowany, interaktywny język programowania stworzony przez Guido van Rossuma w 1990. Python posiada w pełni dynamiczny system typów i automatyczne zarządzanie pamięcią, jest zatem podobny do takich języków, jak Tcl, Perl, Scheme czy Ruby.

Python rozwijany jest jako projekt Open Source, zarządzany przez Python Software Foundation, będącą organizacją non-profit. Wersja 2.5.2 ukazała się 21 stycznia 2008.

Spis treści

[edytuj] Rozwój języka

Pythona stworzył we wczesnych latach 90. Guido van Rossum - jako następcę języka ABC, stworzonego w Centrum voor Wiskunde en Informatica (CWI - Centrum Matematyki i Informatyki w Amsterdamie). Van Rossum jest głównym twórcą Pythona, choć spory wkład w jego rozwój pochodzi od innych osób. Z racji kluczowej roli, jaką van Rossum pełni przy podejmowaniu ważnych decyzji projektowych, często określa się go przydomkiem "Benevolent Dictator for Life" (BDFL).

Wersja 1.2 była ostatnią wydaną przez CWI. Od 1995 roku van Rossum kontynuował pracę nad Pythonem w Corporation for National Research Initiatives (CNRI) w Reston w Wirginii, gdzie wydał kilka wersji Pythona, do 1.6 włącznie. W 2000 roku van Rossum i zespół pracujący nad rozwojem jądra Pythona przenieśli się do BeOpen.com by założyć zespół BeOpen PythonLabs. Pierwszą i jedyną wersją wydaną przez BeOpen.com był Python 2.0.

Po wydaniu wersji 1.6 i opuszczeniu CNRI przez van Rossuma, który zajął się programowaniem komercyjnym, uznano za wysoce pożądane, by Pythona można było używać z oprogramowaniem dostępnym na licencji GPL. CNRI i Free Software Foundation (FSF) podjęły wspólny wysiłek w celu odpowiedniej modyfikacji licencji Pythona. Wersja 1.6.1 była zasadniczo identyczna z wersją 1.6, z wyjątkiem kilku drobnych poprawek oraz licencji, dzięki której późniejsze wersje mogły być zgodne z licencją GPL. Python 2.1 pochodzi zarówno od wersji 1.6.1 jak i 2.0.

Po wydaniu Pythona 2.0 przez BeOpen.com Guido van Rossum i inni programiści z PythonLabs przeszli do Digital Creations. Cała własność intelektualna dodana od tego momentu, począwszy od Pythona 2.1 (wraz z wersjami alpha i beta), jest własnością Python Software Foundation (PSF), niedochodowej organizacji wzorowanej na Apache Software Foundation.

[edytuj] Filozofia Pythona

Python spełnia jednocześnie kilka paradygmatów. Podobnie do C++, a w przeciwieństwie do Smalltalka nie wymusza jednego stylu programowania, pozwalając na stosowanie różnych. W Pythonie możliwe jest programowanie obiektowe, programowanie strukturalne i programowanie funkcyjne. Typy sprawdzane są dynamicznie, a do zarządzania pamięcią stosuje się garbage collection.

Choć w jego popularyzacji kładzie się nacisk na różnice w stosunku do Perla, Python jest pod wieloma względami do niego podobny. Jednakże projektanci Pythona odrzucili złożoną składnię Perla na rzecz bardziej oszczędnej i - ich zdaniem - bardziej czytelnej. Mimo, że podobnie do Perla, Python jest czasem klasyfikowany jako język skryptowy, wykorzystuje się go do tworzenia dużych projektów jak serwer aplikacji Zope czy system wymiany plików Mojo Nation.

[edytuj] Typy i struktury danych

W Pythonie wartości, a nie zmienne, posiadają typ - tak więc Python jest językiem z typami dynamicznymi, podobnie jak Lisp, a w przeciwieństwie do Javy. Wszystkie wartości przekazywane są przez referencję.

W porównaniu z innymi językami z typami dynamicznymi Python sprawdza typy w umiarkowanym stopniu. Nie jest ani tak liberalny, jak Perl, ani tak restrykcyjny jak Caml. Dla typów numerycznych zdefiniowana jest automatyczna konwersja, tak więc możliwe jest np. mnożenie liczby zespolonej przez liczbę całkowitą typu long bez rzutowania. Jednak w przeciwieństwie do Perla nie ma np. automatycznej konwersji pomiędzy napisami i liczbami; liczba nie jest prawidłowym argumentem dla operacji napisowej.

Python posiada szeroki zakres podstawowych typów danych. Obok tradycyjnie spotykanych typów całkowitych i zmiennoprzecinkowych obsługuje on także liczby całkowite dowolnych rozmiarów oraz liczby zespolone.

Python obsługuje typowy zestaw operacji na łańcuchach tekstowych. Łańcuchy są w Pythonie niezmienialne, tak więc każda operacja, która zmieniłaby zawartość napisu (np. zamiana znaków) pozostawi oryginalny napis bez zmian, zwracając zamiast tego nowy napis.

[edytuj] Kolekcje

Python wyposażony jest także w kilka typów kolekcji, w tym listy, krotki (ang. tuple) i słowniki. Listy, krotki i napisy są sekwencjami i większość ich metod jest wspólna: równie łatwo można iterować po znakach napisu jak po elementach listy. Listy to tablice o zmiennej liczbie elementów, zaś krotki to tablice o stałej liczbie elementów i bez możliwości zmiany wartości elementów.

Innym typem kolekcji są słowniki, znane w innych językach jako mapy lub tablice asocjacyjne. By zachować spójność (ze względu na przekazywanie wartości przez referencję), klucze w słowniku muszą być typu niemutowalnego, natomiast wartości mogą być mutowalne.

Od wersji 2.3 w bibliotece standardowej dostępny jest moduł sets, uzupełniający zestaw podstawowych kolekcji o typ zbioru elementów unikalnych. Od wersji 2.4 dostępne są typy wbudowane set i frozenset o analogicznej funkcjonalności.

Należy dodać, że podstawowe kolekcje w standardowej implementacji Pythona w C są wysoce zoptymalizowane pod kątem szybkości przeszukiwania, sortowania, itp.

[edytuj] Wszystko jest obiektem

System typów w Pythonie jest silnie powiązany z systemem klas. Chociaż typy wbudowane nie są właściwie klasami, klasa może dziedziczyć z dowolnego typu. Można więc dziedziczyć klasy z napisów czy słowników... a nawet z liczb całkowitych! Ponadto możliwe jest dziedziczenie wielokrotne.

Język umożliwia rozległą introspekcję typów i klas. Typy można odczytywać i porównywać - podobnie, jak w Smalltalku, typy (opisy typów) też są typem. Atrybuty obiektu można pobrać jako słownik.

W Pythonie nie ma enkapsulacji, jak to ma miejsce w C++ czy Javie, istnieją jednak mechanizmy pozwalające osiągnąć zbliżony efekt. Jednocześnie Python znacząco ułatwia introspekcję obiektów, tak więc właściwe użycie atrybutów obiektu pozostawia się programiście.

Dodatkowo każda funkcja, klasa i moduł mogą zostać opatrzone dokumentacją w kodzie źródłowym. Nie posiada ona wprawdzie rozbudowanych funkcji podobnych do javadoc, ale jest dostępna w czasie wykonania programu, a więc i w trybie interaktywnym.

[edytuj] Emulowanie typów, przeciążanie operatorów, wywoływanie jako funkcje

Python pozwala dopasowywać własności danej klasy w szerokim zakresie. Poprzez zaimplementowanie odpowiednich metod można sprawić, by obiekty danej klasy zachowywały się jak kolekcje, liczby, a nawet funkcje.

Przykład:

class Emulator:
 
    def __call__(self, x):
        print "Ten Emulator wywołano jako funkcję z parametrem x =", x
 
    def __getitem__(self, key):
        return str(key) + "-ty element w kontenerze klasy Emulator"
 
e = Emulator()
e('abc')
e(123)
print e['def']
print e[456]

Uruchomienie powyższego kodu da następujący rezultat:

Ten Emulator wywołano jako funkcję z parametrem x = abc
Ten Emulator wywołano jako funkcję z parametrem x = 123
def-ty element w kontenerze klasy Emulator
456-ty element w kontenerze klasy Emulator

[edytuj] Zmienna liczba argumentów funkcji

Możliwe jest tworzenie funkcji ze zmienną liczbą argumentów, argumentami o wartościach domyślnych (podobnie jak w C++), a także wywoływanie funkcji z podaniem nazw parametrów. Przykład:

def pokaz_argumenty(x, y, *args, **kwargs):
    print "x=%s, y=%s" % (x, y)
    print "Argumenty pozycyjne:",
    for aa in args:
        print aa,
    print
    print "Argumenty nazwane:",
    for kk in kwargs:
        print "%s=%s" % (kk, kwargs[kk]),
    print
 
pokaz_argumenty('abc', 123, 456, 'def', k=789, m='ghi')

Uruchomienie powyższego kodu da następujący rezultat:

x=abc, y=123
Argumenty pozycyjne: 456 def
Argumenty nazwane: k=789 m=ghi

[edytuj] Składnia

Python został zaprojektowany tak, by zapewnić możliwie dużą czytelność kodu źródłowego. Posiada prosty układ graficzny, używa angielskich słów tam, gdzie inne języki korzystają ze znaków interpunkcyjnych i posiada zdecydowanie mniej konstrukcji składniowych niż wiele języków strukturalnych, takich jak C, Perl czy Pascal.

Na przykład, w Pythonie występują tylko dwa rodzaje pętli: for, w której iteracja odbywa się po elementach listy (jak w Perlowym foreach), oraz while, która jest powtarzana dopóki warunek logiczny jest spełniony. Python nie posiada złożonej składni for w stylu C, do...while, ani Perlowego until, choć oczywiście można uzyskać ich odpowiedniki. Podobnie, Python posiada jedynie zestaw instrukcji wyboru if...elif...else - ani switch, ani goto z etykietą.

Od wersji 2.5 Python posiada operator warunkowy, analogiczny do warunek ? wartość1 : wartość2 znanego z C i Javy. Składnia: wartość1 if warunek else wartość2.

[edytuj] Struktura przez wcięcia

Cechą wyróżniającą Pythona spośród innych języków jest stosowanie wcięć do wydzielania bloków kodu. Jest to cecha unikalna wśród powszechnie stosowanych języków programowania, jako pierwsza rzucająca się w oczy programistom nie piszącym w Pythonie.

W językach programowania wywodzących strukturę blokową od Algola (niekoniecznie bezpośrednio) - np. Pascalu, C, czy Perlu - bloki kodu zaznaczane są klamrami lub słowami kluczowymi (C i Perl używają { }, Pascal używa begin i end). Jednakże we wszystkich tych językach programiści tradycyjnie stosują wcięcia by wyróżnić bloki w otaczającym kodzie.

Natomiast Python dziedziczy cechę mniej znanego języka ABC - zamiast interpunkcji czy słów kluczowych używa samych wcięć do zaznaczania bloków. Wyjaśnić to można na prostym przykładzie zamieszczonym poniżej. Przedstawiona jest w nim funkcja licząca silnię w C i w Pythonie:

silnia w C:

int silnia(int x) {
    if (x == 0) return 1;
    else return x * silnia(x-1);
}

silnia w Pythonie:

def silnia(x):
    if x == 0:
        return 1
    else:
        return x * silnia(x-1)

Dla niektórych programistów przyzwyczajonych do języków stylistycznie wzorowanych na Algolu, gdzie spacja nie ma znaczenia składniowego, może to być mylące. Spotyka się czasem niepochlebne porównanie do sztywnego systemu kolumnowego stosowanego w czasach fortranowych kart perforowanych.

Istotnie, w swoim czasie możliwość stosowania zapisu, w którym decydujące były jedynie symbole, była dużym postępem. Jednak dla programistów piszących w Pythonie stosowanie składniowo znaczących wcięć jest po prostu przedłużeniem konwencji, która i tak jest stosowana np. w C. Zwracają oni także uwagę na wadę "swobodnej" składni, polegającą na tym, że skoro wcięcia kodu są ignorowane, nie można wymusić jednej dobrej konwencji (stąd też konflikty między programistami, tzw. indentation wars). Nieprawidłowo wcięty kod może być mylący, gdyż czytający go programista i kompilator mogą go różnie zinterpretować.

[edytuj] Komentarze

Komentarze zaczynają się od znaku "#" i kończą z końcem wiersza. Komentarze wielolinijkowe można wstawiać w postaci wielowierszowych stringów (ograniczonych przez """ lub ''') bez żadnych działań (np. przypisań); stringi te nie są traktowane jako wyrażenia przez interpreter.

Wielowierszowy string umieszczony w pierwszej linii ciała funkcji lub klasy, lub na początku modułu, traktowany jest jako tzw. docstring (napis dokumentacyjny) dla tegoż obiektu. System dokumentacji Pythona może automatycznie tworzyć sformatowaną dokumentację z docstringów, dając w ten sposób ograniczoną wersję literate programming. Dokumentację można przeglądać w trybie interaktywnym interpretera za pomocą funkcji help lub z poziomu wiersza poleceń za pomocą skryptu pydoc.

[edytuj] Programowanie funkcyjne

Inną cechą Pythona jest dostępność składni funkcyjnej. Jak można oczekiwać, upraszcza to znacznie obróbkę list i innych kolekcji. Jedną z takich konstrukcji jest tzw. lista składana (ang. list comprehension), przejęte z funkcjonalnego Haskella, jak w przedstawionym poniżej przykładzie obliczania pięciu pierwszych potęg dwójki:

liczby = [1, 2, 3, 4, 5]
potegi_dwojki = [2**n for n in liczby]

Za pomocą list składanych można elegancko wyrazić algorytm quicksort, chociaż taka jego implementacja jest mało wydajna:

def qsort(L):
    if L == []: return []
    return qsort([x for x in L[1:] if x< L[0]]) + L[0:1] + \
           qsort([x for x in L[1:] if x>=L[0]])

[edytuj] Lambda

Nieco mylące dla zwolenników programowania funkcyjnego może być słowo kluczowe lambda. Bloki lambda mogą zawierać jedynie wyrażenia, nie instrukcje. Nie są one więc najbardziej ogólnym sposobem tworzenia funkcji. Zamiast tego można zdefiniować i zwrócić funkcję używając nazwy w zasięgu lokalnym, jak w poniższym przykładzie prostej funkcji generującej inną funkcję (ang. curry):

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

Funkcję tę można zaimplementować także poprzez zagnieżdżone lambdy, jak to się robi w Scheme. Wymaga to obejścia ograniczeń pythonowej lambdy poprzez zdefiniowanie funkcji obudowującej instrukcję print:

def drukuj(obj):
    print obj
 
zbuduj_sumator = \
    lambda(x): lambda(y): \
        drukuj("%d + %d = %d" % (x, y, x+y))

Oba warianty funkcji zbuduj_sumator zachowują się identycznie: dla podanej liczby x zwracają funkcję, która dla podanej liczby y wydrukuje wyrażenie arytmetyczne. Choć pierwszy styl jest częściej spotykany, drugi może być czytelniejszy dla programistów wyspecjalizowanych w programowaniu funkcyjnym.

Unikalne cechy pythonowych operatorów logicznych and i or dają jeszcze jedną unikalną możliwość programowania funkcyjnego. Przy wykorzystaniu tych dwóch operatorów można w wyrażeniach lambda zaimplementować dowolne sterowanie przebiegiem [1]. Wykorzystuje się to zwykle tylko do stosunkowo prostych konstrukcji (patrz rozdział o operatorach logicznych).

[edytuj] Generatory

Generatory są w Pythonie mechanizmem leniwej ewaluacji funkcji, która w przeciwnym razie musiałaby zwracać obciążającą pamięć lub kosztowną w obliczaniu listę. Stosowanie generatorów jest podobne do strumieni w Scheme.

Przykład ze strony domowej Pythona:

def generuj_calkowite(N):
    for i in xrange(N):
        yield i

Można teraz użyć tego generatora:

for i in generuj_calkowite(N):
    print i

Przed wykonaniem drugiego fragmentu kodu należy oczywiście zdefiniować zmienną N.

Definicja generatora przypomina definicję funkcji, ale zamiast słowa kluczowego return używa się yield. Jednakowoż generator jest obiektem przechowującym stan, mogącym wielokrotnie wchodzić do i opuszczać ten sam dynamiczny zakres. Wywołanie generatora może być użyte zamiast listy lub innej struktury, po której elementach będziemy iterować. Za każdym razem, gdy pętla for w powyższym przykładzie potrzebuje następnego elementu, wywoływany jest generator, który daje następny element.

W wersji 2.4 dodano wyrażenia generatorowe (ang. generator expressions), analogiczne do listy składanej. Zapis:

gen_kwadratow = (i**2 for i in range(5))

jest odpowiednikiem:

def gen_kwadratow():
    for i in range(5):
        yield i**2

[edytuj] Operatory logiczne

W Pythonie jako fałsz logiczny traktuje się:

  • liczbę zero (0, 0.0, 0e0, 0j, itp.)
  • False
  • None (null)
  • puste kolekcje ((, ), [], {}, itp.)
  • puste napisy
  • obiekty posiadające metodę __nonzero__(), jeśli zwraca ona False lub 0

Wszystko inne jest prawdą logiczną.

Operatory and i or zwracają wartość ostatnio obliczonego wyrażenia, np. "x==5 and 3" zwróci 3. W Pythonie często pisze się instrukcje w rodzaju print p or q by wykorzystać tę cechę.

Wartości logiczne zwracane przez operatory porównania (==, >, !=, is itp.), operator zawierania (in) oraz operator negacji (not) reprezentowane są przez obiekty True i False. Gdyby więc w powyższym przykładzie kolejność wyrażeń zamienić na "3 and x==5", zwrócona zostałaby wartość True, gdyż tak ewaluowane jest x==5. Operatory porównania można łączyć, np. "-1 < x < 0" zwróci True dla x z przedziału (-1, 0) - tak, jak w zapisie matematycznym, a inaczej niż np. w C++.

Od Pythona 2.3 True i False są wbudowanymi obiektami typu bool. Wcześniej do identyfikatorów tych przypisane były obiekty liczb całkowitych, odpowiednio 1 i 0.

[edytuj] Obsługa wyjątków

Python udostępnia i intensywnie wykorzystuje obsługę wyjątków jako sposób wykrywania błędów. Możliwe jest nawet przechwycenie wyjątku wywołanego przez błąd składniowy!

Styl programowania w Pythonie zaleca stosowanie wyjątków zawsze, gdy może pojawić się błąd wykonania. Na przykład nie testuje się praw dostępu do pliku przed jego otwarciem, lecz po prostu próbuje się go otworzyć, przechwytując wyjątek w razie braku dostępu.

[edytuj] Dekoratory

W wersji 2.4 wprowadzono nowy element składni - notację dekoratora. Przykład: w starszych wersjach Pythona, by uzyskać metodę statyczną klasy, należało napisać:

class C:
    def metoda(obj):
        pass
    metoda = staticmethod(metoda)

Notacja dekoratora pozwala, bardziej czytelnie, umieścić informację o konwersji (dekoracji) przed definicją funkcji:

class C:
    @staticmethod
    def metoda(obj):
        pass

Ogólnie zapis:

@dekorator
def funkcja():
    pass

jest równoważny zapisowi:

def funkcja():
    pass
funkcja = dekorator(funkcja)

[edytuj] Biblioteka standardowa

Python posiada rozbudowaną bibliotekę standardową, umożliwiającą jego stosowanie do wielu zadań. Twórcy języka stosują politykę tzw. Batteries Included, czyli dostarczenia wraz z pakietem instalacyjnym możliwie dużej liczby narzędzi. Moduły standardowej biblioteki można uzupełniać modułami pisanymi w C lub w Pythonie. Biblioteka standardowa jest szczególnie dobrze dostosowana do tworzenia aplikacji sieciowych, jako że obsługuje znaczną liczbę standardowych formatów i protokołów (np. MIME, HTTP). Dołączone są także moduły do tworzenia GUI (na bazie Tcl/Tk), obróbki wyrażeń regularnych, nawet prosty serwer WWW z obsługą CGI.

Większa część biblioteki standardowej dostępna jest na wszystkich platformach, dzięki czemu nawet duże aplikacje mogą często być uruchamiane bez konieczności modyfikacji na Uniksach, pod Windows, na Macintoshu i innych platformach. Przeciwnie, niż np. dla Javy, nie ogranicza się zestawu dostępnych funkcji do części wspólnej dla różnych platform; np. na uniksach dostępna jest funkcja fork(), choć nie ma jej np. w Windows.

[edytuj] Standardy dla bibliotek "zewnętrznych"

Podobnie, jak w wypadku innych języków, opracowany został szereg standardów tworzenia API pomocniczego, np. sterowników relacyjnych baz danych. Ze względu na w pełni dynamiczny system typów nie ma konieczności dołączania do biblioteki standardowej "interfejsu bazowego", jak to ma miejsce np. w przypadku JDBC. Twórca biblioteki zewnętrznej musi po prostu zapewnić, by stworzone przez niego moduły, funkcje i klasy posiadały odpowiednie atrybuty.

[edytuj] Inne cechy

Tak jak Lisp, interpreter Pythona posiada także tryb interaktywny, w którym wyrażenia można wprowadzać z terminala, otrzymując natychmiast wyniki. Zgodnie z założeniem twórców Pythona ułatwiać ma to naukę programowania, gdyż pozwala wypróbowywać fragmenty kodu ze skutkiem natychmiastowym. Standardowy shell nie jest jednakże zbyt wygodny ani nie posiada zbyt wielu funkcji (brak np. uzupełniania TABem) - braków tych jest pozbawiony IPython, będący częścią pakietu SciPy.

Wraz z Pythonem rozpowszechniana jest także biblioteka do unit testów, pozwalająca na tworzenie wyczerpujących testów poprawności tworzonego oprogramowania.

[edytuj] Zobacz też

Wikibooks
Zobacz podręcznik na Wikibooks:
Zanurkuj w Pythonie

[edytuj] Linki zewnętrzne

Static Wikipedia 2008 (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 -

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 -

Static Wikipedia 2006 (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 - 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 -

Sub-domains

CDRoms - Magnatune - Librivox - Liber Liber - Encyclopaedia Britannica - Project Gutenberg - Wikipedia 2008 - Wikipedia 2007 - Wikipedia 2006 -

Other Domains

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.debitoformtivo.it - https://www.wikipediaforschools.org - https://www.projectgutenbergzim.com