Wpis z mikrobloga

Napisałem skrypt w Pythonie i chciałbym aby ktoś rzucił fachowym okiem i wytknął mi większe błędy. Chodzi mi o wszelkie odstępstwa od przyjętych norm, jakieś nieprawidłowości, czy wszystko to co można by poprawić. Chociażby czy kod jest w miarę sensownie rozplanowany, a może czy jest zbyt mało / dużo funkcji, etc.
Ta aplikacja łączy się z API serwisu Strava który jest platformą społecznościową dla kolarzy. Takie ulepszone Endomondo. Mój skrypt przeszukuje wszystkie przejażdżki (aktywności) użytkownika identyfikowanego poprzez access_token i wyszukuje te segmenty (odcinki tras) na których dany użytkownik znajduje się w Top10 najszybszych kolarzy.

Z chęcią wysłucham wszelkich uwag.
https://pastebin.com/d9fEuwQ5

#python #naukaprogramowania
  • 11
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Matt23:
Tak na szybciora:
1. Gdy definiujesz nazwy funkcji to staraj się uzywać albo camela, albo underscora - nie rób tego naprzemiennie. Njalepiej funkcje undersocrem, a klasy camelem.
2. w
def callApi(resource, pathparam, queryparams={}):
nie dawaj jako domyślnego parametru słownika lub listy
  • Odpowiedz
@Matt23: 1. To raczej prywatna opinia ale formatowany string jest lepszy niz konkatenacja(inia 30)
2. Pętla w funkcji getathleteactivities() moze zostać zamieniona na rekurencyjna funkcje wewnętrzną z rosnącym numerem strony get_page(page=1) ...
3. Nie korzystaj z var == 0, bardziej czytelne jest not var
4. If Var is not None => if var
5. Poczytaj o filter, map. Pętla w linii 84 moze byc zamieniona na jedna linijkę
  • Odpowiedz
@araneo: Przyznam, że jeszcze nie wiem z czym to się je, ale na pewno zgłębię temat

@pshemeq: z rozmachu camelCasem zacząłem pisać, a później poprawiałem na underscore'a i stąd pomieszanie stylów mi wyszło. Poprawiłem łączenie stringów i tę nic nie mówiącą zmienną r - bazowałem na przykładzie z dokumentacji i tak bezmyślnie ją przepisałem.

@mackar: Miałeś na myśli taką funkcję wewnętrzną jaką umieściłem tutaj: https://pastebin.com/L7G48t06 ?
  • Odpowiedz
Zawsze jak piszę program to się zastanawiam, czy gdybym stworzył coś takiego w pracy, to by mnie o---------i czy stwierdzili, że dobrze wykonałem zadanie. Tak więc tutaj, rozumiem, nie miałbym się czego wstydzić? Może nie jest to kod na 15k, ale na 1,5k też nie ( ͡° ͜ʖ ͡°)
  • Odpowiedz
via Wykop Mobilny (Android)
  • 0
@Matt23: w funkcji getidsofsegmentsinactivity masz dwa razy sprawdzany upperlimit. I dwa razy jest on sprawdzany czy jest równy 0. Jednak gdy za pierwszym razem będzie równy 0 to zostanie zwrócony wynik i do drugiego sprawdzenia nie dojdziesz.

No i jeszcze
If len(activities)) == 0
Możesz zamienić na
If not activities
Jeśli lista będzie posta to i tak warunek nie będzie spełniony:-)
  • Odpowiedz
@pshemeq: zmienna upper_limit zmienia swoją wartość wraz z przebiegiem pętli. Ona tak na prawdę służy za drobną optymalizację, bo jeśli na trasie zdobyłem 3 osiągnięcia, to na maksymalnie 3 segmentach jestem w top10. Tak więc jak znajdę tyle segmentów ile osiągnięć to nie ma sensu kontynuować pętli. Aczkolwiek rzadko się tak zdarza, bo zwykle zdobyte osiągnięcia oznaczają co innego.
Może źle nazwałem tę zmienną i stąd to nieporozumienie.
  • Odpowiedz