Co nowego w Python 3.8

Python 3.8

Obecnie najnowszą, oficjalną wersją języka jest wersja Python 3.8, wersja ta posiada kilka nowości względem poprzednich edycji Pythona. W tym wpisie przyjrzymy się pokrótce najważniejszym zmianom jakie wprowadzono w tej wersji, oraz zastanowimy się jak można je wykorzystać.

1. Wyrażenie przypisania

Operator morsa (walrus operator) to jedna z najważniejszych, nowych funkcjonalności wprowadzonych w Pythonie 3.8.

Składnię tego operatora możemy najprościej przedstawić w następujący sposób:

nazwa_zmiennej := wyrażenie

Może on przydać się nam przede wszystkim w przypadkach gdy w instrukcji warunkowej np. operatora if lub while wykonujemy jakąś operację, oraz chcemy korzystać z wyników tej operacji wewnątrz bloku tego operatora.

Aby rozjaśnić Ci zasadę działania tego operatora przedstawię Ci jako przykład kawałek kodu, oraz jego uproszczoną, przy pomocy wyrażenia przypisania, wersję.

f = open(filename)
while True:
    line = f.readline()
    if not line:
        break
    m = data_pattern.match(line)
    if m:
        k, v = m.group(1, 2)
        data[int(k)] = int(v)
f = open(filename)
while line:= f.readline():
    if m:= data_pattern.match(line):
        k, v = m.group(1, 2)
        data[int(k)] = int(v)

Jak widzisz mogliśmy znacząco uprościć nasz kod.

Innym przykładem może być też użycie operatora morsa w list comprehension, gdy chcemy wykorzystać dane wyrażenie jako wynik oraz w filtrze.

filtered_data = [y for x in data if (y := f(x)) is not None]

2. Argumenty wyłącznie pozycyjne

Do tej pory w Pythonie 3 mogliśmy oznaczyć argumenty, jako te które możemy stosować wyłącznie jako argumenty nazwane. W wersji Python 3.8 dostaliśmy możliwość oznaczenia tych argumentów, które mają być stosowane jedynie jako argumenty pozycyjne.

Argumenty pozycyjne to takie, których interpretacja zależy od kolejności w wywołaniu funkcji.
Argumenty nazwane można podawać w dowolnej kolejności ale przekazana wartość musi być poprzedzona jego nazwą.
Więcej o argumentach funkcji przeczytasz tutaj.

Z tej funkcji możesz skorzystać, podając jako jeden z argumentów symbol /, wszystkie argumenty przed nim będą argumentami wyłącznie pozycyjnymi.
Spójrz na przykład:

def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)

f(10, 20, 30, d=40, e=50, f=60)

Jak widzisz w powyższej funkcji argumenty a i b to argumenty wyłącznie pozycyjne, natomiast e i f wyłącznie nazwane.
Teraz spróbuj wywołać naszą funkcję w następujący sposób:

f(10, b=20, c=30, d=40, e=50, f=60)
f(10, 20, 30, 40, 50, f=60)

Pierwsze wywołanie spowoduje błąd ponieważ argument b nie może być nazwany, natomiast w drugim argument e musi być argumentem nazwanym.

3. Specyfikator = w f-stringach

F-string jest systemem formatowania napisów wprowadzonym w Pythonie3. Pozwala on na łatwe i przejrzyste uzupełnianie napisów w sposób analogiczny do tego na co pozwala funkcja format.

Nowością jest operator =, który pozwala na uzupełnienie napisu o nazwę i wartość zmiennej. Opcja ta może być bardzo przydatna podczas tworzenia np. logów z wykonania naszego programu. Spójrzmy na przykład:

user_id = '123'
user_name = 'ala_ma_kota'
print(f'User {user_id=} logged as {user_name=}')
# User user_id=123 logged as user_name=ala_ma_kota

Co więcej operator = w f-string, pozwala również na wykonanie danego wyrażenia i wypisanie jego wyniku.

l = [1,3,5,6]
print(f'{l=} {sum(l)=}')

Podsumowanie

Jak widać w nowej wersji Pythona dodano kilka ciekawych innowacji. Ponadto wprowadzono szereg drobnych zmian, które mają za zadanie usprawnić naszą pracę.
Dodatkowo pozostałe nowości możesz znaleźć w dokumentacji Pythona.

Na zakończenie zachęcam Cię do odwiedzenia moich pozostałych wpisów na tym blogu, oraz życzę powodzenia w dalszej nauce Pythona.


A jeżeli chcesz być na bieżąco z nowymi artykułami polecam zasubskrybować ten blog 🙂




Brak komentarzy


You can leave the first : )



Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *