Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Python
Forum PHP.pl > Inne > Hydepark
Stron: 1, 2, 3, 4, 5
sztosz
Cytat(kwiateusz @ 27.03.2007, 10:11:40 ) *
strona o pythonie a pisana w php :]


Hmm... na pewno? To znaczy, czy jeżeli to jest Apache z PHP/5.1.6 to czy strona nie może być napisana w Pythonie? Czy wtedy byłby response header inny? Pytam, bo po prostu nie wiem, a chciałbym się dowiedzieć. I czy zna może ktoś jakiś prosty artykuł a propos pisania w pythonie na potrzeby www? Taki ogólny zarys, na kilka minut czytania winksmiley.jpg
hello.word
Cytat(kwiateusz @ 27.03.2007, 08:11:40 ) *
strona o pythonie a pisana w php :]


Pisana w PHP, ale to tylko na okres próbny. W przygotowaniu jest strona pisana w Django.


mike_mech: ;*
DeyV
Kurcze - ale się temat zepsuł.
A tak ciekawie się zapowiadał.

Niestety - ja nie mogę się dołączyć do zachwytów nad Pythonem, choć mój pierwszy kontakt był poprzedzony masą informacji na temat jego zalet, i "prawie" winksmiley.jpg w nie uwierzyłem.

I faktycznie - ma ten język wiele zalet. Przede wszystkim, nie wiedzieć dlaczego, przy tak zaawansowanej obiektowości, jest bardzo szybki.
Ma również świetnie dopracowany mechanizm aktualizacji i instalacji aplikacji - te jajka z pobieraniem kolejnych modułów lub uaktualnień kodu, które sprawiają wrażenie niemal integrujących się z samym językiem i systemem - bardzo ciekawe rozwiązanie, znacznie ułatwiające, jak sądzę, dostarczanie kodu do klienta.
Ma też wiele bardzo przydatnych narzędzi do komunikacji z aplikacjami zewnętrznymi - np. świetna obsługa komunikacji z SVN i innymi repozytoriami - nie wiem jak teraz wygląda to w PHP, ale obawiam się, że jest znacznie trudniej.

Tyle o zaletach. A teraz o wadach.
Przyszło mi popracować trochę nad kodem świetnego projektu napisanego w Pythonie - Trac'u.
Przyszło mi to robić bez niemal żądnego przygotowania, przy bardzo słabej znajomości składni. Na początek przerażenie, później już - tak raczej na wyczucie, i dzięki dobrej wyszukiwarce grzebiącej po plikach - udało mi się sporo zrobić.
Okazało się jednak, że dzięki tym "fantastycznym" jajkom z kodem praca nad poprawkami była koszmarnie niewygodna. Odnalezienie pewnych elementów i upewnienie się, że to na pewno ten plik, który mnie interesuje - okazało się dla mnie straszne.
To, że Python tak dużo robi za mnie przestało mnie szybko cieszyć, gdyż zachowanie kontroli nad działaniem kodu było dla mnie znacznie kłopotliwsze, niż w PHP, gdzie zazwyczaj dokładnie widzę, gdzie jaki plik jest includowany, i skąd brany (nie znoszę autoload winksmiley.jpg )

Przyglądając się rozwojowi tego projektu mam też nieodparte wrażenie, że całe środowisko ciągle jest jeszcze bardzo raczkujące. Z jednej strony powstało świetne narzędzie, z drugiej - problemy pojawiają się na etapie rozważań, jak przygotować obsługę wielojęzyczności, jak przygotować obsługę błędów, oraz jak poradzić sobie z Unicode w bazie.
Troszkę było to dla mnie zaskoczeniem, bo wyraźnie widać, że projekt ten tworzą bardzo zaawansowani programiści, a sam język musi przecież umożliwiać to w sposób co najmniej tak dobry jak PHP. A jednak wygląda to tak, jakby byli zmuszeni dochodzić do tego wszystkiego zupełnie sami, tak jak ludzie walczący z PHP z 5 lat temu.
Podobny problem pojawił się z wyborem systemu szablonów, z którym pracują, i który drugi czy trzeci raz został już zmieniony lub przebudowany. I choć wiem, że takie sytuacje zdarzają się większości dużej trwających projektów, niezależnie od języka, w którym są pisane, nie sprawiło to zbyt pozytywnego wrażenia.

Nie można też pominąć tematu manuala. Który choć jest naprawdę niezły, i wiele podstaw przedstawia w czytelny sposób, to jednak do przyjazności Manuala PHP, według mnie, oczywiście, wiele jeszcze brakuje.
(co nie znaczy, że w manualu PHP wszystko mi się podoba - to jak rozwiązano sprawę łącznia materiałów dotyczących php5 z php4 wkurza mnie niesamowicie, szczególnie że wielu rzeczy nawet przy pomocy wyszukiwarki nie bardzo można odnaleźć winksmiley.jpg )

Ach - i temat stabilności jeszcze. Co prawda nie jestem świetnym adminem, i serwerek, na którym mam postawioną swoją wersję traca, doskonały i zuper bezpieczny nie jest, ale nigdy nie zdarzyło mi się, by PHP się "zabiło". Ewentualnie poszła jakaś pętla, która wykorzystała 100% zasobów przez jakiś określony czas, po to tylko, by PHP i Apache po 30, 60 czy iluś tam sekundach grzecznie się z tym uporał.
Trac potrafił mi umrzeć, nie mówiąc nawet, że coś z nim jest nie tak...
nasty
Cytat
Mam honor PHP nie tykam! Dorobił sie w końcu jakiegoś sensownego interfejsu? Bo ostatnio jak patrzyłem, to był najdupniejszy z jezykow wysokiego poziomu. Pozdrawiam.
Dobra panie hello.world, skąd te porównanie? z jakimi językami go porównywałeś i w ogóle to jakie języki "Wysokiego Poziomu" Ty znasz, ze takie porównania przeprowadzasz?!
A skoro masz honor i nie tykasz PHP, to powiedz mi, czemu nie siedzisz na jakimś Pythonowym forum z Pythonowcami zachwycającymi się tym wspaniałym językiem, tylko siedzisz właśnie na tym forum: forum php
Gdyby Python był naprawdę taki super-hiper-mega-extra język, to byłby już dawno sławny i używany prawie wszędzie. Przykładem jest Ruby. Ruby jest stosunkowo młodym językiem który narobił dużo szumu wokół siebie i teraz ma ogromna społeczność wpierająca go. Dlaczego? Dlatego ze Microsoft, IBM, SAP i cala reszta go poparli? Dlatego ze mieli dużo kasy na reklamę? nie. Dlatego ze ludzie się przekonali co do niego. Python jednak jest prawie ze na końcu języków webowych pod względem popularności.
Ta akcja przekonywania do Pythona, przypomina mi swego czasu jak czytałem taki fajny flamewar, gdzie to programiści Visual Basic przekonywali cały świat o tym jaki to ich język jest fajny, miły, łatwy i w ogóle. Problem jednak w tym ze nawet oni sami sobie nie do końca wierzyli, jak nie w chwili pisania postu, to po jakimś czasie przestali wierzyć.

PS. A oprócz tego honoru, masz coś jeszcze ?
Fuzja
nasty_psycho: chyba sobie kpisz, wolisz pisac w perlu www niz w pythonie (np. django) ?
Python zdecydowanie nie jest na koncu.
Poza tym python ma w sobie ogromny potencjał ale żeby go rozpromowac potrzeba jakiegos waznego wydarzenia, lokomotywy, ktora by rozpedzila ten jezyk, taka lokomotywa dla rubiego sa railsy ( no prosze tez zwiazane z lokomotywa ;p) i to jest powod dlaczego jest slawny. Gdyby nie ror to o rubym bys nie slyszal, a w japonii pisalo by w nim tylu programistow co teraz w nemerle biggrin.gif
nasty
Cytat
Poza tym python ma w sobie ogromny potencjał ale żeby go rozpromowac potrzeba jakiegos waznego wydarzenia, lokomotywy, ktora by rozpedzila ten jezyk, taka lokomotywa dla rubiego sa railsy ( no prosze tez zwiazane z lokomotywa ;p) i to jest powod dlaczego jest slawny.
A czy nie jest Django odpowiednikiem Railsow? A jakąś nie spowodował ten framework takiej furory jak w przypadku RoR.
----------------
Cytat
nasty_psycho: chyba sobie kpisz, wolisz pisac w perlu www niz w pythonie (np. django) ?

FUZJA: Ja Ciebie bardzo proszę, jak masz zamiar w taki prymitywny sposób dyskutować, jak tu czy z tym pisaniem sterownika, to byłbym wdzięczny gdybyś nie odpowiadał na moje posty. Po prostu je ignoruj.
Fipaj
Ten temat śledzę już od dawna tylko dla dobrej zabawy. I mam taką, owszem ;-)

Osoby, które nigdy nic nie napisały w Pythonie, zażarcie bronią swoich racji - czyli PHP. Cały czas panowie prosicie o argumenty pythonowców, sami nie podając własnych, i jednocześnie tworzycie dziwną atmosferę.

Pythonowcy z kolei nie są w stanie podać żadnych dobrych argumentów, poza tą "satysfakcją". To mnie wcale nie dziwi, bo ulubiony język programowania to indywidualna sprawa każdego programisty! Panowie, którzy tak się kłócą za PHP: czy bylibyście w stanie na forum o ASP przekonać bandę 30 osób skupionych wokół technologii MS do PHP?

Zanim nie spróbujecie, to nie prowadźcie takich dyskusji.

Widzicie, ile osób jest za Pythonem. Oni nie prowadzą tej dyskusji dla siebie, tylko dla ewentualnych osób, które będą chciały spróbować. Zainteresujcie się bardziej Pythonem, bo zapewniam, że to nie jest język ani przestarzały, ani zaściankowy!

Jak dzieci normalnie ;-)
Fuzja
Jak dla mnie django jest lepszy niż RoR, wygodniej się w nim pisze, a przede wszystkim jest szybki. Nie zrobił furory bo nie był tak promowany, przecież wszytko zależy od odpowiedniej reklamy.
Nie będe ignorował Twoich postów bo gadasz bzdury i nie sposób zostawić to bez odpowiedzi.
Bardzo dobrze powiedział fipaj, po prostu nie spróbowałeś nie dyskutuj.
Jabol
Cytat(nasty_psycho @ 27.03.2007, 16:46:48 ) *
Python jednak jest prawie ze na końcu języków webowych pod względem popularności.
Bo Python to nie jest język webowy. To tylko jedno z jego zastosowań. Świat pythona to nie świat webdeveloperów a programistów (nie chcę zabrzmieć patetycznie, ale tak jest).
Wiem, że jako jest to forum o php patrzycie na to pod tym aspektem, ale to jakby patrzeć na piwo tylko poprzez pryzmat bąbelków na forum ludzi lubiących napoje gazowane winksmiley.jpg.

@DeyV: Wszystko zależy od przyzwyczajenia. Ale też nie zapomne jak przez pół dnia się zastanawiałem czemu "import * from openssl" nic nie ładuje, aż zauważyłem, że mam plik openssl.py w katalogu roboczym winksmiley.jpg.
Co do szybkości Pythona, to polecam źródła tego języka. Najlepiej napisać sobie jakiś moduł własnoręcznie, wtedy praktycznie bez czytania kodu źródłowego się nie obejdzie (tzn. powiedzmy, od pewnego momentu - wiele rzeczy jest doskonale opisanych - ale np. obsługa słowników oraz list...). I wtedy cała tajemnica się odkrywa. Źródła Pythona są po prostu mistrzostwem. To jak dobra, emocjonująca książka. Myślę, że każdy programista to doceni, bo jest tam kilka naprawdę świetnych rozwiązań. A przy tym wszystko to w C i to bez naginania standartów bądź też jakiś najnowszych standartów. A czuje się jakby się pisało w języku obiektowym... Kiedyś myślałem, że API C Pythona byłoby świetną biblioteką do organizowania własnych programów (w sumie rzeczy to wciaż tak myślę). Naprawdę niesamowite narzędzie.

Nie chodzi o to, żeby kłócić się który język jest lepszy. Ale po prostu nie znam nikogo kto po poznaniu Pythona (głębszym), by go odrzucił. Raczej spotykam tylko opinie, że ludzie się wręcz cieszą jak np. z powodów zawodowych już w Pythonie nie piszą a tutaj przyjdzie im coś napisać to zawsze się cieszą. A w PHP jestem najlepszym przykładem, że język ten nie powoduje przywiązania, nie kusi niczym aż tak bardzo. Poza tym niektóre rozwiązania z PHP są strasznie ordynarne, jak np. automatyczna konwersja typów... ble. Albo ta połowiczna obiektwość, ni to w jedną ni to w drugą. Z jednej strony jak mam napisać aplikację to powinienem organizować kod obiektowo, a z drugiej jak chce podzbiór tablicy to muszę używać zewnętrznej funkcji (tutaj się dopiero można pogubić). Nie podważam zalet i możliwości PHP, ale po prostu nie atakujcie tak agresywanie jak tłumacze że PHP to dla Pythona żadne porównanie... no inaczej się tego po prostu nie da powiedzieć. I sympatia dla PHP nic tu nie zmienia. Wystarczy chociażby spojrzeć na ilość stabilnych rozszerzeń do Pythona - nie ma chyba żadnej popularnej biblioteki do której Python nie miałby wrappera, ilość bibliotek jakie wspiera PHP można natomiast wyliczyć na palcach (osób w średniego rozmiaru klasie;) ). Tak samo jeżeli chodzi o technologie (PHP nie jest tutaj co prawda tak daleko w tyle, ale nie ma jakiegoś systemu oficjalnej weryfikajci tych bibliotek).
Jeżeli natomiast chodzi o możliwości stosowania w projektowaniu i implementacji aplikacji sieciowych to nigdy tego w Pythonie nie robiłem, ale myślę że i tam by się świetnie sprawdził.

No, jeżeli mi ktoś teraz wypomni brak argumentów to już będzi to chyba fanatyzm. I tak swoją drogą - ja nie chce nikogo przekonywać, że Python jest lepszy. Po prostu na moje upodobania oraz wymagania z PHP zupełnie nieporównywalny (jak grudka ziemi z lodami czekoladowymi).
Riklaunim
Ja przeszedłem na django/python i nie odczuwam chęci powrotu do PHP winksmiley.jpg

co do wypowiadających się tutaj autorów PPCG - trudna młodzież szkolna smile.gif
sztosz
Jabol dobrze napisał. Nie chodzi o to aby kogoś przekonać, że Python jest lepszy. Tylko, że warto poznać ten język, bo można w nim prosto i przyjemnie stworzyć wiele rzeczy. W Pythonie nie da się napisać niczego, czego nie można by napisać w innych językach, ale warto spróbować, bo może się okazać, że zrobimy to z o wiele większą przyjemnością i szybciej.

Ja, jeśli mam coś napisać, wole to zrobić w godzinę niż np. trzy. A z tego co przeczytałem Python pozwala stawia właśnie na produktywność programisty, czyli też na szybkość tworzenia kodu. Tu po prostu zastanawiasz się i piszesz, zamiast pisać i się zastanawiać.
kwiateusz
Czytam sobie ten temat od początku i na wstępie miałem mieszane uczucia, ale tak w miarę czytania tematu jak i google nawet spodobał mi sie ten język co prawda perla zamierzałem nadgryźć, ale chyba najpierw zrobię to z pythonem smile.gif
ogólnie czytając czyjś blog spodobał mi sie styl pisania w django, prosto, czytelnie i w miarę szybko, to jakoś głównie mnie zainteresowało no i to że można w nim pisać nie tylko na potrzeby sieci jak w php czy Ruby(choć ten język podobno taki fajny, a zupełnie mnie nie pociąga smile.gif) tylko muszę sobie jakąś porządną książkę znaleźć lub kurs zdatny do wydruku bo mam awers do czytania długich tekstów na kompie...
Fuzja
Tak jak pisałem python od podstaw + python.rk.edu.pl i te wykłady chyba z pierwszej strony co dałem.
kwiateusz
a właśnie ktoś tam pisał po drodze ze perl jest blee w porównaniu z pythonem... ktoś mi powie dla czego? tak z czystek ciekawości

przy okazji zaraz chyba mi głowa pęknie na dziś koniec czytania o pythonie :]

[ot]btw. Fuzja ile jeszcze będziesz chory snitch.gif[/ot]
Fuzja
nie moge zmienic sygnatury winksmiley.jpg
Perl ma skladnie, ze hej winksmiley.jpg juz wole asm smile.gif
To chyba wina safari ;p
Jabol
Jest taki kawał.
Rozmawiają dwaj programiści o perlu:
- Wiesz, ja nie lubię perla, bo to jest język do skryptów, nic większego w nim nie napiszesz.
A na to drugi, miłośnik perla:
- To nieprawda. Napiszesz nawet system obsługi lotnisk. I to w jednej linijce winksmiley.jpg.

Perl to język hakerów winksmiley.jpg. Normalni ludzie nie lubią się katować. Mam nadzieję, że nikogo tym nie uraziłem. Oczywiście to taki żarcik winksmiley.jpg, w perlu też można wiele i fajnie napisać, ale ten język czasami przesadza.

@kwiateusz: Syntax pythona jest prosty. Mam fajną książkę, PYTHON, Programowanie, z RM. Składnia może na 50 str opisana a potem 200 stron opisuje wbudowane moduły (jako dodatek winksmiley.jpg )! Bardzo mi ta książka jest pomocna, nawet jeżeli już ciutkę nieaktualna.

Pozdrawiam
Riklaunim
Cytat(Jabol @ 28.03.2007, 07:31:35 ) *
Mam fajną książkę, PYTHON, Programowanie, z RM. Składnia może na 50 str opisana a potem 200 stron opisuje wbudowane moduły (jako dodatek winksmiley.jpg )! Bardzo mi ta książka jest pomocna, nawet jeżeli już ciutkę nieaktualna.

tak, ta jest dobra smile.gif ma dobre wprowadzenie.
mike
Zainteresowaliście mnie. Choć może nie tyle zainteresowaliście co skłoniliście żeby odświeżyć pomysł sprzed pół roku żeby nauczyć się Python'a.
Jak się uda to w tym miesiącu (a jak nie to w przyszłym) kupuję Dive Into Python i jazda smile.gif
W końcu najsłuszniejsze słowa, które padły w tym wątku to że nie trzeba pokochać i zachwycić się, ale na pewno warto poznać.

Mam jednak pytanie, może nawet wątpliwość. Edytor.
Temat był zahaczony wcześniej przez kogoś ale padło nic konkretnego.
Czy Python posiada jakiś edytor/IDE na miarę Zend'a bądź Eclipse'a (mowa o wtyczkach obsługujących PHP, oczywiście).
Żeby programista z powodzeniem cieszył się owocną pracą potrzebuje dobrego IDE. Stąd jeśli możecie scharakteryzujcie jakieś dobre pełne środowisko dla Python'a.
Poza podpowiadaniem składni (na dobrym poziomie) interesuje mnie zarządzanie projektem podobne jak w Eclipse (bo Zend tutaj dla PHP okazuje się tylko banalnym edytorem) czyli historia zmian, obsługa CVS/SVN, ...

Pytam bo chyba w tym temacie nie jest tak fajnie z Python'em jak z PHP czy innym językiem.
siemakuba
Przyznam, że też się zaciekawiłem. Przyznam @Jabol, że masz "lekkie pióro", więc po lekturze twoich postów chce się zajrzeć głębiej, dać Nura w Pythona ;)

Właśnie, mike, jeżeli nie przeszkadza ci czytanie na ekranie tudzież druk we własnym zakresie: http://diveintopython.org/

Eclipse ma pyDEV, ale jeszcze nie próbowałem jak to działa. Strasznie długo budował mi się projekt po jego utworzeniu, nawet chyba skończyło się to jakimś błędem, ale być może to ja coś pokiełbasiłem.

pozdr.
kwiateusz
JA tez sie chyba zainteresuje Dive Into Python tyle że własnego druku smile.gif to będzie ciekawe doświadczenie bo jeszcze książki po angielsku nie czytałem tak długiej i tratującej o technicznych sprawach...
siemakuba
@kwiateusz: w razie czego wikibooks nadciąga z pomocą: http://pl.wikibooks.org/wiki/Python. Co prawda jeszcze widzę, że nie całość w PL, ale zdecydowana większość.

Osobiście przyzwyczaiłem się już za bardzo do takiej literatury po angielsku, ciężko mi się czyta po polsku.

pozdr.
Jabol
Co do IDE...
osobiście pisze w kombie vim + ipython i jest wszystko, zupełnie wszystko czego mi trzeba. Ale rozumiem, że inni widzą to inaczej winksmiley.jpg. Tak więc istnieje pyDEV, jak już ktoś pisał. Też nie próbowałem, ale jak widzę większość z Was lubi Eclipse, więc już chyba po sprawie winksmiley.jpg. Jeżeli jednak nie to wciąż jest wiele edytorów które wspierają Pythona (i to nie tylko kolorowanie składnie) jak np. Geany (mój faworyt jeżeli chodzi o IDE). Dalej idąc jest Anjuta, bardzo fajne IDE. Co do dedykowanych edytorów to sam nie wiem, bo nie używam. Istnieje boa-constructor, ale jakoś mnie nie przekonuje... Istnieje PyIDE, czy jakoś tak ale też mnie nie urzeka... Myślę jednak, że z tej palety jaką podałem coś sobie można wybrać. Istnieją też edytory na Windowsa, ale jak dla mnie to to jest inny świat i nic tutaj nie mogę doradzić.

Pozdrawiam

Edit: Właśnie sobie zainstalowałem edytor Eric3! Naprawdę świetny! Szkoda tylko, że w Qt winksmiley.jpg. Nie wiem jak jego możliwości prowadzenia projektów ale na pierwszy rzut oka naprawdę świetny.
sztosz
Może Komodo? http://www.activestate.com/products/komodo_ide/
Hacker
Ja również postanowiłem dać Nura w Pythona. Poczytam, popiszę, może mi się spodoba. Według mnie nie ma sensu dalej ciągnąć tego tematu. Każdy sam musi spróbować i ocenić.

Edit:
Przeczytałem drugi rozdział (1 pominąłem - Pythona nie instalowałem)... i jest dosyć ciekawie (angielski nie znam za dobrze, ale jakoś daję radę).
Riklaunim
ja tam jako IDE używam kate - edytor tekstowy z kolorowaniem składni i trzymaniem wcięć/itp. Ogólnie do pythona jest eric3 (dodatkowo pod pyQT), można użyć też kdevelop, wspomniana "wtyczka" dla eclipse itp.

Do 4/2007 phpsolutions będę chyba właśnie coś pisać w stylu PHP vs Python / Django vs CodeIgniter/inne smile.gif
Turgon
Riklaunim: Nawet się nie waż tongue.gif Bo w końcu wybiorę się do myśliwskiego po dubeltówkę i śrut tongue.gif

A co do Python'a. Miły język, ale za dużo przyzwyczajeń z PHP by w nim kodować bardzo szybko i skutecznie.
sztosz
A czemu? Ja bardzo chętnie przeczytam takie porównanie smile.gif
occulkot
Sam rowniez naleze do nawroconych z phpa na pythona - obecnie wiekszosc aplikacji tworze w django - glownie ze wzgledu na to iz na prawde malo rzeczy musze dopisywac do jego kodu sam - po opisaniu bazy, stworzeniu mapowania adresow i napisaniu templateow mamy praktycznie gotowe do odpalania systemy.
Dostepny panel administracyjny swietnie nadaje sie do podstawowych czynnosci - fakt faktem czasami dziwi mnie brak niektorych rzeczy - jak np dziwny sposob sortowania elementow za pomoca order_with_respect_to. Jednak jezeli musimy na szybko przygotowac dzialajacy frontend - panel adminsitracyjny dostepny bezposrednio z frameworka wystaczy do zarzadzania trescia!

Probowalem kilku roznych frameworkow php - od zenda (ciezka i kaprysna beta) code igniter (php 4 :/) i symfony (no na tym juz zostalem troche dluzej - obecnie jezeli chodzi o aplikacje php uzywam tego frameworka) - 2ch frameworkach pythona - django i pylons(SKALOWALNOSC) i ruby on rails - na razie django i python sa najblizsze temu czego mi potrzeba - na drugim miejscu jest pylons winksmiley.jpg.

Co do samego jezyka - pythonem zaczalem sie juz interesowac jakis czas temu - odkad zaczalem uzywac gentoo winksmiley.jpg. Jezyk ten na poczatku wydawal mi sie dziwny. Pierwsza rzecza ktora mnie przerazila skladnia - czemu zmuszaja mnie do uzywania wciec - i jak tu czytac kod w ktorym nie ma klamer. Kolejna denerwujaca rzecza bylo znane z c namespace. W phpie wszystko jest dostepne od razu - wszystkie funkcje jakich tylko potrzebuje.

Swoje kroki z pythonem zaczalem od przeczytania "python od podstaw" z hellionu. Tam oprocz podstaw - mamy opisane juz bardziej zaawansowane elementy jezyka - takie jak budowanie modulow w c, jython lub interfejsy sieciowe - nawiasem mowiac, te ostatnie przydaly mi sie do zaliczenia "programowania uslug sieciowych" smile.gif.

Pierwszym elementem zaskoczenia dla programisty php beda na pewno tablice, a wlasciwie 3 rodzaje tablic - niby podobne a jednak inne - nawet kiedys jakis maly flame mialem z fanbojem php upierajacym sie ze fajnie ze w phpie do jednej tablicy raz moze dopisac przez array[]='' innym razem przez klucz jeszcze innym przez funkcje. Wszystko fajnie dopoki kod piszemy samemu - kiedy pozniej ten kod musi ktos po nas przejac powinnismy mu opisac kazda zmienna kiedy jest jakiego typu :/. Niestety - w phpie mamy taka roznorodnosc stylow programowania - ze ciezko znalezc tak samo napisane programy nawet u jednego programisty.

Kiedy juz przyszlo do pisania aplikacji w pythonie okazalo sie ze ta cala skladnia mimo pozornej nieczytelnosci jest bardzo przejzysta - w phpie i tak kazdy uzywal wciec - zakonczenie bloku sygnalizowala mu dodatkowo klamra zamykajaca - tutaj mam po prostu powrot do normalnej tabulacji - 2 znaki mniej podczas pisania (ktore i tak za nas wiekszosc edytorow sama zalatwia) - ale tez i 2 znaki mniej do odczytywania! - latwiej mozna zauwazyc cos w kodzie. Brak ";" na koncu polecenia - i nagle koncza sie czeste problemy z syntax error - ze tu sie zapomnialo srednika - szczegolnie gdy poprawiamy cos na szybko.

Dalej - importowanie, namespace i cale te dziwne odwolywanie sie przez obiekty i podobiekty - w phpie na "dziendobry" dostajemy caly namespace - wszystkie funkcje - czy potrzebne czy nie sa od razu dostepne - przyznam sie ze czasami mnie cos strzelalo jak w eclipsie probowalem znalezc dopelnienie nazwy jakiejs konkretnej funkcji do bazy danych pg<ctrl+spacja> i szukaj przez 30 podfunkcji - w pythonie musimy kazda funkcje zaimportowac z odpowiedniego modulu - moze sie to wydawac glupie jezeli patrzymy ile to modulow potrzebuje srednio prosta strona (baza, wyrazenia regularne obsluga plikow, operacje matematyczne) - ale zwroccie uwage ze w pythonie kazdy element jest obiektem - co za tym idzie wykonuje tylko okreslone funkcje - vide validacja formularza - wyszukiwanie w bazie danych - wyswietlanie szablonu - przez co finalny kod danego modulu wymaga tylko tych elementow jezyka ktore mu sa potrzebne - mozemy pozniej taki modul wykrozystac w zupelnie innym miejscu - w dodatku przez to ze kazda inkluzja tworzy osobny namespace - bez strachu iz wywali nam error "cannot redeclare function".

Co do IDE. na dzien dzisiejszy operuje PyDEV na P2.4 z PyLintem - bardzo ladnie podpowiada kod + podkresla bledy a nawet zwraca uwage na styl kodowania winksmiley.jpg (ta linijka jest za dluga itd...).

Obecnie jak mam napisac jakikolwiek kawalek kodu zawsze robie to w pythonie - nawet projekty na uczelnie - mimo iz kumple robia w c/c++ ja wole napisac w pythonie - raz zeby jescze pocwiczyc winksmiley.jpg - dwa - bo jest to po prostu przyjemniejsze. W PHPie pisze - bo musze winksmiley.jpg - mamy w firmie pare aplikacji napisanych w phpie - i czesto trzeba w nich cos zmieniac - i na prawde szlag mnie trafia jak co chwile wyskakuja mi syntax errory, tudziez tutaj zapomnialo sie przecinka tam znowu SQL nie wybiera tego co chce (do dobra - akurat to ze teraz sie z tym nie mecze to zasluga ORMow smile.gif ). Poza tym nigdy nie wiem co napotkam w danym module - czy bedzie tylko operowal na bazie - czy moze jeszcze zapisze cos do pliku.
Ace
Z pół roku temu zainteresowałem sie Python'em, pisałem proste aplikacje konsolowe typu bot który przeszukuje cały serwis (gotowa biblioteka do obsługi http), wątki też poznałem.

Do końca nie mogłem dojść do ładu z namespace, ale dawałem sobie radę winksmiley.jpg Problem pojawiał się dla mnie z wygodą pisania. W php mam genialne podpowiadanie składni. Wystarczy, że komentuje odpowiednio kod (phpdoc) i wiem co dana metoda zwraca i na zwracanym obiekcie znów działa podpowiadanie składni.

Do python'a użyłem PyDEV. Używałem jakiejś metody która zwracała mi obiekt jednak, nie było już podpowiadania składni do tego obiektu.

Może spotkaliście się z IDE do pythona które oferuje to?
mike
Zgodnie z obietnicą zacząłem się uczyć Pythona. Chciałem mieć swoje zdanie zdobyte empirycznie i konkretne argumenty w dyskusji.

Co do jednego cofam swoje słowa: składnia Pythona nie jest taka zła a mało tego, po napisaniu kilkudziesięciu linii kodu wręcz przyjemna smile.gif

Ale jedno mnie załamało. Z tego co zaobserwowałem, wyczytałem i wypytałem: ten język nie ma interfejsów i klas abstrakcyjnych.
Ja pierdziele, nawet nie mówcie więcej, że to jest język z silną i naturalną obiektowością.
Brak interfejsów i abstrakcji jest dla mnie na tą chwilę żenująco zabawny.
No chyba, że język wspiera inne metody uzyskiwania takich rzeczy.
NuLL
Intefejsy w aplikacji produkcyjnej sie wywala a abstrakcyjne nie sa az tak super potrzebne - ew w konstruktorze wyrzucasz wyjatek i z bani winksmiley.jpg
mike
Cytat(NuLL @ 2.04.2007, 10:28:52 ) *
Intefejsy w aplikacji produkcyjnej sie wywala ...
Wykorzystujesz interfejsy tylko do wymuszania obecności funkcji w klasach? Nie wiem czy wiesz ale to nie jedyne zastosowanie interfesjów tongue.gif

Cytat(NuLL @ 2.04.2007, 10:28:52 ) *
... a abstrakcyjne nie sa az tak super potrzebne - ew w konstruktorze wyrzucasz wyjatek i z bani winksmiley.jpg
~NuLL jakbym Cię nie znał to bym powiedział, że gówno wiesz o programowaniu obiektowym. A tak powiem Ci tylko: wyśpij się chłopie bo głupoty chrzanisz, że aż ręce opadają tongue.gif
athabus
A właśnie miałem kupić książkę do Pythona... Ale jeśli to co pisze mike_mech jest prawdą to ja już wolę obiektowość w php...
Riklaunim
Cytat(athabus @ 2.04.2007, 11:02:31 ) *
A właśnie miałem kupić książkę do Pythona... Ale jeśli to co pisze mike_mech jest prawdą to ja już wolę obiektowość w php...

zamiast przysłuchiwać się kłótniom zajrzyj do źródeł, np. http://docs.python.org/tut/node11.html
splatch
Cytat(Riklaunim @ 2.04.2007, 11:36:45 ) *
zamiast przysłuchiwać się kłótniom zajrzyj do źródeł, np. http://docs.python.org/tut/node11.html

I tam przekonasz się, że w Pythonie nie ma interfejsów a klasy abstrakcyjne to nie mechanizm języka a Twoja proteza. Pozwolę sobie na ironię - to już jest ta naturalna obiektowość czy musimy jeszcze na nią poczekać czy też ewentualnie poszukać w dodatkowym module?
athabus
splatch mnie uprzedził, więc nie będę go powtarzał.

Szczerze mówiąc to bardzo się rozczarowałem bo czytając początek dyskusji spodziewałem się, że znajdę język dla siebie (ASP odpada z powodu kosztów - jestem tylko hobbystą). Ale obiektowość bez interfejsów i klas abstrakcyjnych? Trochę nie potrafię sobie wyobrazić programowania bez tych elementów.
To już chyba nawet php jest bardziej obiektowe.

Sama składnia też mnie trochę odrzuca - ale wszyscy mówią, że można się przyzwyczaić więc pewnie można.
sztosz
Najpierw uprzedzę, że być może gówno wiem o programowaniu, ale zastanawia mnie po jaką cholerę mi interfejsy i klasy abstrakcyjne? Bo nie znam innego zastosowania interfejsów oprócz tego o który Nullowi chodziło. A jeżeli chodzi o klasy abstrakcyjne to są tylko po to aby mogły z nich korzystać klasy dziedziczące, natomiast nie można stworzysz obiektu który będzie instancją klasy abstrakcyjnej. Więc moim skromnym zdaniem abstrakcja tej klasy jest jak najzupełniej możliwa w pythonie (tak samo jak interfejs) ale nie ma tych magicznych słów "abstract" i "interface" i po prostu nie wywala nam errorów kiedy stworzymy obiekt instancję klasy abstrakcyjnej. Tak więc język nas nie zmusza nas do tworzenia interfejsów i klas abstrakcyjnych i ale wcale nam tego nie zabrania.

A czy zna ktoś może jakiś program który by przerabiał kod Pythona na kod źródłowy C++, bo w pythonie pisze mi się strasznie łatwo, a muszę coś prostego napisać w C++, albo Javie sad.gif A nie przepadam za tymi językami.

____
PS. Nie mam nic do klas abstrakcyjnych i interfejsów. Trochę łyknąłem Design Patterns i potrafię zrozumieć ich potrzebę.
athabus
@sztos interfejsy dodają obiektowi je implementujace dodatkowy typ.

Czyli np. chcesz w jakiejś kolekcji zebrać elementy, które można wyświetlić - obiekty takie np. implementują interfejs IDisplayable. Teraz możesz w tej kolekcji zrobić np:

public function addElement(IDisplayable $element)

co wymusi aby dodawane elementy implementowały interfejs. Oczywiście przykład trywialny, ale w większej aplikacji gdzie zachodzi wiele zależności między elementami interfejsy są przydatne.

Co do klas abstrakcyjnych to chodzi właśnie o to co napisałeś - klasa abstrakcyjna dodaje ci pewien poziom abstrakcji, który stanowi podstawę do budowy dalszych obiektów, ale sam w sobie nie może być inicjowany.

Np. Pisząc program do obsługi warsztatu możesz mieć klasę abstrkcyjną samochód i po niej dziedziczyć osobowy i ciężarowy. Po pewnym czasie możesz zapomnieć, że samochód sam w sobie nie miał być inicjowany bo jest zbyt abstrakcyjny i możesz sobie zrobić kuku powołująć instancję samochodu...

Oczywiście wszystko to można obejść, ale są to standardy, które każdy język obiektowy powinien wspierać, aby kod był bardziej czytelny - innymi słowy nie chcę się za rok zastanawiać czemu wyrzucam wyjątek w konstruktorze samochodu.

* oczywiście to tylko tak ogólnie
sztosz
Czyli dobrze mi się wydaje że to już tylko i wyłącznie chodzi o czytelność kodu i szeroko pojęty "maintenance", a nie że jest to taka obiektowość jak w BASIC'u?

Tak przeszukując net, to nawet nie wiem czy ta czytelność kodu cierpi jeżeli brak nam klas abstrakcyjnych tylko z powodu brak tego magicznego "abstract", nikt nie broni nam tworzyć abstrakcyjnych klas tak samo jak interfejsów, chociaż może nie wygląda to tak jak w Javie czy C++, być może mniej czytelniej. Ale to już, moim nie przyzwyczajonym zdaniem, kwestia właśnie przyzwyczajeń winksmiley.jpg
nasty
sztosz: dam Ci dwa przykłady w których użyje interfejsu i klasy abstrakcyjnej a Ciebie bym poprosił o pokazanie mi jakiejś innej alternatywy. (albo zgodzenia się ze mną tongue.gif)

Wiec:
1. Klasa Abstrakcyjna
Masz system w którym konfiguracje się wydobywa z kilku źródeł (Xml, Baza danych, itd...) i wszystkie współdzielą funkcje takie jak IsModified (sprawdzającą czy od czasu załadowania dane się zmieniły), to czy w każdej z klas typu konfiguracji byś pisał ta funkcje ? IMO to jest sprzeczne z dobrymi nawykami programowania które mówią żeby się nie powtarzać. A wywołanie instancji takiej klasy która definiuje tylko ta metodę nie przyniesie Ci nic prócz wyjątków.

2. Interfejs
Użyje tego samego przykładu co wyżej, masz jakaś metodę która za parametr przyjmuje klasę do czytania konfiguracji, to czy byś przeciążał ta metodę dla każdego typu, czy sprawdzał jakie jest źródło konfiguracji, czy po prostu użył interfejsu ? a może w przyszłości będzie jakieś nowe źródło, i co wtedy ?
I jak byś definiował szkielet potencjalnych nowych typów konfiguracji ? (żeby np. funkcje zapisywania zawsze nazywały sie Save a nie Write ?)

Tymi przykładami mam nadzieje ze przekonam Cie o ważności klas abstrakcyjnych i interfejsów jak i innych składników OOP, które nie tylko służą do poprawienia czytelności kodu.

Pozdrawiam
sztosz
Ok co do klasy abstrakcyjnej się z tobą zgodzę że to jest bardzo przydatne. Ale w Pythonie można to bez problemu zrobić. Jedyna różnica tak na prawdę to taka że w np. PHP jest to magiczne słówko "abstract" przed definicją, a w Pythonie nie ma, i z tego powodu można mieć obiekt będący klasą abstrakcyjną (ale jeżeli założenie jest że klasa jest abstrakcyjna, to żaden programista przy zdrowych zmysłach nie będzie tego robił). Dziedziczenie w Pythonie? Jak najbardziej smile.gif

Co do interfejsu to nie za bardzo rozumiem twój przykład winksmiley.jpg Interfejs to klasa która jedynie definiuje nazwy metod które muszą zawierać klasy dziedziczące (bez żadnej implentacji metody w interfejsie), tak? Więc, to też bez problemu zrobimy w Pythonie, chociaż przyznam że nie widzę na razie wbudowanego w język sprawdzania czy klasa poprawnie implentuje interfejs.
Ale akurat, tak jak klasy abstrakcyjne pojąłem, to interfejsy nie bardzo więc mogę być w ogromnym błędzie :|

____
PS. Jak już pisałem dupa ze mnie nie programista, ale lubię mieć jasność, i po tym co przeczytałem w tym wątku miałem i mam niejasność, że wy/my tu o czym innym rozmawiamy niż możliwości Pythona winksmiley.jpg
athabus
@sztosz - myślisz małą skalą :-) OOP chodzi o elegancję i łatwość utrzymania/rozszerzenia kodu. W sumie masz rację po części, że takie rzeczy jak final, abstract, __toString, interfejsy i wiele innych są możliwe do obejścia. Tylko, że o ile w małych aplikacjach możesz to obejść i nic się nie stanie o tyle w większych takie obchodzenie powoduje wiele problemów. Po prostu inny programista czy nawet Ty w przyszłym roku nie będziesz pamiętał o tym, że dana klasa miała być abstrakcyjna i będziesz tworzył jej instancje. Nie zastosujesz final i będziesz po niej dziedziczył itp itd. Im bardziej system skomplikowany tym bardziej potrzebne są tego typu rozwiązania. Trzeba pamiętać, że OOP powstało właśnie po to aby zapanować na chaosem dużych aplikacji.
mike
Panowie parafrazując słowa jednego z większych [edit]tutaj był epitet ale wykasowałem[/edit] w tym kraju.
Nie róbmy z szamba perfumerii.

Nie starajmy się wygładzić niedoróbek języka.

Dziś znajomy programista Pythona powiedział mi (zapytałem go właśnie o te interfejsy i abstrakty), że jeśli Python czegoś nie ma to znaczy że trzeba się zastanowić czy to w ogóle jest potrzebne. A potem zastanowić się jeszcze raz jak to obejść.

Chyba nie muszę komentować tongue.gif
sztosz
Hmm... ale te final, abstract etc... można zawrzeć w nazwie klasy, w komentarzach(!), etc. Ale rozumiem wasz punkt widzenia.

Ja z tym nie mam problemów (ale też nie tworzyłem wiele sad.gif ), ale z drugiej strony rozumiem, że dla wielu was jest to bariera nie warta przeskakiwania.

Ja w Pythonie prawie zakochałem, innym również życzę takiej wzajemnej miłości. Niekoniecznie Pythona smile.gif
Jabol
Osobiście zgadzam się ze Sztosem. Ale może to po prostu nawyki z Pythona. Osobiście korzystam ze wszystkich możliwości interfejsów oraz klas abstrakcyjnych w Pythonie, pomimo iż ich tam nie ma! I się nie gubie. A jeżeli komuś potrzeba czegoś więcej, to przecież można wprowadzić jakiś systematyczny sposób nazewnictwa - np. klasy abstrakcyjne pisać jako AClass albo ClassAbstract, tak samo z interfejsami. Oprócz tego można jeszcze robić po linijce komentarza przy klasach i już wszystko wiadomo.
A to, że w php można zarządać aby argument był instancją jakieś klasy to największa niekonsekwencja w PHP w ogóle. Ten język nawet nie rozróżnia stringa od integera. Nie można zarządać aby input był liczbą, a można zarządać aby był instancją BLEBLE_COSTAM_VERY_COMPLICATED_CLASS? Przecież to jest paranoja.

Pozdrawiam
Sedziwoj
PHP konwertuje typy 'w locie' ale je rozpoznaje. Co do instanceof to właśnie jest użyteczne i to pokazuje przydatność interfejsów, bo jak coś dziedziczy po tym interfejsie, to ma na pewno pewne metody, a jeśli tylko z nich korzystamy to wystarczy że dziedziczy po tym interfejsie, np. mamy 'urządzenia elektryczne' każde można 'włączyć' i 'włączyć' więc nas nie obchodzi jak ten przychodzący obiekt to zrobi, wiemy że może to zrobić.

Co do sensu interfejsów czy abstrakcji, to po co nam obiekty przecież bez nich też można pisać programy które będą działać, ba po co nam funkcje też bez nich można pisać... Więc zastanówcie sie czy to tak naprawdę sa zbędne rzeczy.
Jabol
Cytat(Sedziwoj @ 3.04.2007, 19:44:25 ) *
Więc zastanówcie sie czy to tak naprawdę sa zbędne rzeczy.

Jak dla mnie na pewno. Choć rozumiem o co chodzi smile.gif.
kwiateusz
klasa abstrakcyjna dla mnie tez jest zbędna, ale interfejs juz nie brak tego w pythonie jest zapewne upierdliwe (a podobno php takie upośledzone ^^) tak jak już ktoś wspomniał php rozpoznaje typy więc nie ejst jakiś poroniony, a że je w locie konwertuje to nawet użyteczna i duży + tego języka... ale to mnie nie zniechęca do nauki, z czasem wreszcie sie zabiore za pythona...
Sedziwoj
abstrakcja dostarcza pewne metody dla danej grupy, więc potem jak masz zmienić sposób działania tych metod to robisz w jednym miejscu i koniec, a dlaczego lepiej aby nie dało się tworzyć tego typu obiektów? ponieważ one tylko tworzą pewien szkielet który dopiero po 'ubraniu' jest użyteczny.

Co do interfejsu chyba już wszyscy widzą jego zaletę? Wykorzystujemy rzutowanie w górę i to wykorzystujemy, dlaczego interfejs jest lepszy od jakiejś klasy po której się dziedziczy, bo wymusza dla każdej dziedziczącej tworzenie własnych metod, a interfejs opisuje coś czego możemy określić tyko pewne właściwości ale nie możemy powiedzieć jak to jest realizowane w konkretnym przypadku.
Np. mamy interfejs jedzenie potem dziedziczący pieczywo po nim dziedziczą bułki, chleb któe mogą być już załóżmy czymś realnym, więc jedzenie można zjeść ale jak? to już zależy od konkretów inaczej zjemy pomarańcz inaczej bułkę... ale jak przyjmiemy do naszej klasy obiekt który wywodzi się z jedzenia wiemy że możemy wywołać jego metodę 'zjedz' i nas nie obchodzi jak to jest realizowane, dzięki temu możemy tworzyć klasy które na starcie przyjmują jeden tak na prawdę jeden obiekt dziedziczący po danym interfejsie ale po jakimś czasie może być setki implementacji tego interfejsu, a nasza klasa nadal działa jakby nigdy nic.
Zeman
Cytat(mike_mech @ 2.04.2007, 23:09:43 ) *
...
Dziś znajomy programista Pythona powiedział mi (zapytałem go właśnie o te interfejsy i abstrakty), że jeśli Python czegoś nie ma to znaczy że trzeba się zastanowić czy to w ogóle jest potrzebne. A potem zastanowić się jeszcze raz jak to obejść.



Właśnie też słyszałem, że python nie obsługuje interfejsów. Swoja droga to o ile mi wiadomo, ale może się mylę, to python obsługuje CORBA'e a ta się opiera na interfejsach, IDL itd. To jest dość ciekawe.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.