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.
- Magiczne metody – czyli szczypta magii w Pythonie
- Pytest – ujarzmij fixtury i mocki
- Co nowego w Python 3.8
A jeżeli chcesz być na bieżąco z nowymi artykułami polecam zasubskrybować ten blog 🙂
Brak komentarzy
You can leave the first : )