Jedną z fajnych rzeczy w Pythonie jest to, że łatwo jest sprawić, by wszystko działało. Kolejną fajną rzeczą jest to, że w Pythonie jest wiele sposobów na to aby kod był czystszy i łatwiejszy do napisania. To co, awansujemy się z początkującego na nowicjusza? ;-)
Zastąp range(len()) wyrażeniem enumerate()
Gdy zajdzie potrzeba iteracji po zbiorze i śledzenia indeksu, do którego uzyskujesz dostęp, wiele osób zwraca się do iteracji po range(len(collection))
. Tymczasem użycie funkcji enumerate()
jest o wiele bardziej eleganckim i czystszym sposobem na zrobienie tego samego.
Funkcja enumerate zwraca obiekt wyliczeniowy, który przechowuje indeks i wartość każdego elementu. Dzięki temu możesz lepiej śledzić, gdzie jesteś w swojej kolekcji, ale także jaką masz obecnie pobraną wartość. Rzućmy okiem na przykład ilustrujący to za pomocą metod range(len(collection))
i enumerate(collection)
:
# Define a collection, such as list:
names = ['Nik', 'Jane', 'Katie', 'Jim', 'Luke']
# Using the range(len(collection)) method, you'd write:
for i in range(len(names)):
print(i, names)
# Using enumerate, you can define this by writing:
for idx, name in enumerate(names):
print(idx, name)
# Both ways of doing this return:
# 0 Nik
# 1 Jane
# 2 Katie
# 3 Jim
# 4 Luke
Jeśli chcesz, aby zaczynać gdzieś indziej niż na zerze, możesz po prostu przekazać swoją wartość początkową do parametru start=
. Powiedzmy, że chcemy, aby zacząć od 1. Możesz po prostu napisać:
# Define a collection, such as list:
names = ['Nik', 'Jane', 'Katie', 'Jim', 'Luke']
# Using enumerate, you can define this by writing:
for idx, name in enumerate(names, start=1):
print(idx, name)
# This returns:
# 1 Nik
# 2 Jane
# 3 Katie
# 4 Jim
# 5 Luke
Przestań używać nawiasów kwadratowych, aby uzyskać elementy słownika - użyj .get()
Załóżmy, że masz słownik, który wygląda tak:
nik = {
'age':32,
'gender':'male',
'employed':True,
}
Jeśli chcesz uzyskać wartość dla wieku to możesz być przyzwyczajony do napisania nik['age']
. Chociaż działa to w tym przypadku, nie zadziała, gdy wartość nie będzie istniała. Na przykład próba uzyskania dostępu do nieistniejącej wartości „location” spowoduje zgłoszenie błędu KeyError. Jasne, możesz użyć „try” z wyjątkiem, ale po co to robić, skoro możesz zamiast tego użyć metody .get()
? Metoda zwróci wtedy po prostu [i]None w przypadku braku klucza i będzie kontynuowała swoje działanie.
nik = {
'age':32,
'gender':'male',
'employed':True,
}
print(nik.get('location'))
# Returns:
# None
Uprość iterację po wielu listach za pomocą Zip()
Może się zdarzyć, że otrzymasz wiele kolekcji (na przykład list) i będziesz musiał iterować po każdej z nich zbiorczo. Możesz to zrobić za pomocą range(len(collection))
, ale jest to mało czytelne.
Używając wbudowanej w Pythona funkcji zip()
możemy to uprościć. Funkcja zip()
zwraca obiekt zip, ale możesz przekształcić go w różne typy danych. Spójrzmy na ten przykład i zwróćmy listę krotek:
names = ['Nik', 'Jane', 'Melissa', 'Doug']
ages = [32, 28, 37, 53]
gender = ['Male', 'Female', 'Female', 'Male']
# Zipping through lists with zip()
zipped = zip(names, ages, gender)
zipped_list = list(zipped)
print(zipped_list)
# Returns:
# [('Nik', 32, 'Male'), ('Jane', 28, 'Female'), ('Melissa', 37, 'Female'), ('Doug', 53, 'Male')]
Sprawdź oferty pracy na TeamQuest
Użyj f-strings aby łatwo wypisywać komunikaty w konsoli
Począwszy od Pythona 3.8, f-strings mogą być również używane do samodzielnego dokumentowania kodu za pomocą znaku „=”. W praktyce oznacza to, że kiedy wyświetlasz wartość zmiennej w konsoli, nie musisz już pisać f"variable_name = {variable_name}"
.
Zamiast:
some_variable = "HELLO!"
print(f"some_variable={some_variable}")
# Returns
# some_variable=HELLO!
możesz napisać tak:
some_variable = "HELLO!"
print(f"{some_variable=}")
# Returns
# some_variable=HELLO!