Cześć! :)
Przez lata zdobywania doświadczenia natknąłem się na kilka ciekawostek które mogą nie być oczywiste dla osób zaczynających pracować z tym językiem, do tej wiedzy dodałem kilka rzeczy które są dookoła samych technikalii i w ramach rozwinięcia filmiku Przemka na ten sam temat – powstał ten artykuł. Zapraszam :)
Zen of Python to lista założeń w okół których był tworzony ten język. Co ciekawe, zasady te są dostępne z poziomu samego języka. Spróbuj uruchomić taki plik:
1 | import this |
A zobaczysz że efektem jego uruchomienia są właśnie spisane założenia odnośnie tego języka:
The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than right now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those!
Co po Polsku brzmi tak:
Piękne jest lepsze niż brzydkie. Wyrażone wprost jest lepsze niż domniemane. Proste jest lepsze niż złożone. Złożone jest lepsze niż skomplikowane. Płaskie jest lepsze niż wielopoziomowe. Rzadkie jest lepsze niż gęste. Czytelność się liczy. Sytuacje wyjątkowe nie są na tyle wyjątkowe, aby łamać reguły. Choć praktyczność przeważa nad konsekwencją. Błędy zawsze powinny być sygnalizowane. Chyba że zostaną celowo ukryte. W razie niejasności powstrzymaj pokusę zgadywania. Powinien być jeden -- i najlepiej tylko jeden -- oczywisty sposób na zrobienie danej rzeczy. Choć ten sposób może nie być oczywisty jeśli nie jest się Holendrem. Teraz jest lepsze niż nigdy. Chociaż nigdy jest często lepsze niż natychmiast. Jeśli rozwiązanie jest trudno wyjaśnić, to jest ono złym pomysłem. Jeśli rozwiązanie jest łatwo wyjaśnić, to może ono być dobrym pomysłem. Przestrzenie nazw to jeden z niesamowicie genialnych pomysłów -- miejmy ich więcej!
Najfajniej przedstawia to ten filmik, bo pokazuje jak zmieniała się popularność Pythona względem innych języków na przestrzeni lat:
Swoje podsumowanie również dorzuciło StackOverflow, potwierdzające popularność Python’a.
Ten Python którego używamy najczęściej to tak naprawdę CPython – czyli najpopularniejsza, wzorcowa implementacja tego języka. Ale najpopularniejsza nie oznacza że jedyna! Implementacji tego języka jest kilka i tu już od konkretnie rozwiązywanego problemu zależy jakiej użyjemy. Napisałem o tym więcej tutaj.
Nazwa języka nie pochodzi od zwierzęcia lecz od serialu komediowego emitowanego w latach siedemdziesiątych przez BBC – „Monty Python’s Flying Circus” (Latający cyrk Monty Pythona). Projektant, będąc fanem serialu i poszukując nazwy krótkiej, unikalnej i nieco tajemniczej, uznał tę za świetną:)
W Pythonie możesz pisać używając paradygmatu obiektowego, strukturalnego jak i funkcyjnego!
Dla przykład, używając paradygmatu funkcyjnego możemy stworzyć taką funkcję która zwróci funkcję:
1 2 3 | sum_it = lambda x : lambda y : x+y print(sum_it(3)(4)) |
Kod ten zwróci oczywiście 7 i jest tożsamy z:
1 2 3 4 5 6 7 | def sum_it(x): def _inner_sum_it(y): return x+y return _inner_sum_it print(sum_it(3)(4)) |
Python pozwala na zwracanie wielu wartości z funkcji, np.:
1 2 3 4 5 6 7 | def func(): return 1, 2, 3, 4, 5 one, two, three, four, five = func() print(one, two, three, four, five) |
Taki kawałek kodu poradzi sobie poprawnie z ifami:
1 2 3 4 5 6 7 8 9 10 11 12 | inf = float('Inf') if 999999999999999999 > inf: print("Liczba jest większa niż nieskonczonosc!") else: print("Nieskonczonosc jest wieksza niz liczba") n_inf = float('-Inf') if -999999999999999999 < n_inf: print("Liczba jest mniejsza niż minus nieskonczonosc!") else: print("Minus nieskonczonosc jest mniejsza niz liczba") |
I wypisze oczywiście
Nieskonczonosc jest wieksza niz liczba Minus nieskonczonosc jest mniejsza niz liczba
Bardzo często mówi się o Pythonie jako o języku który jest interpretowany. To nie do końca jest prawda! Python (a konkretniej CPython – czyli jego najpopularniejsza implementacja) jest językiem który jest kompilowany do języka pośredniego, tzw. bytecode’u o dopiero ten kod jest interpretowany. Bytecode to właśnie te magiczne pliki z rozszerzeniem pyc. Pisałem o tym więcej tutaj – może nie w kontekście Pythona a Javy, ale idea jest podobna.
Python pozwala na szybkie uruchomienie developerskiego serwer HTTP w bieżącym katalogu, pozwalają na listowanie plików przez przeglądarkę. Można to zrobić tak:
1 2 | $ python -m SimpleHTTPServer Serving HTTP on 0.0.0.0 port 8000 ... |
Pod spodem przełącznik „-m” powoduje odnalezienie modułu o podanej nazwie i uruchomienie pliku *.py zawierającego ten moduł jak zwykłego skryptu.
Czyli np. możemy zrobić coś takiego
1 2 3 4 5 | $ python -c "import this" The Zen of Python, by Tim Peters Beautiful is better than ugly. .... |
lub takiego
1 2 | $ python3 -c "import sys;print(sys.argv)" test1 test2 ['-c', 'test1', 'test2'] |
Jeśli jesteś zainteresowany kolejnymi dawkami wiedzy z obszaru programowania w Pythonie ale nie jesteś zamknięty tylko na ten język, bo to co tworzę to zahacza też o Jave, JS czy ogólnie o proces dostarczania oprogramowania, to poza Facebookiem, do którego możesz dostać się niżej, przypomnę że na górze strony jest jeszcze Twitter, LinkedIn i Instagram :)
Oj daaawnoo mnie tu nie było. Ale wakacje to był czas dużej liczby intensywnych wyjazdów i tak naprawdę, dopiero jakoś… Read More
Cześć! Zapraszam na krótkie podsumowanie kwietnia. Wyjazd do Niemiec A dokładniej pod granicę z Francją. Chrześnica miała pierwszą komunię. Po… Read More
Ostatnio tygodnie były tak bardzo wypełnione, że nie udało mi się napisać nawet krótkiego podsumowanie. Więc dziś zbiorczo podsumuję luty… Read More
Zapraszam na krótkie podsumowanie miesiąca. Książki W styczniu przeczytałem "Homo Deus: Historia jutra". Książka łudząco podoba do wcześniejszej książki tego… Read More
Cześć! Zapraszam na podsumowanie roku 2023. Książki Zacznijmy od książek. W tym roku cel 35 książek nie został osiągnięty. Niemniej… Read More
Zapraszam na krótkie podsumowanie miesiąca. Książki W grudniu skończyłem czytać Mein Kampf. Nudna książka. Ciekawsze fragmenty można by było streścić… Read More
Pokaż komentarze
+1
Fajny artykuł :)
Dzięki! Zawsze miło to przeczytać:)
Ciekawe informacje - o połowie z nich nie wiedziałem!
Pisałem Ci na facebooku jakiś czas temu, ale trafiło pewnie do "inne". Otóż ta część nie jest prawdziwa:
"Python pozwala na zwracanie wielu wartości z funkcji, np.:"
Kiedy robisz return 1, 2, 3, 4, 5
to Python nie zwraca wielu wartości, a jedną tuplę. Warto o tym wiedzieć, w szczególności w takiej sytuacji:
return 1,
Faktycznie, nie widziałem wiadomości od Ciebie :( a co do zwracania wielu wartości to oczywiście masz rację:) pisząc to wziąłem to za skrót myślowy, ale dzięki za komentarz, uzupełnił ten mój niefortunny skrót:)