Co nowego w Python 3.8

W tym artykule chciałbym przedstawić funkcje wprowadzone w Python 3.8, które mogą wpłynąć na to, jak będziesz pisał swój nowy kod, lub refaktorował „przestarzałe” fragmenty.

python 3.8

Co nowego w Python 3.8


W tym artykule chciałbym przedstawić funkcje wprowadzone w Python 3.8. Mogą one wpłynąć na to, jak będziesz pisał swój nowy kod, lub refaktorował „przestarzałe” fragmenty. Tłumaczenia nazw nowych funkcji nie są oficjalne. Ale bazują na tym, jak te funkcje działają i co oznaczają w bezpośrednim tłumaczeniu.

Wyrażenia przypisania (Assignment expressions)

Pierwszą i chyba najważniejszą zmianą jest wprowadzenie nowego operatora := dzięki któremu możemy przypisać wartość do zmiennej wewnątrz wyrażenia. Potocznie nazwany „operatorem morsa” (eng. „the walrus operator”), gdyż podobno przypomina oczy i kły morsa. Nowego operatora możemy używać w następujący sposób:

a = 0
b = [0, 1, 3]
 
 
for i in b:
    if (a:=1) == i:
        print(i, a)

Przypisana w ten sposób wartość do zmiennej a: „if(a:=1) == i:”, automatycznie po wykonaniu tego wyrażenia warunkowego przypisze do niego wartość 1, niezależnie od tego, czy warunek zostanie spełniony, czy nie. „Operator morsa” możemy stosować wszędzie, gdzie występują instrukcje warunkowe, nawet w pętli while. Można również używać zapisu if i == (a:=1): należy jednak pamiętać aby nowa składnia z operatorem przypisania była w nawiasie.

Parametry pozycyjne (Positional-only parameters)

Kolejną nową funkcją Python’a 3.8 są parametry pozycyjne. Wprowadzono nową składnię parametrów funkcji „/” i „*„, która wskazuje, że niektóre parametry funkcji muszą być określone lokalnie i nie mogą być używane jako argumenty słów kluczowych (oznaczone przed /), a które argumenty muszą być argumentami słów kluczowych i nie mogą być określone lokalnie (oznaczone po *):

def new_func(s, y, /, z, *, x):
    pass
 
new_func(1, 2, 3, x=4)
new_func(1, 2, z=3, x=4)

Powyższy przykład przedstawia poprawne wykorzystanie nowej składni. Wymusza on na określenie argumentów s i y lokalnie, jako 1 i 2. Argument z pozostaje do wpisania w dowolnej formie. Za to na x wymuszone jest użycie nazwy argumentu przy jego inicjalizacji. Jeżeli spróbujemy złamać te reguły, otrzymamy informację:

def new_func(s, y, /, z, *, x):
    print(s, y, z, x)
    
new_func(1, y=2, z=3, x=4)
 
TypeError: new_func() got some positional-only arguments passed as keyword arguments: 'y'

Wsparcie do samodokumentującego się f-strings’a

Wprowadzony w Python 3.6 f-string znacznie poprawił czytelność wprowadzanych zmiennych do łańcucha znaków. Jednak w tej wersji Python’a nadal musieliśmy opisywać jakiej zmiennej otrzymujemy wartość. Od wersji 3.8 dostajemy możliwość wydrukowania od razu nazwy zmiennej, wraz z jej wartością wystarczy dodać znak = (równości) po nazwie zmiennej w f-string’u:

>> print_that = "done"
>> print(f"{print_that=}")
print_that='done'

Python 3.8 wprowadza jeszcze szereg pomniejszych zmian, ale te trzy powyższe myślę, że wpłyną na nasz kod najbardziej. Wszystkie zmiany możecie znaleźć na stronie:

close

Newsletter