Python okiem pehapowca

Mamy niedzielę. W ramach leniu­cho­wa­nia zachciało mi się poznać jakiś nowy język progra­mo­wa­nia. Padło na Pythona (nieznacz­nie wygrał z Rubym).

Na pierw­szy rzut oka to w zasa­dzie taki Java­Script ogól­nego prze­zna­cze­nia bez prze­glą­darki. Python rekla­mo­wany jest jako język typu batte­ries inclu­ded, czyli stan­dar­dowa biblio­teka powinna zawie­rać wszystko to, co w typo­wych zasto­so­wa­niach progra­mi­sta potrzebuje.

Od razu widać puryzm kodu Pythona. Żadnych klame­rek, żadnych śred­ni­ków — wszystko zała­twiamy wcię­ciami i końcami linii. „Kompre­sja kodu” widoczna jest na każdym kroku, np. funk­cje dekla­ru­jemy poprzez def, a nie przy­dłu­gawe func­tion, obiekty tworzymy bez new. Weźmy na przy­kład najprost­szą funk­cję żąda­jącą od użyt­kow­nika wpisa­nia z klawia­tury jakiejś liczby:

def getIntInput(message):
    while True:
        try:
            return int(input(message))
        except ValueError:
            print("You were supposed to enter integer!")

W 6 liniach mamy zała­twioną prośbę o wpisa­nie czegoś, prze­two­rze­nie wejścia i wyła­pa­nie ewen­tu­al­nych błędów. Funk­cja nie odczepi się od użyt­kow­nika dopóki nie wpisze popraw­nie jakichś cyferek.

wiek = getIntInput("Podaj rok urodzenia")

Poni­żej w punk­tach cieka­wostki, które w Pytho­nie są, a których nie ma w PHP (tyle co w ciągu kilku godzin udało mi się wyłapać):

  • wspo­mniane już braki klame­rek i śred­ni­ków — czy naprawdę potrze­bu­jemy tego wszyst­kiego w PHP?
  • wszyst­kie metody publiczne — tego nie popie­ram, może powo­do­wać bajzel w API; zgod­nie z konwen­cją metody prywatne należy ozna­czać przed­rost­kiem _
  • fajne konstruk­cje przy itero­wa­niu: for zmienna in array oraz for zmienna in range(5)
  • dziwne zasady doku­men­to­wa­nia kodu — komen­ta­rze idą po dekla­ra­cji klasy czy metody
  • array compre­hen­sion (nawet nie wiem jak to prze­tłu­ma­czyć) — w jednej linijce możemy stwo­rzyć nową tablicę na podsta­wie starej i prze­je­chać jakąś funk­cją po każdej warto­ści przed dodaniem:
    nowaTablica = [funkcja(wartosc) for wartosc in staraTablica]
  • proste loso­wa­nie:
    zagadka = random.choice(["wartosc1","wartosc2","wartosc3"])
  • tuple, czyli nieda­jąca się mody­fi­ko­wać tablica; co ciekawe, funk­cje bardzo często zwra­cają to ustroj­stwo, możemy od razu złapać je do dwóch różnych zmiennych
    wynik1, wynik2 = funkcja()
  • obiekt None zamiast null
  • == i != do spraw­dza­nia warto­ści zmien­nych, isis not do porów­ny­wa­nia z None lub refe­ren­cji, mało tego, możliwa jest konstruk­cja 0 <= a <= 10
  • próba poró­wa­nia if „3” < 4 wywali Type­Er­ror
  • konstruk­cja final do kompletu z try/except
  • bajer dla mnie: if szuka­na­Zmienna in tablica oraz if „wyraz” in przeszukiwanyString
  • nie ma czegoś tak paskud­nego jak RESOURCE

Tyle na począ­tek. Widzę, że Python to fajna sprawa. O wszyst­kim pomy­śleli. Nawet o wbudo­wa­niu bazy danych sqlite w biblio­tekę stan­dar­dową. Jeżeli ktoś waha się czego by tu nowego się pouczyć to polecam!

P.S.: Tak, wiem, na tych waszych poli­bu­dach Pythona uczą już na I roku, ble ble srutu­tutu. Samo­ucy typu np. ja muszą sami. Dobra, kończę, bo i piwo mi się skończyło :-(

Podobne wpisy:

  1. Rzut okiem na nowy Filmweb.pl
  2. Algo­rytmy liczące Pi w Pythonie
  3. O peha­powcu, który chciał zostać javowcem
  4. Śpie­chu liczy zawar­tość alko­holu w drinkach

10 Comments

  • 21 sierpnia 2011 - 18:17 | Permalink

    Od siebie dodam:

    - ipython (nakładka na inte­rak­tywną konsolę
    – help(str) — poka­zuje doku­men­ta­cję dla danej metody/klasy/pakietu
    – kwargs — def foo(f1=None, f2=None) => foo(f2=1)
    – django / pyramid :)

    Wiele można jesz­cze wymieniać

  • Śpiechu
    21 sierpnia 2011 - 19:06 | Permalink

    Spoko, dzięki. O tym nume­rze z argu­men­tami funk­cji też właśnie prze­czy­ta­łem, ciekawe…

  • piotrek
    21 sierpnia 2011 - 21:15 | Permalink

    a czemu porów­na­łeś go do js’a? wg mnie rubiemu bliżej do javascriptu.

  • Śpiechu
    21 sierpnia 2011 - 21:30 | Permalink

    Obiekty podsta­wowe w JS (np. String) mają podobne metody co w Pytho­nie. Poza tym jakaś ta wolna amery­kanka JS i Py w dekla­ro­wa­niu wszyst­kiego byle gdzie podobna.

  • 22 sierpnia 2011 - 07:48 | Permalink

    Obiekty podsta­wowe w JS (np. String) mają podobne metody co w Pytho­nie. Poza tym jakaś ta wolna amery­kanka JS i Py w dekla­ro­wa­niu wszyst­kiego byle gdzie podobna.”

    Możesz to jakoś rozwinąć ?

  • bigzbig
    22 sierpnia 2011 - 08:42 | Permalink

    Poczy­taj jesz­cze o closu­res (domknię­ciach) i deco­ra­tors (dekoratorach).

    A tak przy okazji to w pytho­nie nie ma tablic — mamy: dict (słow­nik), list (lista) i tuple (krotka). Jest to o tyle istotne, że dla słow­nika nie jest istotna kolej­ność zawar­tych w nim elemen­tów (w python 3 są już słow­niki sorto­walne), a kluczami listy są tylko liczby. Krotka to taka niezmie­nialna lista, która wbrew pozo­rom przy­daje się.

  • tester
    22 sierpnia 2011 - 10:17 | Permalink

    Pole­cam zapo­znać się z Django i możesz porzu­cić PHP :)

  • 22 sierpnia 2011 - 17:53 | Permalink

    Python oczami PHP-owca… powiem tak: język ten mnie nie lubi z wzajem­no­ścią. Próbo­wa­łem kilka­krot­nie prze­ko­nać się do składni z „def”-ami i innymi tego typu konstruk­cjami i wybit­nie to nie wyszło. Prefe­ruję skład­nię a’la C i tak już chyba zostanie.

    Nato­miast nie zmie­nia to faktu, że język sam w sobie ma wizję i się jej trzyma, a biblio­teka stan­dar­dowa ma duże możliwości.

  • 23 sierpnia 2011 - 09:08 | Permalink
  • 27 sierpnia 2011 - 07:10 | Permalink

    Nie bądź taki łaskaw dla poli­tech­nik. Tam to uczą „asem­ble­rów”, „fortra­nów” itp. Na fajne rzeczy jak np. Python jest czas żeby tylko wspo­mnieć że to jest, a nie żeby poznać frame­worki w danym języku.

  • Dodaj komentarz

    Twój adres e-mail nie zostanie opublikowany.

    Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <p> <pre lang="" line="" escaped=""> <q cite=""> <strike> <strong>