Mateusz Mazurek – programista z pasją

Python, architektura, ciekawostki ze świata IT

Programowanie Programowanie webowe

Czego nie powinniśmy robić w Pythonie? #4

Witam w czwartym artykule z serii dotyczącej tego, czego nie powinniśmy robić w Pythonie. Załączam trzy poprzednie wpisy:

Funkcja zip

Jak jeden mąż, osoby początkujące, pisząc kod w Pythonie i chcąc iterować po dwóch listach jednocześnie, robią coś takiego:

1
2
3
4
5
6
7
8
9
10
>>> a = [1, 2, 3]
>>> b = ['a', 'b', 'c']
>>>
>>> for i, x in enumerate(a):
...     value_from_b = b[i]
...     print(value_from_b, x)
...
a 1
b 2
c 3

Czyli, używając funkcji enumerate, dostają się do aktualnego indeksu i korzystając z niego, biorą wartość z drugiej tablicy. No niby można. Ale to nie jest Pythonowe rozwiązanie.

Python dostarcza wbudowane narzędzie do tego typu operacji, czyli wspomnianą w nagłówku, funkcję zip. A działa ona tak:

1
2
3
4
5
6
7
8
9
>>> a = [1, 2, 3]
>>> b = ['a', 'b', 'c']
>>>
>>> for x, y in zip(a, b):
...     print(y, x)
...
a 1
b 2
c 3

Co ciekawe – ta funkcja przyjmuje jeden lub więcej iterabli (*args), więc możemy zrobić coś takiego:

1
2
3
4
5
6
7
8
9
10
>>> a = [1, 2, 3]
>>> b = ['a', 'b', 'c']
>>> c = (11, 22, 33)
>>> d = 'wxz'
>>> for x, y, z, w in zip(a, b, c, d):
...     print(x, y, z, w)
...
1 a 11 w
2 b 22 x
3 c 33 z

I tak, w Pythonie string jest iterable. Jeśli natomiast przekazane obiekty nie mają tej samej długości, to zip zawęża zakres do najkrótszej listy:

1
2
3
4
5
6
7
8
9
>>> a = [1, 2, 3]
>>> b = ['a', 'b', 'c', 'd', 'e']
>>> c = (11, 22, 33)
>>> for x, y, z in zip(a, b, c):
...     print(x, y, z)
...
1 a 11
2 b 22
3 c 33

To, co warto wiedzieć, poza tym jak używać tej funkcji, to to co dokładnie ona zwraca. A zwraca po prostu obiekt iterable, którego elementami są tuple zawierające wartości z przekazanych mu list.


Czekaj, stop!

Podoba Ci się to co tworzę? Jeśli tak to zapraszam Cię do zapisania się na newsletter:
a w ramach prezentu otrzymasz całkowicie za darmo, dwa dokumenty PDF „6 (nie zawsze oczywistych) błędów popełnianych podczas nauki programowania” który jest jednym z efektów ponad siedmioletniej pracy i obserwacji rozwoju niejednego programisty oraz „Wstęp do testowania w Pythonie”, będący wprowadzeniem do biblioteki PyTest.
Jeśli to Cię interesuje to zapraszam również na swoje social media.

Jak i do ewentualnego postawienia mi kawy :)
Postaw mi kawę na buycoffee.to

Zamiana wartości zmiennych z użyciem zmiennej tymczasowej

Czyli mamy zmienną a i b. Chcemy by w zmiennej a była wartość zmiennej b i w zmiennej b była wartość zmiennej a.

I kod wygląda najczęściej tak:

1
2
3
4
5
6
7
8
9
>>> a = 5
>>> b = 6
>>>
>>> c = a
>>> a = b
>>> b = c
>>>
>>> print(a, b)
6 5

A możesz zrobić to znacznie ładniej:

1
2
3
4
5
>>> a = 5
>>> b = 6
>>> a, b = b, a
>>> print(a, b)
6 5

Przyznaj, że to raj perfekcjonistów:)

Budowanie warunków

Sytuacja jest prosta – chcemy napisać warunek, który będzie sprawdzał czy wartość zmiennej zawiera się w jakimś przedziale. I dostajemy taki kod:

1
2
3
4
5
x = 5


if x > 4 and x < 10:
    pass

To, co powinniśmy zauważyć, a już na pewno nie zignorować, to reakcja PyCharma na taki kod, która sugeruje, że coś jest nie tak!

PyCharm sugeruje nam, że taki zapis jest nie Pythonowy. W Pythonie możemy tworzyć takie warunki, określając przedział bardziej matematycznie tj:

1
2
3
4
5
x = 5


if 4 < x < 10:
    pass

I to na tyle, jeśli chodzi o czwartą część. Będą kolejne, choć pewnie stali czytelnicy zauważyli, że potrzebowałem chwilowej przerwy od tej serii, to zapewniam – będą kolejne!

Dzięki za wizytę,
Mateusz Mazurek

A może wolisz nowości na mail?

Subskrybuj
Powiadom o
guest

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

3 komentarzy
Inline Feedbacks
View all comments
Mateusz H.

Hej,
 
Tytuł pierwszego rozdziału jest trochę mylący, bo pomyślałem że powinienem szerokim łukiem omijać funkcję zip, ale jak już się wczytałem to zrozumiałem.
 
Lubię Pythona za uproszczenie operacji swap. Lepiej się czyta kod dzięki temu. Co do operacji warunkowych to PyCharmowe rozwiązanie jest mniej czytelne. Ciekaw jestem czy wpływa ono na złożoność obliczeniową i czasową programu?
 
Pozdrawiam.