2009-10-22 21 views
5

http://docs.python.org/3.0/whatsnew/3.0.html mówi, że wymienia Siema nowy, ale moim zdaniem, tylko wymienia różnice, tak ma czy ktoś wie o wszelkich całkowicie nowych funkcji Python, pojawiła się w wersji 3.x?Co nowego w Pythonie 3.x?

Aby uniknąć pomyłek, zdefiniuję zupełnie nową funkcję jako coś, czego nigdy wcześniej nie używano w żadnym innym kodzie, podczas gdy podchodzisz do niego i mówisz "Ooch, błyszczący!". Na przykład. funkcja polegająca na inwazji kosmitów itp.

+3

Jak zdefiniowałbyś * całkowicie nową * funkcję? – SilentGhost

+0

Po prostu dodałem trochę, dziękuję za wskazanie tego. – Joe

+0

Głosowanie za blisko jako zbyt szerokie. –

Odpowiedz

4

Sekcja New Syntax wymienia, no, nową składnię w Pythonie 3.x. Myślę, że czasem można się spierać, czy rzeczy są nowe, czy zmienione. Na przykład. Łańcuch wyjątków (PEP 3134): czy jest to nowa funkcja, czy też jest to zmiana w maszynie wyjątku?

Ogólnie rzecz biorąc, polecam przyjrzeć się wszystkim PEP wymienionym w dokumencie. Są to główne zmiany/nowe funkcje.

9

Wiele całkowicie nowych funkcji wprowadzonych w wersji 3.0 zostało również przeniesionych do wersji 2.6, co jest zamierzonym wyborem. Jednak we wszystkich przypadkach nie było to praktyczne, więc niektóre z nowych funkcji pozostały tylko w Pythonie 3.

Sposób działania metaclasses jest prawdopodobnie największą pojedynczą nową funkcją. Składnia jest wyraźnie lepsza niż 2.* „s __metaclass__ przypisanie ...:

class X(abase, metaclass=Y): 

ale co ważniejsze, nowa składnia oznacza, że ​​kompilator wie metaklasą używać przed przetwarza ciało klasy, a więc może wreszcie metaklasa mieć wpływ na sposób przetwarzania treści klasy - nie było to możliwe w 2.*. Konkretnie, nowa metoda metaclassu __prepare__ może zwrócić każde zapisywalne odwzorowanie, a jeśli tak, to jest używana zamiast zwykłego dict do zapisywania przydziałów (i przypisywania słów kluczowych, takich jak def) przeprowadzanych w ciele klasy. W szczególności pozwala to na zachowanie porządku klasy w końcu dokładnie tak, jak zostało zapisane, jak również pozwala metaclass, jeśli tak zdecyduje, nagrać wiele przypisań/definicji dla dowolnej nazwy w ciele klasy, zamiast tylko ostatnie zadanie lub definicja wykonana dla tej nazwy. To znacznie rozszerza możliwości zastosowania klas z odpowiednimi niestandardowymi metaclasses, w porównaniu do tego, co było możliwe w 2.*.

Kolejna składnia biggie to annotations - patrz PEP, na który zwracam uwagę, aby poznać szczegóły. Standardowa biblioteka Pythona nie daje żadnej specjalnej semantyki do adnotacji, ale właśnie z tego powodu platformy i narzędzia innych firm są uprawnione do stosowania dowolnej semantyki, którą sobie życzą - takie zadania, jak sprawdzanie typu dla argumentów funkcji, są tutaj dozwolone, ale nie są wykonywane bezpośrednio przez standardowa biblioteka Pythona.

Istnieje oczywiście wiele innych (nowa „widoki” koncepcja zawarta takimi metodami jak DICT na .keys & c w 3.*, słów kluczowych, tylko argumenty, lepiej sekwencja rozpakowaniu nonlocal dla bardziej zaawansowanych zamknięć, ...), z zmienny, ale całkiem niezły i dobrze zaprojektowany.

Powiązane problemy