programowaniePython Team Lead

Opowiedz o konwencjach nazewnictwa (PEP8 i inne) w Pythonie. Jak nieprzestrzeganie tych konwencji wpływa na praktykę pracy z kodem? Podaj przykłady rzeczywistych konsekwencji naruszenia PEP8 w projektach.

Zdaj rozmowy kwalifikacyjne z asystentem AI Hintsage

Odpowiedź.

W Pythonie obowiązuje szereg konwencji stylu kodu, z których podstawową jest PEP8:

  • Nazwy zmiennych/funkcji: lower_case_with_underscores
  • Nazwy klas: CapitalizedCamelCase
  • Stałe: ALL_CAPS
  • Długość linii: do 79 znaków
  • Wcięcia: 4 spacje (nie tabulatory!)
  • Spacje wokół operatorów: a = b + c
  • Importy: każdy import w osobnej linii, najpierw biblioteki standardowe, potem zewnętrzne, a na końcu lokalne

Przestrzeganie PEP8 ułatwia pracę zespołową, zwiększa czytelność, obniża próg wejścia, ułatwia automatyzację testowania itd.


Pytanie z haczykiem.

W PEP8 zaleca się unikanie jedletterowych nazw zmiennych. Czy jednak można używać krótkich nazw w list comprehensions lub w lambdach? Dlaczego?

Odpowiedź: W podstawowym przypadku dla krótkich iteracji (np. w list comprehensions dla zmiennych oznaczających, takich jak x, i, j) dopuszcza się użycie jedletterowych nazw, aby nie zagracać krótkich wyrażeń. W przypadku bardziej złożonych wyrażeń lepiej jest nadawać sensowne nazwy.

Przykład:

# Dopuszczalne: squares = [x**2 for x in numbers] # Lepiej: squares = [number**2 for number in numbers]

Przykłady rzeczywistych błędów wynikających z braku znajomości szczegółów tematu.


Historia 1

W projekcie bankowym natrafiono na sytuację, w której część funkcji i parametrów była nazwana w różnych tradycjach (CamelCase, snake_case, przez myślnik). Nowy członek zespołu ciągle się mylił, gdzie dokładnie używane są nazwy — prawie dwie tygodnie zajęło usuwanie kolizji i zmiana nazw zmiennych.


Historia 2

W projekcie inżynieryjnym danych nie przestrzegano wcięć, mieszano tabulatory i spacje. Powodowało to błędy składni (SyntaxError) na różnych stacjach deweloperskich, a część programistów spędzała godziny na szukaniu zbędnych spacjal.


Historia 3

Na dużym portalu edukacyjnym pomieszano krótkie i długie nazwy zmiennych. Na przykład funkcję do przetwarzania logów nazwano l(), a obsługę logowania — long, co w wielu IDE zajmowało dużo czasu na nawigację i spowodowało zamieszanie w używaniu funkcji z elementem l z listy.