Do odkurzenia tego artykułu skusił mnie link przekazany przez kolegę: http://www.artima.com/weblogs/viewpost.jsp?thread=252441 . Związek jest dość luźny, pod linkiem jest raczej rozważanie na temat przyszłości języków programowania ich mutacji i wspomniane co nieco o Jython’ie. Poniższy wpis jest odkurzony i lekko przeredagowny.

Python to język bardzo wysokiego poziomu w związku z tym tworzenie aplikacji w nim powinno być szybkie. I może samo tworzenie jest, ale jak już się Pythona dobrze zna. Dostarczona dokumentacja jest średnio czytelna i korzystanie z niej nie było zbyt wygodne. Żeby korzystać z docs’ów Pythona trzeba mieć chyba jakiś dar.

„Although both PHP and Python have excellent core documentation, Python’s is more extensive and generally higher quality.”

No niestety nie moge się z tym zgodzić…
Nie wiem jakie są powody że ludzie tak się zachwycają owym Pythonem. Ja bardzo się zniechęciłem gdy zobaczyłem że nie ma ani kwantyfikatowór dostępu, ani definicji pól klasy. Pola można sobie dodawać dowolnie w tracie działania, żadne deklaracje nie są wymagane. To takie wbudowane __set i _call z php.
Napisanie programiku do logowania się do „wioski” w grze plemiona zajęło mi koło 2,5h.
Linii mamy 32, co daje jakie 4,5 minuty na napisanie linii, a wiadomo że nie wszystkie linie są sobie równe.

import urllib, urllib2, cookielib

class PlemionaTool :
  def connect(self, username, password, world) :
    try:
      cookies = cookielib.CookieJar()
      self._world = world
      self._connection_handler = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookies))
      headers = {"User-Agent": "Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11"}
      login_data = urllib.urlencode({"user": username,
                                              "clear": "true",
                                              "password": password,
                                              "server": world,
                                              "login-btn-input": "",
                                              "cookie" : "false"})
      request_http = "http://www.plemiona.pl/index.php?action=login"
      req = urllib2.Request(request_http, login_data, headers)
      self._connection_handler.open(req)
    except urllib2.HTTPError:
        print "Jakis zonk"

  def headquater(self) :
    response = self._connection_handler.open("http://" + self._world +     ".plemiona.pl/game.php?village=NUMER_WIOSKI&screen=main")
    page = response.read()
    return page

def main():
  pt = PlemionaTool()
  pt.connect("LOGIN", "HASLO", "SWIAT")
  print pt.headquater()

if __name__ == '__main__':
  main()

Z zalet można wymienić wysokopoziomowość. Nie trzeba się męczyć z odbiorem, obróbką i wysyłaniem cookies, nie trzeba się też bawić z przechwytywć żadnego wyjątku jak np. HTTPRedirect z Delphi.