Poniżej wymienione zostały wszystkie zmiany, które do rdzenia języka Python wnosi wersja 2.3.
isinstance(int(wyrażenie), int) jest False, jednak
w praktyce nie powinno to być źródłem problemów.
lista.insert(pozycja, wartość) dla
ujemnych pozycji powodowało wstawienie wartości na początku listy.
Zachowanie to uległo obecnie zmianie na rzecz zgodności z indeksowaniem w
wykrojeniach, tak więc jeśli pozycja ma wartośći -1, wartość zostanie
wstawiona przed ostatnim elementem, itp.
lista.index(wartość), poszukująca podanej wartości wśród
elementów listy i zwracająca indeks właściwego elementu, obsługuje obecnie opcjonalne
argumenty określające początek i koniec fragmentu listy, który ma zostać poddany
wyszukiwaniu.
>>> d = {1:2}
>>> d
{1: 2}
>>> d.pop(4)
Traceback (most recent call last):
File "stdin", line 1, in ?
KeyError: 4
>>> d.pop(1)
2
>>> d.pop(1)
Traceback (most recent call last):
File "stdin", line 1, in ?
KeyError: 'pop(): dictionary is empty'
>>> d
{}
>>>
Istnieje również nowa metoda klasy, dict.fromkeys(iterowalny, wartość), która
tworzy słownik o kluczach uzyskanych z podanego iteratora iterowalny i wartościach
równych podanemu argumentowi wartość, przy czym domyślną wartością jest None.
(Autorem odpowiednich łatek jest Raymond Hettinger.)
Dodatkowo, konstruktor dict() dopuszcza teraz również użycie argumentów słownikowych, co upraszcza tworzenie niewielkich słowników:
>>> dict(czerwony=1, niebieski=2, zielony=3, czarny=4)
{'niebieski': 2, 'czarny': 4, 'zielony': 3, 'czerwony': 1}
(Autor: Just van Rossum.)
__debug__, więc nie jest możliwe wyłączenie asercji poprzez zmianę
wartości __debug__.
Uruchomienie Pythona z opcją -O nadal powoduje generowanie
kodu pozbawionego wszelkich asercji.
>>> import types
>>> m = types.ModuleType('abc','napis_dokumentujący')
>>> m
<module 'abc' (built-in)>
>>> m.__doc__
'napis_dokumentujący'
raise "Wystąpił błąd"). Zgłoszenie wyjątku
z użyciem napisu spowoduje obecnie ostrzeżenie PendingDeprecationWarning.
None w roli zwykłego identyfikatora spowoduje
wygenerowanie ostrzeżenia SyntaxWarning. W przyszłych
wersjach Pythona None może ostatecznie stać się słowem kluczowym.
for wiersz in ob_plikowy. Obiekty plikowe zawierają również
atrybut tylko do odczytu o nazwie encoding, informujący o
kodowaniu używanym w treści pliku. Zapisywane do pliku napisy Unicode
są automatycznie konwertowane na bajty przy użyciu podanego kodowania.
Samuele Pedroni jako pierwszy zwrócił uwagę na problem, zaimplementował również poprawkę, korzystającą z algorytmu C3.
>>> s = socket.socket() >>> s.__class__ <type 'socket'>
W przypadku Pythona 2.3 wynik jest odmienny:
>>> s.__class__ <type '_socket.socket'>
X in Y, w którym X i
Y są napisami, wartością X musiał być pojedynczy znak.
Teraz X może być napisem o dowolnej długości, a wyrażenie
X in Y da w wyniku True, jeśli
napis X jest częścią napisu Y. Jeśli X jest napisem
pustym, to wartością wyrażenia będzie zawsze True (niezależnie
od wartości Y).
>>> 'ab' in 'abcd' True >>> 'ad' in 'abcd' False >>> '' in 'abcd' True
Zwróćmy uwagę, że wartość wyrażenia nie mówi nam, w którym miejscu drugiego napisu zawiera się pierwszy. Jeśli potrzebna jest taka informacja, należy użyć metody find().
>>> ' abc '.strip()
'abc'
>>> '><><abc<><><>'.strip('<>')
'abc'
>>> '><><abc<><><>\n'.strip('<>')
'abc<><><>\n'
>>> u'\u4000\u4001abc\u4000'.strip(u'\u4000')
u'\u4001abc'
>>>
(Sugestia: Simon Brunning, implementacja: Walter Dörwald)
% jest oczywiście nadal bardziej elastyczny i ma większe
możliwości od tej metody.
>>> '45'.zfill(4) '0045' >>> '12345'.zfill(4) '12345' >>> 'goofy'.zfill(6) '0goofy'
(Autor: Walter Dörwald.)
isinstance(obiekt, basestring) będzie miało
wartość True dla napisu dowolnego typu.
Jest to typ w pełni abstrakcyjny, więc nie można tworzyć instancji
basestring.
SET_LINENO został usunięty. Może to dać w wyniku
drobne przyśpieszenie wykonywania kodu.
Dłuższe wyjaśnienie odnajdziesz w sekcji 21.
(Usunięte przez Michaela Hudsona.)
for i in xrange(n) jest nieco szybszy, niż
for i in range(n). (Autor łatki: Raymond Hettinger.)
Wymiernym rezulatatem optymalizacji wprowadzonych w Pythonie 2.3 jest fakt, iż w teście pystone wykonuje on programy o ok. 25% szybciej, niż Python 2.2.
Zajrzyj do Informacji na temat tej publikacji... aby pomóc w jej rozwoju.