Ukazał się Python 2.5

 
Napisz nowy tematOdpowiedz do tematu    Forum programistyczne Programmers Zone Strona Główna -> Python, Perl, Bash
Autor Wiadomość
TPJ
#Moderator




Dołączył: 06 Kwi 2005
Posty: 484
Skąd: Gliwice
Pomógł: 13

PostWysłany: 20-09-06 10:53 Zacytuj zaznaczone Odpowiedz z cytatem

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. Wink (Ż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... Confused )

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
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora
masterix
@Administrator




Dołączył: 05 Gru 2004
Posty: 5071
Skąd: Poznań
Pomógł: 53

PostWysłany: 22-09-06 12:20 Zacytuj zaznaczone Odpowiedz z cytatem

Może warto przykleić ten temat ?
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora
TPJ
#Moderator




Dołączył: 06 Kwi 2005
Posty: 484
Skąd: Gliwice
Pomógł: 13

PostWysłany: 23-09-06 15:31 Zacytuj zaznaczone Odpowiedz z cytatem

A niech będzie. Jak się ukaże kolejny Python, to ten temat odkleję, a przykleję następny...
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora
progs
#Moderator




Dołączył: 16 Cze 2005
Posty: 6000
Skąd: 3m
Pomógł: 358

PostWysłany: 08-12-08 11:53 Zacytuj zaznaczone Odpowiedz z cytatem

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
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email Odwiedź stronę autora Numer GG Tlen
Wyświetl posty z ostatnich:   
Napisz nowy tematOdpowiedz do tematu    Forum programistyczne Programmers Zone Strona Główna -> Python, Perl, Bash Wszystkie czasy w strefie EET (Europa)
Strona 1 z 1

 
Skocz do:  
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

Mapa
Powered by phpBB © 2001, 2005 phpBB Group

 Polecane strony