| Autor |
Wiadomość |
TPJ #Moderator

Dołączył: 06 Kwi 2005 Posty: 484 Skąd: Gliwice Pomógł: 13
|
|
Dobra, w dziale niemrawo, to spróbuję choć trochę to rozruszać...
(Uwaga: ten tekst został napisany na podstawie źródeł dostępnych na głównej stronie Pythona. Jak ktoś woli czytać w oryginale - po angielsku, to lepiej będzie tam.)
W dniu wczorajszym, tj. 19 września 2006 roku, ukazała się nowa wersja Pythona - 2.5. Cóż w niej nowego?
Nowe cechy języka (wybór)
Wyrażenia warunkowe
W Pythonie często zdarzało się pisać konstrukcje typu
| Kod: | if wyrażenie:
x = wartość_jeśli_prawda
else:
x = wartość_jeśli_nieprawda |
Teraz będzie to można zapisać w jednej linii:
| Kod: | | x = wartość_jeśli_prawda if wyrażenie else wartość_jeśli_nieprawda |
Częściowe zastosowanie funkcji
W programowaniu funkcyjnym często tworzy się nowe funkcje poprzez ustalenie wartości niektórych parametrów istniejącej funkcji. Np. mamy funkcję f(a, b, c) i chcemy utworzyć funkcję g(b, c) będącą odpowiednikiem f(1, b, c). W językach funkcyjnych (np. te z rodziny ML - jak Ocaml, Alice, Oz czy Logo) to pestka. W Pythonie, dzięki modułowi functools, też będzie to teraz możliwe. Wygląda to tak:
| Kod: | import functools
def f(a, b, c):
...
g = functools.partial( f, a=1 )
g( 2, 3 ) # równoważne f( 1, 2, 3 ) |
Zależności modułów Pythona
Zostało dodane wsparcie dla sprawdzania zależności w modułach Pythona. Teraz będzie można łatwiej sprawdzić, jakie moduły są potrzebne, żeby ten jeden, na którym nam zależy, zadziałał.
Ujednolicona instrukcja try-except-finally
W poprzednich wersjach Pythona były dostępne dwie różne instrukcje try:
| Kod: | try:
...
except Wyjątek:
... |
oraz
| Kod: | try:
...
finally:
... |
Jeśli ktoś chciał połączyć funkcjonalność except z finally, to musiał tworzyć takie konstrukcje:
| Kod: | try:
try:
...
except Wyjątek:
...
finally:
... |
Teraz będzie można zapisać to prościej:
| Kod: | try:
...
except Wyjątek:
...
finally:
... |
Mój komentarz: wreszcie! Pozwoli to zaoszczędzić tworzenia sztucznie wyglądających konstrukcji w programach i zwiększy czytelność kodu.
Nowe cechy generatorów
Python oferuje programiście generatory. Można więc robić takie sztuczki:
| Kod: | def licznik( max ):
i = 0
while i < max:
yield i
i += 1
for i in licznik( 10 ):
print i # wypisze 0, 1, ..., 9 |
W Pythonie 2.5 będzie można modyfikować wartość zmiennej iteracyjnej:
| Kod: | def licznik( max ):
i = 0
while i < max:
v = (yield i )
if v is not None:
i = val
else:
i += 1
it = licznik( 10 )
for i in it:
if i == 1:
wynik = it.send(8)
print i # wypisze 0, 1, 9 |
Instrukcja with
Ogólnie chodzi o to, że pojawi się nowa instrukcja sterująca o postaci:
| Kod: | with wyrażenie [as zmienna]:
blok-with |
Działanie jest następujące: wynik wyrażenia może zostać związany z podaną nazwą zmiennej (której można potem używać w bloku-with). Cała magia polega na tym, że w wyniku wykonania wyrażenia powstaje obiekt, który może wykonać inicjalizację (ang. set-up) przed blokiem-with i finalizację (ang. clean-up) po bloku-with, nawet wówczas, jeśli w tym bloku wystąpi wyjątek.
Dzięki tej instrukcji będzie można pisać prostszy kod:
| Kod: | from __future__ import with_statement
with open( 'nazwa_pliku', 'r' ) as f:
for wiersz in f:
... |
Zaletą takiego kodu będzie to, że nawet jeśli w pętli wystąpi wyjątek, to otwarty plik zostanie zamknięty.
Mój komentarz: fajnie, że coś takiego się pojawia - bo nie zaszkodzi. Szkoda, że trzeba będzie to importować z __future__, bo w normalnym Pythonie ma się to pojawić dopiero w wersji 2.6.
Metody partition() i rpartition()
Python często jest używany do wykonywania operacji na napisach. Typowe jest odszukiwanie w napisie separatora, żeby przetwarzać osobno część napisu przed separatorem i po separatorze. Teraz to będzie ułatwione.
Metoda partition zwróci krotkę zawierającą trzy elementy: część napisu poprzedającą separator, sam separator, oraz część napisu następującą po separatorze. Jeśli separator nie zostanie znaleziony, to pierwszy element krotki będzie zawierał cały napis, a pozostałe dwa będą puste.
| Kod: | s = 'Przed kropką. Po kropce.'
print s.partition( '.' ) # ('Przed kropką', '.', ' Po kropce.') |
Metody startswith() oraz endswith() przyjmują krotki napisów jako parametry
W poprzednich wersjach Pythona, kiedy chciało się sprawdzić, czy dany napis przedstawia nazwę pliku z jednym z wielu rozszerzeń, trzeba było używać pętli:
| Kod: | rozszerzenia = ('.gif', '.png', '.bmp')
warunek = False
for i in rozszerzenia:
if napis.endswith( i ):
warunek = True
break
if warunek:
... |
Teraz będzie to można zrobić prościej:
| Kod: | if napis.endswith( ('.gif', '.png', '.bmp') ):
... |
Nowy parametr dla funkcji min() i max()
Funkcje te zyskały nowy parametr o nazwie key. Parametr ten powinien być związany z funkcją, która akceptuje jeden parametr i zwraca wartość. Funkcja min wyszuka taki element, dla którego zwracana przez tę funkcję wartość będzie najmniejsza.
| Kod: | def najmniejszeA( s ):
if s.startswith( 'A' ):
return 0
else:
return 1
l = ['napis1', 'napis2', 'A to jest napis 3']
print min( l, key=najmniejszeA ) # 'A to jest napis 3' |
Nowe funkcje wbudowane any() i all()
Funkcja any() zwraca True, jeśli dla jakiegokolwiek elementu sekwencji podanej jako parametr funkcja bool() zwróci wartość True. Funkcja all() działa podobnie, ale wartość True musi zostać zwrócona dla wszystkich elementów sekwencji.
Domyślne kodowanie źródeł
Domyślnym kodowaniem plików źródłowych stało się ASCII. Obecnie, jeśli w źródłach zostaną znalezione znaki spoza ASCII (np. polskie litery), a stosowne kodowanie nie zostało znalezione, to zostanie to potraktowane jako błąd (w poprzednich wersjach było wypisywane ostrzeżenie).
Nowe funkcje quit() i exit()
Początkujący w Pythonie często próbowali pisać "quit" lub "exit", żeby wyjść z interpretera. Teraz będą mogli wywołać funkcje quit() lub exit(), żeby osiągnąć ten efekt.
Ot, ciekawostka. (Że też komuś się chciało to robić...)
Inne udoskonalenia (wybór)
Zbiory (set i frozenset) powinny zużywać o jedną trzecią pamięci mniej i szybciej działać.
Operacje na napisach Unicode (wyszukowanie podnapisów, dzielenie napisów, zmiana kodowania) zostały przyspieszone.
Niektóre stałe w wyrażeniach będą zastępowane wyliczonymi wartościami. Np. kod "a = 2 + 3" zostanie zastąpiony kodem "a = 5".
Wywołania funkcji będą szybsze.
Obsługa wyjątków powinna działać o ok. 30% szybciej w porównaniu z wersją 2.4.
Nowe moduły (wybór)
Pojawił się moduł msilib, który pozwala na tworzenie plików .msi (instalatora MS Windows) oraz CAB.
I prawdziwa bomba: pojawił się moduł ctypes, który daje możliwość wywoływania funkcji z bibliotek dzielonych (pod Windows: DLL).
Dzięki temu będzie można robić takie sztuczki (ta akurat zadziała pod GNU/Linuksem):
| Kod: | import ctypes
libc = ctypes.CDLL( 'libc.so.6' )
result = libc.printf( "Hello, world!\n" ) |
(Szkoda tylko, że niemalże cały kod do pracy doktorskiej mam już napisany w Pyreksie, obrona za rok, a po raz czwarty przepisywać tego kodu mi się już nie chce... )
Miłośników baz danych (i nie tylko) może również zainteresować moduł sqlite3, który jest Pythonowym wrapperem biblioteki SQLite.
Ostatnio zmieniony przez TPJ dnia 23-09-06 15:36, w całości zmieniany 1 raz |
|
| Powrót do góry |
|
|
masterix @Administrator

Dołączył: 05 Gru 2004 Posty: 5071 Skąd: Poznań Pomógł: 53
|
|
Może warto przykleić ten temat ?
|
|
| Powrót do góry |
|
|
TPJ #Moderator

Dołączył: 06 Kwi 2005 Posty: 484 Skąd: Gliwice Pomógł: 13
|
|
A niech będzie. Jak się ukaże kolejny Python, to ten temat odkleję, a przykleję następny...
|
|
| Powrót do góry |
|
|
progs #Moderator

Dołączył: 16 Cze 2005 Posty: 6000 Skąd: 3m Pomógł: 358
|
|
Ukazal sie Python 3 zwany p3k:), lista zmian jest pokazna:
- obiekty zwaracajace do tej pory listy zwaracja iteratory i widoki
- print stalo sie funkcja
- nie ma podzialu na krotkie i dlugie liczby calkowite
- wprowadzono adnotacje, metaklasy
- opertory porownan zostaly uproszczone
- unikcode nie jest juz traktowane jako dane binarne
- True,False,None sa slowami kluczowymi jezyka
- zmiany w obsludze wyjatkow
- nowy model klas, stary zostal usuniety
- sporo innych zmian, detale: http://docs.python.org/3.0/whatsnew/3.0.html
pozdro.
_________________ Programowac kazdy moze, tylko nie kazdy ma tyle cierpliwosci i zapalu zeby zajac sie tym na poważnie:) |
|
| Powrót do góry |
|
|
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach
|
MapaPowered by phpBB © 2001, 2005 phpBB Group
|
|