Ah shiet, here we go again. Napisałem całkiem długi tekst o typach w Pythonie -
Podstawowe typy danych w Pythonie
Tak, kolejny, w końcu w sieci jest ich tylko milion, ale wciąż, wydaje mi się, że całkiem sensowny kawałek wiedzy wyszedł.
Trochę się rozkręciłem i wyszło ~20 stron. Trochę o podstawowych typach, jakieś wnioski i obserwacje po 5 latach obcowania z językiem, popularne gotchas i takie tam.
Jak ktoś uczy się pythona, to wydaje mi się, że fajnie przejrzeć :-)
Liczby, listy, kroki, sety, dicty i nie tylko.
Ten tekst, to fragment mojej książki - Junior Python Developer, którą niedawno wydałem.
elegancki feedback! Dzięki, wszystko zasadne poza pkt 3, w innym artykule/rozdziale opisane
Dodaj wsparcie do LaTexa w tym swoimi SSG, bo masz niesformatowane wyrażenia np. $(+/-)2^7-1$
Po polsku nie mówi się liczby złożone, tyko liczby zespolone. Wiem, mi tez się to myli (myślałem dłuższa chwilę, żeby przypomnieć sobie jak są complex numbers po polsku. No ale cóż. Nazewnictwo matematyczne po polsku jakie jest, takie jest).
Co gorsza pojęcie liczb złożonych istnieje w polskiej matematyce i oznacza zupełnie coś innego.
Tylko jeśli dla juniora, to czy taki na pewno zrozumie, co oznacza fragment $(+/-)2^7-1$
przy wyjaśnieniu, jak się oznacza liczby dodatnie/ujemne?
Tak, ale mi chodzi o sens wstawiania takiego wzory - jakieś dolary, daszki, nawiasy itp. jeśli komuś trzeba tłumaczyć czym jest zmienna to raczej ten dodatek za wiele nie wniesie, bo czytelnik go nie zrozumie.
I swoją drogą to jest merytorycznie błędne 256 wartości, prawda, ale z innego zakresu: od -127 do 127
, bo pomiędzy -127 a 127 jest 255 wartości.
To jest swoją drogą bardzo dobry case study dlaczego każda książka powinna przechodzić przez korektę - i redakcyjną, i merytoryczną.
Blog jak blog, ale jeśli to jest fragment książki to nie robi dobrego wrażenia. Raczej taka wersja alpha.
"dla programistów taki zapis" - a czy ten artykuł jest skierowany do ludzi z 8lat expa? Ty wiesz, ja też rozumiem, ale ktoś kto nie ma pojęcia o niczym zobaczy ten wzorek (który nie jest potem wytłumaczony co oznaczają dolary czy nawiasy albo daszki) i poczuje się jeszcze głupszy :(
chociaż tu coś czytam o tym i że może być i tak i tak https://en.cppreference.com/w/cpp/language/types
Ja nie wiem, o co chodzi z dolarami w $(+/-)2^7-1$
. Poza tym idąc w Pythona można by zamiast ^ użyć **
. ew. można poszaleć i użyć tagu <sup>
w HTML 2 <sup>7</sup>
wtedy wyjdzie faktycznie na górze ta liczba.
@cerrato: i też błąd znalazłeś bo powinno być 127 do -128 w jednym bajcie. Chodź jeśli znak nie jest kodowany w bicie, a w obiekcie to będzie poprawnie.
W systemie uzupełnień do dwóch U2 najstarszy bit ma wagę ujemną, czyli -bit8*(2^7) +bit7*(2^6)+...+bit1*(2^0). Z tego wychodzi zakres od -128..127 (ze wzoru: -2^(n-1) .. 2^(n-1)-1, gdzie n=8 ). U2 pozwala używać jednego sprzętowego sumatora do dodawania i odejmowania i istnieje tylko jedno zero. W zmiennoprzecinkowych IEEE754 jest osobny bit dla znaku i mamy taki kwiatek jak 0.0 i -0.0, ale sprzęt sobie z tym radzi i jest bardziej skomplikowany
Yup, większość komentarzy zasadna, korekta, czy to merytoryczna czy stylistyczna będzie przed wydaniem wersji papierowej, czyli w tym roku. Do tego się przyznaję i biorę na klatę.
Co do znaczków -> blog po prostu nie wyrenderował latex z racji braku obsługi, tak jak koleżka już wspomniał na górze. Przez weekend pewnie poprawię.
Dzięki za wyłapywanie błędów :-)
To ja jeszcze dorzucę swoje trzy grosze: 1) Chyba rzadko się spotyka sformułowania "little endian" i "big endian" w kontekście kolejności bitów w pamięci. Zdecydowanie częściej używa się tych pojęć w odniesieniu do bajtów. 2) Przykład z porównywaniem zmiennej example_float
do 0.1
nie pokazuje wcale, że wartość tej zmiennej jest różna od 0.1. Ten przykład pokazuje, że wartość tej zmiennej jest różna od wartości literału zmiennoprzecinkowego 0.1
. Wartość tego literału też jest różna od 0.1. Po prostu literały zmiennoprzecinkowe w C są typu double
, więc w przykładzie porównywane jest przybliżenie wartości 0.1 typu float
z przybliżeniem wartości 0.1 typu double
. Jeżeli zmienimy typ zmiennej na double
, to okaże się, że wartości są równe (mimo, że wciąż różne od 0.1). Początkowo zastanawiałem się po co kod w języku C w książce o Pythonie, ale domyślam się, że w Pythonie nie dało się tego pokazać, bo tam jest tylko jeden typ zmiennoprzecinkowy (przy czym pythonowy float
jest raczej odpowiednikiem double
z C). 3) Typografia: Jako myślnika w tekście nie powinno się używać dywizu (krótka kreska). Raczej powinno się używać pauzy (najdłuższa kreska, —
w HTMLu). Czasem zdarza się, że użyta jest półpauza (średnia kreska, –
w HTMLu). We wpisie na blogu przejdzie. W książce będzie to wyglądało kiepsko. Podobnie rzecz ma się z doborem odpowiednich znaków pisarskich do oznaczenia cudzysłowu. We wpisie na blogu przejdzie i apostrof, ale w książce powinny raczej być użyte poprawne otwierające (dolne w polskiej typografii) i zamykające (górne w polskiej typografii) cudzysłowy.
Jeśli byłbym początkujący, czułbym się przytłoczony informacjami które nie będą dla mnie użyteczne przez najbliższych kilka godzin nauki.
Z wami na tym forum jest taki dramat ,że ktoś coś stworzył ,a nikt go nie pochwalił.Same głosy krytyki czy wypunktowania go co zrobił źle. A wy co go tak oceniacie co zrobiliście? Typowe myślenie zawistnego cebulaka i tyle.Bardzo dobry materiał @grski.
@Konrado777: Wiesz co to konstruktywna krytyka? Z mojej perspektywy koleś robi super robotę i chce mu jakoś pomóc. Dzielenie się wiedzą, to dobry zwyczaj. W punktach podaje jemu co, moim zdaniem, pozwoli mu trafić do większej liczby odbiorców.
@Konrado777: przesadzasz, konstruktywna krytyka, to nie zawiść XD poza tym najlepsze rzeczy często tworzy się iteracyjnie. Zamiast wypuścić perfekcyjny produkt od razu, można wypuszczać produkt niedoskonały i zbierać krytykę, a potem poprawiać.
@Mokorowski "Jeśli byłbym początkujący, czułbym się przytłoczony informacjami które nie będą dla mnie użyteczne przez najbliższych kilka godzin nauki.". Wybacz ,ale kogo to interesuje? To tak jakbyś napisał ,że lubisz bardziej ogórki od pomidorów.
Pisać konstruktywną krytykę i pokazać punkty ,gdzie można coś poprawić jest ok ,ale jak ktoś zawsze ocenia coś negatywnie ,bo ma takie podejście to jest śmieszne. Do tego lajkujecie sobie wpisy jeden drugiemu. Część z was jest na pewno bardzo dobrymi programistami ,ale drugiej części wydaje się ,że są kimś wyjątkowym i czują się lepszymi od każdego ,aby innych pouczać. Brakuje tutaj jeszcze gwiazdy tego forum ZrobieDobrze i jego mądrości.
@Konrado777: oj kolego... ziółka pomagają na nerwy... a pokojowe kontakty z ludźmi, budują inteligencję. Tę... emocjonalną.
@grski: Jak pisałem materiały dla ścieżki edukacyjnej, rozpocząłem od podstawowego elementu. Typy mutowalne i nie, zachowanie mechanizmu GC w stosunku do nich i ich rozłożenie w pamięci maszyny wirtualnej. Bez szczegółów jednak jej działania. Bez szczegółów także budowy typu float czy "endianowości". To wystarcza do startu. Weź pod uwagę że sam float, dla bardzo wielu osób programujących także nie do końca jest zrozumiały (co nie jest rzecz jasna żadnym argumentem a stwierdzeniem faktu). Ułożenie starszy<->młodszy bajt, z kolei nie jest tak istotne w kontekście wysokiego poziomu Python'a. Zanim początkujący dojdzie do masek, przesunięć bitowych, ma do opanowania całą mechanikę języka. Kontenery, funkcje, generatory, obiektowość... Zastanów się np. jak wygląda zbiór typów danych pozwalający na opanowanie ducha tego języka? Wbrew pozorom niewielki. Nie będzie w nim zapewne set, frozenset czy innych egzotycznych elementów. Z całą pewnością natomiast wśród elementów języka będzie generator, dekorator lub inne elementy które budują jego specyfikę.
Moje spostrzeżenia:
Liczby całkowite
bynajmniej nie znalazłem takiej informacji,3*'hello'