Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Python
misiek172
post
Post #1





Grupa: Zarejestrowani
Postów: 656
Pomógł: 3
Dołączył: 26.10.2005
Skąd: Częstochowa

Ostrzeżenie: (0%)
-----


Witam.

Od paru dni próbuję zapoznać się z tematyką Pythona. Przeczytałem pare artykułów, posiedziałem na forach itp. I nadal do końca niewiem do czego on tak naprawde służy, co ma takiego co innym językom brakuję.

Bardzo proszę o przedstawienie mi tematyki Pythona tak na chłopski rozum. Jego zalty i wady oraz w czym ułatwie prace.

Pozdrawiam i z góry dziękuje, Łukasz.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Jabol
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 467
Pomógł: 13
Dołączył: 22.02.2003

Ostrzeżenie: (0%)
-----


Nie napisałem, że w Pythonie się bardziej myśli, tylko łatwiej się myśli (łatwiej przetłumaczyć sobie myśli na kod pythona).

Teraz tutaj Model drzewka jaki sobie ostatni stworzyłem:
Kod
from sqlobject import *
from connection import *
from string import join
from exceptions import KeyError

class Node(SQLObject):
  name        = StringCol(length=100)
  parent      = ForeignKey('Node', default=None)
  features    = MultipleJoin('Feature')
  content     = ForeignKey('Content', default=None)
  children    = MultipleJoin('Node', joinColumn='parent_id')
  parentNameInd = DatabaseIndex('parent', 'name', unique=True)
  parentInd     = DatabaseIndex('parent')
  def _get_path(self):
    nodes = []
    r = self
    while r is not None:
      nodes.append(r.name)
      r = r.parent
    nodes.append('')
    nodes.reverse()
    return join(nodes, '/')
  def __getitem__(self, key):
    for f in self.features:
      if f.name == key:
        return f.value
    raise KeyError('Feature %s not found!' % key)
  def __setitem__(self, key, val):
    for f in self.features:
      if f.name == key:
        f.value = val
        return
    Feature(name=key, value=val, node=self)
  def __delitem__(self, key):
    for f in self.features:
      if f.name == key:
        f.destroySelf()
        return
    raise KeyError('Feature %s not found!' % key)


class Feature(SQLObject):
  node    = ForeignKey('Node')
  name    = StringCol(length=20)
  value   = StringCol(length=100)
  nodeIdNameInd = DatabaseIndex('node', 'name', unique=True)

class Content(SQLObject):
  content = StringCol()
  nodes   = MultipleJoin('Node')

Jestem ciekawy ile zajęłoby stworzenie podobnego modelu w PHP i czy byłby kiedykolwiek tak funkcjonalny.

Tutaj algorytm dzielenia pliku z napisami na trzy części - w php chyba trzeba by się z tym bardziej pomęczyć, co?
Kod
import string, datetime

fpr=open("lotr3.txt")

fpw1=open("lotr3_1.txt", "w")
fpw2=open("lotr3_2.txt", "w")
fpw3=open("lotr3_3.txt", "w")

dts=[[fpw1, datetime.datetime(2000, 1, 1, 0, 0)]
    , [fpw2, datetime.datetime(2000, 1, 1, 1, 25)]
    , [fpw3, datetime.datetime(2000, 1, 1, 2, 35)]]
dts.reverse()
dt0=datetime.datetime(2000, 1, 1, 0, 0)

for l in fpr.xreadlines():
    arr=l.split(":")
    ddt=dt0+datetime.timedelta(hours=int(arr[0]), minutes=int(arr[1]), seconds=int(arr[2]))
    for try_ in dts:
        if ddt>=try_[1]:
            try_[0].write((dt0+(ddt-try_[1])).strftime("%H:%M:%S:")+string.join(arr[3:], ":"))
            break

fpr.close()
fpw1.close()
fpw2.close()
fpw3.close()

Tutaj dalej mała klasa implementująca nowy język do robienia porównań
Kod
# author: Adam Wieckowski <mail>
# date:   07.01.2007

from re import compile
from fnmatch import *

class StringConstraint:

  def __init__(self, op, pattern):

    # 0 - equals caseinsensitive, 1 - equals casesensitive
    # 2 - fnmatch, 3 - fnmatchcase, 4 - regexp
    if op[0] == "!":
      self.__passMap = {True: False, False: True}
      op = op[1:]
    else: self.__passMap = {True: True, False: False}
    match           = {"==":0, "=*":1, "likei":2, "like":3, "=~":4}[op.lower()]
    self.__match    = match
    self.__pattern  = (match == 4) and compile(pattern) or pattern
  # /def __init__(self, pattern, op):

  def Evaluate(self, str):

#    # the readable way (long way/wrong way)
#    if self.__match == 0:
#      retVal = str.lower() == self.__pattern.lower()
#    elif self.__match == 1:
#      retVal = str == self.__pattern
#    elif self.__match == 2:
#      retVal = fnmatch(str, self.__pattern)
#    elif self.__match == 3:
#      retVal = fnmatchcase(str, self.__pattern)
#    elif self.__match == 4:
#      retVal = not self.__pattern.match(x) == None
#    return self.__passMap[retVal]

    # the one-statement-one-eval way
    return self.__passMap[ \
             [  (lambda x: x.lower() == self.__pattern.lower()) \
              , (lambda x: x == self.__pattern) \
              , (lambda x: fnmatch(x, self.__pattern)) \
              , (lambda x: fnmatchcase(x, self.__pattern)) \
              , (lambda x: not self.__pattern.match(x) == None)] \
              [self.__match](str)]

#    # the one-statement-all-eval way
#    return self.__passMap[ \
#             [  str.lower() == self.__pattern.lower() \
#              , str == self.__pattern \
#              , fnmatch(str, self.__pattern) \
#              , fnmatchcase(str, self.__pattern) \
#              , type(self.__pattern) is not type("") and not self.__pattern.match(str) == None or False] \
#              [self.__match]]
  # /def Evaluate(self, str):
# /class StringConstraint:

def StringConstraintParse(str):
  for op in ["likei", "like", "=~", "=*", "=="]:
    parts = str.split(op, 1)
    if len(parts) == 2: break
  if len(parts) == 1: raise Exception("Unknown operator.")
  if parts[0][-1] == "!": # negation
    op = "!" + op
    parts[0] = parts[0][:-1]
  if parts[0][-1] == "\\": # lets be able to escape the operator
    s, p = StringConstraintParse(parts[1])
    parts[0] = parts[0] + op + s
  else: p = StringConstraint(op, parts[1].strip())
  return (parts[0].strip(), p)
# /def StringConstraintParse(str):

def StringConstraintEvaluate(str): # shortcut
  str, p = StringConstraintParse(str)
  return p.Evaluate(str)
# /def StringConstraintEvaluate(str):
Polecam głównie linijkę 35 - tak apropo programowania funkcjonalnego.

Te trzy przykłady to różne możliwości zastosowania Pythona, które pokazują mam nadzieję główne różnice w zastosowaniu w przeciwieństwie do PHP. Jeżeli chodzi o zdanie z funkcjonalnym programowanie to jest opinia subiektywna - osobiście po prostu nabardziej lubię to podejście do programowania. Mam nadzieję, że podane przykłady unaoczniają jak można w Pythonie zaimplementować algorytmy w kilku dosłownie linijkach.

Pozdrawiam. I weźcie poprawkę, że to są wszystko subiektywne opinie.

Ten post edytował Jabol 1.02.2009, 12:48:52
Go to the top of the page
+Quote Post
splatch
post
Post #3





Grupa: Zarejestrowani
Postów: 487
Pomógł: 7
Dołączył: 7.01.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(Jabol @ 22.03.2007, 06:36:56 ) *
Teraz tutaj Model drzewka jaki sobie ostatni stworzyłem:
Kod
...

Jestem ciekawy ile zajęłoby stworzenie podobnego modelu w PHP i czy byłby kiedykolwiek tak funkcjonalny.

Możliwość obsługi drzew w Propelu. Propel ma swoje ograniczenia ale ma i zalety - nie piszesz kodu, którego nie musisz.

Cytat(Jabol @ 22.03.2007, 06:36:56 ) *
Tutaj algorytm dzielenia pliku z napisami na trzy części - w php chyba trzeba by się z tym bardziej pomęczyć, co?

  1. <?php
  2. $fp = fopen('lotr.txt', 'r');
  3. $fps = array(
  4. fopen('lotr_1.txt', 'w'),
  5. fopen('lotr_2.txt', 'w'),
  6. fopen('lotr_3.txt', 'w')
  7. );
  8.  
  9. while (!feof ($fp)) {
  10. $data = fgetcsv($fp, 1024, ':');
  11. foreach ($fps as $key => $val) {
  12. fwrite($val, $data[$key]);
  13. }
  14. }?>



Cytat(Jabol @ 22.03.2007, 06:36:56 ) *
Tutaj dalej mała klasa implementująca nowy język do robienia porównań

Jedno pytanie, po co? Czy w praktyce wykorzystałeś ten kod? Czy kilka klas to nowy język czy też może rozszerzenie języka? Chodzi o to by nazywać rzeczy po imieniu, bez marketingowego szumu (tj Collections framework w Javie czy też krotki, list i słowniki w Pythonie - wszystko to po prostu kolekcje).
Go to the top of the page
+Quote Post

Posty w temacie
- misiek172   Python   19.03.2007, 11:37:12
- - nasty_psycho   Witam, Ja osobiście nie znam python-a, ale z tego ...   19.03.2007, 12:34:08
- - wolan   misiek172: do czego potrzebujesz tego Pythona? na...   21.03.2007, 16:32:37
- - Fipaj   Panowie, po prostu wstyd ;-) http://pl.wikipedia.o...   21.03.2007, 18:22:44
- - Jabol   Python jest po prostu niesamowity. Porównywanie te...   21.03.2007, 18:34:22
- - son   Jabol dałeś świetną recenzję... aż wypada poznać p...   21.03.2007, 18:46:56
- - Fuzja   Książka Python od podstaw. Traktuje od podstaw czy...   21.03.2007, 18:51:29
- - wolan   tutorial i potem Dive into Python. A potem jak chc...   21.03.2007, 19:34:32
- - splatch   A ja powiem tylko, że oprócz wielkich zachwytów i ...   22.03.2007, 00:03:32
- - Jabol   Nie napisałem, że w Pythonie się ba...   22.03.2007, 06:36:56
|- - splatch   Cytat(Jabol @ 22.03.2007, 06:36:56 ) ...   22.03.2007, 07:53:54
- - nasty_psycho   Cytatnasty_psycho: mała popularnosc? ohmy.gif obec...   22.03.2007, 11:07:33
- - Fuzja   No składnia to akurat dziwna nie jest napewno... W...   22.03.2007, 13:52:25
|- - splatch   Cytat(Fuzja @ 22.03.2007, 13:52:25 ) ...   22.03.2007, 14:28:35
|- - mike_mech   Cytat(splatch @ 22.03.2007, 14:28:35 ...   22.03.2007, 14:37:54
- - Fuzja   Mi składnia odpowiada. Słuchajcie to nie...   22.03.2007, 14:47:43
- - Ociu   Brakuje jeszcze wypowiedzi fana RoR, że Ruby ma co...   22.03.2007, 15:09:29
- - Fuzja   Python: Plusy: - Działa na wszystkich platformach ...   22.03.2007, 15:30:04
- - nasty_psycho   CytatChciałem tylko pokazać nasty_psycho, że są fi...   22.03.2007, 15:51:09
- - Fuzja   Trustudio to nie jest nic ciekawego i wartego uwag...   22.03.2007, 16:13:32
- - nasty_psycho   fuzja: Pamiętasz jak społeczność PHP tez stękała z...   22.03.2007, 16:21:18
- - Jabol   Co do frameworków to muszę przyznać, ...   22.03.2007, 16:25:13
- - Fuzja   Ja lubię nie mieć wyboru i korzystać z jednego ide...   22.03.2007, 16:45:53
- - Hacker   Przejrzysta składnia?? Dla mnie składnia...   24.03.2007, 11:39:00
- - Fuzja   No trudno żeby nie uraziła skoro uważasz, że robie...   24.03.2007, 12:06:09
- - nasty_psycho   CytatNo trudno żeby nie uraziła skoro uważasz, że ...   24.03.2007, 16:35:20
- - Fuzja   A mono to rzeczywiście zajebiście działa, na Twoje...   24.03.2007, 17:16:17
- - nasty_psycho   CytatA mono to rzeczywiście zajebiście d...   24.03.2007, 17:35:55
- - Fuzja   Co ma 2 cytat do trzeciego... To jest ułatwienie r...   24.03.2007, 17:38:07
- - ferr   Problem w tym kolego nasty, ze wydaje mi sie, ze T...   24.03.2007, 17:48:16
- - revyag   Cytatw Pythonie pisze sie coraz wiecej (chocby gro...   24.03.2007, 17:56:16
|- - ano   Cytat(revyag @ 24.03.2007, 17:56:16 )...   24.03.2007, 21:10:08
- - ferr   ano: nadgorliwosc gorsza od faszyzmu ;-), ale zdaj...   24.03.2007, 21:39:12
- - sztosz   Może kogoś przekona spojrzenie Bruce'a Eckel...   26.03.2007, 11:09:10
|- - Jabol   Cytat(sztosz @ 26.03.2007, 12:09:10 )...   26.03.2007, 17:41:08
- - revyag   Cytat(ano @ 24.03.2007, 22:10:08 ) ==...   26.03.2007, 17:24:31
- - Fuzja   "Trzeba jednak niestety przyznać, że w polsce...   26.03.2007, 17:46:17
|- - Jabol   Cytat(Fuzja @ 26.03.2007, 18:46:17 ) ...   26.03.2007, 18:18:07
- - wolan   warto wspomniec jeszcze takie projekty, jak Jython...   26.03.2007, 17:47:01
- - Fipaj   Takie rzeczy lepiej ustalić gdzieś publicznie, a n...   26.03.2007, 18:23:26
- - Jabol   Ale przecież nie tutaj - to jest forum o php....   26.03.2007, 18:42:10
- - hello.word   Nie lubie PHP, strasznie mi się nie podoba. Odpowi...   26.03.2007, 22:02:38
|- - splatch   Nie lubię Pythona, strasznie mi się nie podoba. Od...   26.03.2007, 22:16:02
|- - hello.word   Cytat(splatch @ 26.03.2007, 21:16:02 ...   27.03.2007, 09:08:22
|- - mike_mech   Cytat(hello.word @ 27.03.2007, 10:08...   27.03.2007, 09:34:52
- - sztosz   Satysfakcję   27.03.2007, 00:05:29
|- - Jabol   Cytat(sztosz @ 27.03.2007, 01:05:29 )...   27.03.2007, 05:22:45
- - splatch   Panowie, może ktoś powie do czego ma prowadzić ta ...   27.03.2007, 06:26:07
- - kwiateusz   Cytat(hello.word @ 26.03.2007, 23:02...   27.03.2007, 09:11:40
|- - sztosz   Cytat(kwiateusz @ 27.03.2007, 10:11:4...   27.03.2007, 10:06:48
|- - hello.word   Cytat(kwiateusz @ 27.03.2007, 08:11:4...   27.03.2007, 10:21:31
- - revyag   Cytat(hello.word @ 27.03.2007, 10:08...   27.03.2007, 09:31:14
- - DeyV   Kurcze - ale się temat zepsuł. A tak ciekawie się...   27.03.2007, 10:27:16
- - nasty_psycho   CytatMam honor PHP nie tykam! Dorobił sie...   27.03.2007, 15:46:48
|- - Jabol   Cytat(nasty_psycho @ 27.03.2007, 16:46...   27.03.2007, 17:57:30
- - Fuzja   nasty_psycho: chyba sobie kpisz, wolisz pisac w pe...   27.03.2007, 16:11:18
- - nasty_psycho   CytatPoza tym python ma w sobie ogromny potencjał ...   27.03.2007, 16:18:01
- - Fipaj   Ten temat śledzę już od dawna tylko dla dobrej zab...   27.03.2007, 16:31:40
- - Fuzja   Jak dla mnie django jest lepszy niż RoR, wygodniej...   27.03.2007, 17:04:05
- - Riklaunim   Ja przeszedłem na django/python i nie odczuwam chę...   27.03.2007, 18:52:02
- - sztosz   Jabol dobrze napisał. Nie chodzi o to aby kogoś pr...   27.03.2007, 21:36:25
- - kwiateusz   Czytam sobie ten temat od początku i na wstępie mi...   27.03.2007, 22:18:41
- - Fuzja   Tak jak pisałem python od podstaw + python.rk.edu....   27.03.2007, 22:52:34
- - kwiateusz   a właśnie ktoś tam pisał po dr...   27.03.2007, 23:03:27
- - Fuzja   nie moge zmienic sygnatury Perl ma skladnie, ze h...   27.03.2007, 23:47:14
- - Jabol   Jest taki kawał. Rozmawiają dwaj programiści o per...   28.03.2007, 06:31:35
|- - Riklaunim   Cytat(Jabol @ 28.03.2007, 07:31:35 ) ...   28.03.2007, 07:13:45
- - mike_mech   Zainteresowaliście mnie. Choć może nie tyle zainte...   28.03.2007, 07:50:52
- - siemakuba   Przyznam, że też się zaciekawiłem. Przyznam @Jabol...   28.03.2007, 08:32:39
- - kwiateusz   JA tez sie chyba zainteresuje Dive Into Python tyl...   28.03.2007, 08:53:57
- - siemakuba   @kwiateusz: w razie czego wikibooks nadciąga z pom...   28.03.2007, 09:00:21
- - Jabol   Co do IDE... osobiście pisze w kombie vim + i...   28.03.2007, 11:46:17
- - sztosz   Może Komodo? http://www.activestate.com/products/k...   28.03.2007, 12:12:23
- - Hacker   Ja również postanowiłem dać Nura w ...   28.03.2007, 12:19:01
- - Riklaunim   ja tam jako IDE używam kate - edytor tekstowy z ko...   28.03.2007, 13:36:39
- - Turgon   Riklaunim: Nawet się nie waż Bo w końcu wybiorę s...   29.03.2007, 17:25:15
- - sztosz   A czemu? Ja bardzo chętnie przeczytam takie porówn...   29.03.2007, 21:08:06
- - occulkot   Sam rowniez naleze do nawroconych z phpa na python...   29.03.2007, 21:29:35
- - Ace   Z pół roku temu zainteresowałem sie Python'em,...   30.03.2007, 09:41:32
- - mike_mech   Zgodnie z obietnicą zacząłem się uczyć Pythona. Ch...   2.04.2007, 09:20:22
- - NuLL   Intefejsy w aplikacji produkcyjnej sie wywala a ab...   2.04.2007, 09:28:52
|- - mike_mech   Cytat(NuLL @ 2.04.2007, 10:28:52 ) In...   2.04.2007, 09:54:29
- - athabus   A właśnie miałem kupić książkę do Pythona... Ale j...   2.04.2007, 10:02:31
|- - Riklaunim   Cytat(athabus @ 2.04.2007, 11:02:31 )...   2.04.2007, 10:36:45
|- - splatch   Cytat(Riklaunim @ 2.04.2007, 11:36:45...   2.04.2007, 11:18:21
- - athabus   splatch mnie uprzedził, więc nie będę go powtarzał...   2.04.2007, 11:58:37
- - sztosz   Najpierw uprzedzę, że być może gówno wiem o progra...   2.04.2007, 14:47:00
- - athabus   @sztos interfejsy dodają obiektowi je implementuja...   2.04.2007, 14:56:31
- - sztosz   Czyli dobrze mi się wydaje że to ju...   2.04.2007, 15:07:12
- - nasty_psycho   sztosz: dam Ci dwa przykłady w których u...   2.04.2007, 19:23:38
- - sztosz   Ok co do klasy abstrakcyjnej się z tobą zgodzę że ...   2.04.2007, 21:42:23
- - athabus   @sztosz - myślisz małą skalą :-) OOP chodzi o eleg...   2.04.2007, 21:58:02
- - mike_mech   Panowie parafrazując słowa jednego z wi...   2.04.2007, 22:09:43
- - sztosz   Hmm... ale te final, abstract etc... można zawrzeć...   3.04.2007, 00:54:35
- - Jabol   Osobiście zgadzam się ze Sztosem. Ale może to po p...   3.04.2007, 18:13:31
- - Sedziwoj   PHP konwertuje typy 'w locie' ale je rozpo...   3.04.2007, 18:44:25
|- - Jabol   Cytat(Sedziwoj @ 3.04.2007, 19:44:25 ...   3.04.2007, 18:51:14
- - kwiateusz   klasa abstrakcyjna dla mnie tez jest zbędna, ale i...   3.04.2007, 19:05:53
- - Sedziwoj   abstrakcja dostarcza pewne metody dla danej grupy,...   3.04.2007, 19:21:24
- - Zeman   Cytat(mike_mech @ 2.04.2007, 23:09:43...   3.04.2007, 20:24:04
3 Stron V   1 2 3 >


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 26.12.2025 - 18:01