Discussion:
Jak to przepisać w Pythonie
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
grzesiek
2006-11-24 15:15:50 UTC
Permalink
W wyniku mojego zainteresowania Ptyhonem postanowiłem sprawdzić jak
sie ma te cudowne programowanie w Pythonie do rzeczywistości.
Postanowiłe wię przepisać jeden z moich programów na pythona.
Program napisany był w C++.
Więc mam:
...
string colection("");

colection = argv[test?2:1];

unsigned int count_column = argv[test?3:2] == NULL ?colection.size()
:atoi(argv[test?3:2]);

unsigned int count_colection = colection.size();

string generate(count_column, colection[0]); // tu jest problem
...

Pisze w Pythonie i zatrzymałem sie na:
...
colection = sys.argv[1]
count_column = sys.argv[2]
count_colection = len(colection)
generate = ? // jak to napisać
...

Dodam że nie znam Pythona, dopiero sie nim interesuje. Poza tym będę
chciał posługiwać sie obiektem generate w następujący sopsób:
// w C++ np.:
generate[col] = colection[save_col_pos[col]];

Z tego co wiem to w Pythonie nie zabardzo sie tak da:
# python
generate = "abc"
# chcę zmienić wszystkie znaki n apierwszy
generate[1] = generate[0]
generate[2] = generate[0]

W dokumentacji jest wiele metod dla obiektów string ale tam pisze że
większość z nich nie będzie dostępna w wersji 3 Pythona, więc
korzystanie z nich odpada.
Tupteq
2006-11-24 16:15:02 UTC
Permalink
Post by grzesiek
W wyniku mojego zainteresowania Ptyhonem postanowiłem sprawdzić jak
sie ma te cudowne programowanie w Pythonie do rzeczywistości.
Postanowiłe wię przepisać jeden z moich programów na pythona.
Program napisany był w C++.
[CIACH]

Bardzo to to niejasne, jak dla mnie. Nie za bardzo rozumiem o co Ci chodzi.
Post by grzesiek
# python
generate = "abc"
# chcę zmienić wszystkie znaki n apierwszy
generate[1] = generate[0]
generate[2] = generate[0]
Da się wszystko, ale trzeba trochę inaczej :)
Post by grzesiek
W dokumentacji jest wiele metod dla obiektów string ale tam pisze że
większość z nich nie będzie dostępna w wersji 3 Pythona, więc
korzystanie z nich odpada.
Hmm, a nie chodzi przypadkiem o funkcje modułu string? Nic mi nie
wiadomo, żeby ktoś chciał usuwać metody stringa, natomiast słyszałem, że
moduł string jest depreciated.
--
Pozdro... Tupteq
Jaroslaw Zabiello
2006-11-24 16:55:46 UTC
Permalink
Post by grzesiek
# python
generate = "abc"
# chcę zmienić wszystkie znaki n apierwszy
generate[1] = generate[0]
generate[2] = generate[0]
generate = generate[0] * len(generate)
--
Jarosław Zabiełło
http://blog.zabiello.com
grzesiek
2006-11-24 18:31:56 UTC
Permalink
Post by Jaroslaw Zabiello
generate = generate[0] * len(generate)
Dziękuje, nie dokładnie coś takeigo mi było potrzebne ale to mnie,
że tak powiem zainspirowało :-).
Napisałem to tak:

generate = ""
x = 0
while x < int(count_column):
generate += colection[0]
x += 1

Działa jak trzeba. Teraz mam takie małe spostrzeżenie: czy to jest
"łatwiejsze" niż w C++:
string generate(count_column, colection[0]);
No nie wiem, coś mi sie ten Python przestaje się podobac :-). Chyba
że to sie da krócej napisać w Pythonie, nie wiem.

Teraz mam kolejny przestój:

colection = sys.argv[1]
...
generate = ""
x = 0
while x < int(count_column):
generate += colection[0]
x += 1
...
col = 0
...
save_col_pos = []
x = 0
while x < int(count_column):
save_col_pos.append(0)
x += 1
...
# następnie powinno być:
generate[col] = colection[save_col_pos[col]];

ale nie wiem jak to przetłumaczyć :-(.
Gcyby tak ktoś z szanownych grupowiczów zechciał mnie oświecić jak
przypisać dla jednego znaku ze string zawartość innego stringa
indeksowaną za pomocą jednej z elemętów listy, czy jakoś tak :-).
Z góry DZIĘKUJĘ
Jaroslaw Zabiello
2006-11-24 20:07:51 UTC
Permalink
Post by grzesiek
Post by Jaroslaw Zabiello
generate = generate[0] * len(generate)
Dziękuje, nie dokładnie coś takeigo mi było potrzebne ale to mnie,
że tak powiem zainspirowało :-).
generate = ""
x = 0
generate += colection[0]
x += 1
A po cholerę tak zagmatwanie skoro można tak prosto?
Post by grzesiek
Działa jak trzeba.
Moje też. I na dodatek jest prostsza i działa wydajniej.
Post by grzesiek
Teraz mam takie małe spostrzeżenie: czy to jest
string generate(count_column, colection[0]);
A nie? Znacznie prostsze. Python jest znacznie prostszy, tylko trzeba
oderwać się mentalnie od myślenia w C++.

[...]
Post by grzesiek
Gcyby tak ktoś z szanownych grupowiczów zechciał mnie oświecić
W ramach oświecenia polecam poczytać sobie coś na temat stylu pisania w
Pythonie zamiast na siłę wtłączać w niego zgmatwane konstrukcje. Np.
Zacznij książki Dive into Python http://diveintopython.org/
--
Jaroslaw Zabiello
http://blog.zabiello.com
Rob Wolfe
2006-11-24 21:02:50 UTC
Permalink
Post by grzesiek
Post by Jaroslaw Zabiello
generate = generate[0] * len(generate)
Dziękuje, nie dokładnie coś takeigo mi było potrzebne ale to mnie,
że tak powiem zainspirowało :-).
generate = ""
x = 0
generate += colection[0]
x += 1
Ten kawałek kodu nie ma nic wspólnego z Pythonem.
Na początek przeczytaj standardowy tutorial Pythona,
a dopiero później zacznij pisać w tym języku. [1]
Post by grzesiek
Działa jak trzeba. Teraz mam takie małe spostrzeżenie: czy to jest
Z pewnością nie jest, bo jest napisane w sposób skrajnie
niepythoniczny.

A co powiesz na to:

generate = collection[0] * len(collection)

albo na to:

generate = "".join([collection[0] for c in collection])
?
Post by grzesiek
string generate(count_column, colection[0]);
No nie wiem, coś mi sie ten Python przestaje się podobac :-). Chyba
że to sie da krócej napisać w Pythonie, nie wiem.
Zdecydowanie nie wiesz.
Post by grzesiek
colection = sys.argv[1]
...
generate = ""
x = 0
generate += colection[0]
x += 1
...
col = 0
...
save_col_pos = []
x = 0
Po kiego grzyba tu używasz funkcji `int`?
Post by grzesiek
save_col_pos.append(0)
x += 1
...
Tego całego while'a w Pythonie zapisuje się tak:

save_col_pos = [0] * count_column
Post by grzesiek
generate[col] = colection[save_col_pos[col]];
Lista `save_col_pos` zawiera _same_ zera, a więc
rozumiem, że Twoim celem jest wpisanie do generate
pierwszego znaku z collection na pozycję `col`?
Post by grzesiek
ale nie wiem jak to przetłumaczyć :-(.
Gcyby tak ktoś z szanownych grupowiczów zechciał mnie oświecić jak
przypisać dla jednego znaku ze string zawartość innego stringa
Stringi są *niemodyfikowalne*. Modyfikować możesz *listy*.
Post by grzesiek
indeksowaną za pomocą jednej z elemętów listy, czy jakoś tak :-).
Nie mam pojęcia co miałeś tu na myśli.
Post by grzesiek
Z góry DZIĘKUJĘ
Ufff... jest za co. :)

[1] http://docs.python.org/tut/tut.html
--
pozdrawiam
Rob
grzesiek
2006-11-24 22:58:35 UTC
Permalink
Post by Jaroslaw Zabiello
A nie? Znacznie prostsze. Python jest znacznie prostszy, tylko trzeba
oderwać się mentalnie od myślenia w C++.
też to poczułem :-), że ja thinkink i c++ a nie python
Post by Jaroslaw Zabiello
W ramach oświecenia polecam poczytać sobie coś na temat stylu pisania w
Pythonie zamiast na siłę wtłączać w niego zgmatwane konstrukcje. Np.
Zacznij książki Dive into Python http://diveintopython.org/
juz przez te ramy przeszłem - przeczytałem do obiektów :-)
Post by Jaroslaw Zabiello
generate = collection[0] * len(collection)
generate = "".join([collection[0] for c in collection])
?
nie rozumiemy się, generate ma być długości count_column a nie
collection
jaka jest różnica między nimi?
colection = sys.argv[1]
count_column = sys.argv[2]
ja rozumiem że oba są stringami więc używam int w while, a jak nie
to mam:

[***@localhost generator]$ ./gen.py abc 3

^[Traceback (most recent call last):
File "./gen.py", line 13, in ?
while x < count_column:
KeyboardInterrupt

wstawiłem:
generate = colection[0] * len(count_column)
i dziłą
teraz mam pytanie? jeżeli napiszę: ./gen.py abc 3
sys.argv[1] - jest string
sys.argv[2] - jest automatycznie int a nie jak w c char[]
Post by Jaroslaw Zabiello
Post by grzesiek
save_col_pos = []
x = 0
Po kiego grzyba tu używasz funkcji `int`?
Post by grzesiek
save_col_pos.append(0)
x += 1
...
save_col_pos = [0] * count_column
zapisałem i wywala:
[***@localhost generator]$ ./gen.py abc 4
Traceback (most recent call last):
File "./gen.py", line 17, in ?
save_col_pos = [0] * count_column
TypeError: can't multiply sequence by non-int
Post by Jaroslaw Zabiello
Post by grzesiek
generate[col] = colection[save_col_pos[col]];
Lista `save_col_pos` zawiera _same_ zera, a więc
rozumiem, że Twoim celem jest wpisanie do generate
pierwszego znaku z collection na pozycję `col`?
...z collection pod pozycją, która jest zapisana w (w c to była
tablica int) liscie save_col_pos pod indeksem col
Post by Jaroslaw Zabiello
Stringi są *niemodyfikowalne*. Modyfikować możesz *listy*.
i w tym problem bo program ma generować takie np wyniki:
aaa
baa
caa
aba
aca
itd.
czyli string generate musi przed wypisaniem kolejnej kombinacji
zmienić jeden ze znaków, a tu: *niemodyfikowalne* :0
Post by Jaroslaw Zabiello
Jeśli na przyszłość chcesz uzyskać jakąś sensowną pomoc,
to prezentuj jakiś *spójny*, *działający* kod.
poniżej całe kody pokażę
Post by Jaroslaw Zabiello
generate = list(collection[0] * len(collection))
niech będzie ale wtedy będe miał
generate ['a', 'a', 'a']
a nie
aaa
w konsoli

teraz to co chcę przepisać:
http://c-plus-plus.w.interia.pl/blog/gen.html
a to co mam w pyhtonie - oczywiście nie zamieżam wszystkiego
przepisywac tylko główny mechanizm:

#!/usr/bin/env python

import sys
import string

if __name__ == "__main__":
collection = sys.argv[1]
count_column = sys.argv[2]
count_colection = len(collection)

#powinno byc ale nie dział za bardzo
# generate = list(collection[0] * len(count_column))
generate = list(collection[0] * len(collection))

col = 0
end = None

save_col_pos = []
x = 0
while x < int(count_column):
save_col_pos.append(0)
x += 1

count_combination = 1
x= 0
while x < int(count_column):
count_combination *= count_colection
x += 1

while not end:
#generate[col] = colection[save_col_pos[col]];
#cout << generate << endl;
end = 1 # wychodzę zeby nie zapętlic, tego tu nie ma być :-)

#test
print "collection %s" % (collection)
print "count_column %s" % (count_column)
print "count_colection %d" % (count_colection)
print "generate %s" % (str(generate))
print "count_combination: %d" % (count_combination)
print "-------------------------"
print "save_col_pos: "
print save_col_pos

i mam wyniki:
[***@localhost generator]$ ./gen.py abc 4
collection abc
count_column 4
count_colection 3
generate ['a']
count_combination: 81
-------------------------
save_col_pos:
[0, 0, 0, 0]


Teraz chciał by sie tylko zapytać czy ten program, który chcę
przepisać nie jest przypadkiem jednym z tych, w których to python nie
sprawdza sie najlepiej, nie chodzi o szybkość tylko same zakodowanie
tego.
Być może zamiast męczyć sie z tym pyhtonem powinienem:
"Wybacz, ale jeśli lubisz taki styl programowania, to Python
jest zdecydowanie nie dla Ciebie."
zrezygnować?
Może najlepszym językiem dla mnie jest rzeczywiście ten, który znam
najlepiej niż ten, który ma zawalistą skłądnie, np. bez klamr {}.
A waszym zdaniem czy Python mógłby zastąpić mi C/C++ jeżeli nie
bieżemy pod uwagę wydajności i samego typu języka
(skryptowy-kompilowany). Oczywiście jak motywację takiego rozważania
przyjmują że w Pythonie ułatwił bym sobie pisanie (jak na ironie to
narazie sobie utrudniam:-))
Ale z tego co widziałęm to programowanie w PyGTK jest znacznie
prostze i ktutsze przedewszystkim niż w GTK+ - C, a nie mówiąc o
gtkmm - C++.
Husio
2006-11-24 23:42:59 UTC
Permalink
Post by grzesiek
Może najlepszym językiem dla mnie jest rzeczywiście ten, który znam
najlepiej niż ten, który ma zawalistą skłądnie, np. bez klamr {}.
Tak chyba moze powiedziec kazdy programista.
A po co w pythonie klamry do zaznaczania obszarow?
Post by grzesiek
A waszym zdaniem czy Python mógłby zastąpić mi C/C++ jeżeli nie
bieżemy pod uwagę wydajności i samego typu języka
(skryptowy-kompilowany). Oczywiście jak motywację takiego rozważania
przyjmują że w Pythonie ułatwił bym sobie pisanie (jak na ironie to
narazie sobie utrudniam:-))
Ale z tego co widziałęm to programowanie w PyGTK jest znacznie
prostze i ktutsze przedewszystkim niż w GTK+ - C, a nie mówiąc o
gtkmm - C++.
Ponad rok temu zaczalem jako-tako pisac *programy*. Pierwszy byk
oczywiscie Python. Potem naszlo mnie zeby poznac cos bardziej
klasycznego. Wybralem C++ i nie wiedzialem co z czym i kiedy. Zamiast
skupic sie na problemie, myslalem co jak zapisac, dlaczego pojawil sie
blad, jaki cos typ zwraca, gdzie wyjatek... ehh. Wiecej pisania niz
myslenia. Wtedy wlasnie docenilem pythona.
grzesiek
2006-11-25 10:38:24 UTC
Permalink
Post by Husio
A po co w pythonie klamry do zaznaczania obszarow?
ale ja nie pisałęm że mi brakuje klamr, wręcz przeciwnie, uważam
że to piękna idea
Post by Husio
Ponad rok temu zaczalem jako-tako pisac *programy*. Pierwszy byk
oczywiscie Python.
być może to jest kluczem-> pierwszy język, którego sie uczymy jest
dla nas zawsze jakimś odneisieniem do nowych języków - rozumiemy go
najlepiej
Post by Husio
Potem naszlo mnie zeby poznac cos bardziej
klasycznego. Wybralem C++ i nie wiedzialem co z czym i kiedy.
a z jakiej książki sie uczyłęś? bo C++ to nie łatwy język, bez
dobrych podstaw to ... :-)
Post by Husio
Zamiast
skupic sie na problemie, myslalem co jak zapisac, dlaczego pojawil sie
blad, jaki cos typ zwraca, gdzie wyjatek... ehh. Wiecej pisania niz
myslenia.
gdy pisze w C/C++ nie mysle jak to zapisać pod kątem składni, znam
ją na tyle że nie musze już o niej myśleć, ale taka wprawa
przyszłą domnie po jakimś roku nauki
w pythonie pwenie trwało by to krócej ale pewnie też dlatego że ma
mniejsze możliwości, to i składnia prostsza
bez obrazy ale jak dlamnie to te pętle w pythonie przypominają
visualbasica heheh
nawet javascript, php mają "normalne" pętle
Post by Husio
Wtedy wlasnie docenilem pythona.
mi podobają sie w Pythonie takie rzeczy jak to:
def sum(arg1, arg2):
return arg1 + arg2

print sum(42, 47)
print sum('spam ', "eggs")
choć w C++ są wzorce, to tu jest bardziej intuicyjnie
Marcin Mielżyński
2006-11-25 10:59:18 UTC
Permalink
Post by grzesiek
w pythonie pwenie trwało by to krócej ale pewnie też dlatego że ma
mniejsze możliwości, to i składnia prostsza
Nie możesz porównywać tych dwóch języków, za bardzo się różnią.
Post by grzesiek
bez obrazy ale jak dlamnie to te pętle w pythonie przypominają
visualbasica heheh
a co powiesz na:
for(n,1,10,n print)


lopex
grzesiek
2006-11-25 11:28:17 UTC
Permalink
Post by Marcin Mielżyński
for(n,1,10,n print)
8-0

"Firma Brandlay Sp. z o.o., operator największego polskiego portalu
społeczności internetowej grono.net poszukuje do pracy w biurze w
Warszawie
osoby na stanowisko Programista Python."
A jak myślicię, dlaczego wolą to napisac w Pythonie niż PHP?
Bo jak znam PHP i teraz liznołem Pythona i nie wiem czemu oni wolą
pythona?
Co takiego przemawia za Pythonem, czy on będize konkutencją dla PHP
tak jak .NET dla Javy (wiem że .NET to framework a Java jest
platformą)
m***@gmail.com
2006-12-01 01:53:55 UTC
Permalink
Post by grzesiek
Post by Marcin Mielżyński
for(n,1,10,n print)
8-0
"Firma Brandlay Sp. z o.o., operator największego polskiego portalu
społeczności internetowej grono.net poszukuje do pracy w biurze w
Warszawie
osoby na stanowisko Programista Python."
A jak myślicię, dlaczego wolą to napisac w Pythonie niż PHP?
Bo jak znam PHP i teraz liznołem Pythona i nie wiem czemu oni wolą
pythona?
Dlatego że w Pythonie możesz zdefiniować callback jako normalną
zmienną/obiekt, który po prostu wywołujesz, zamiast bawić się w określenie
funkcji jako string który potem wywołujesz za pomocą odpowiedniej funkcji,
tworząc potworek.

Dlatego, że Python ma wyjątki. Php5 niby też ma, tyle że np. wywołanie
nieistniejącej funkcji wywali ci fatal error i przerwie skrypt, zamiast
wyrzucić wyjątek.

No i to że w Pythonie o wiele trudniej napisać spaghetti code :).

p. m.
Piotr Dembiński
2006-12-01 14:22:55 UTC
Permalink
***@gmail.com writes:

[...]
Post by m***@gmail.com
Dlatego że w Pythonie możesz zdefiniować callback jako
normalną zmienną/obiekt, który po prostu wywołujesz,
W kwestii formalnej: pythonowa zmienna i pythonowy obiekt to dwie
różne rzeczy. W szczególności, w przypadku CPythona, każda zmienna
jest fizycznie parą odnośników: odnośnikiem do obiektu napisowego,
który identyfikuje zmienną i jest kluczem w słowniku przestrzeni nazw,
w której zmienna jest zdefiniowana, o zawartości unikalnej w ramach
całej przestrzeni nazw, oraz odnośnikiem do obiektu właściwego,
z którym zmienna jest związana.

Bezpośrednią konsekwencją takiego podejścia do tematyki zmiennych jest
wysoka elastyczność samego języka: instrukcja definiująca nową klasę
lub funkcję jest po prostu instrukcją tworzącą (dynamicznie -- duża
różnica w porównaniu do Javy i -- z tego co wiem -- podobieństwo do
Lispa) nowy obiekt określonego typu i przypisującą odnośnik do tego
obiektu do zmiennej.
--
http://www.piotr.dembiński.prv.pl
Jaroslaw Zabiello
2006-12-01 11:29:43 UTC
Permalink
Post by grzesiek
Co takiego przemawia za Pythonem, czy on będize konkutencją dla PHP
Mnostwo rzeczy. Wymienie tylko niektore. Np. Python posiada znacznie
czytelniejsza i spojniejsza skladnie. Posiada takze pelna obiektowosc z
prawdziwymi przestrzeniami nazw (PHP ma jeden wspolny smietnik z
chaotycznie ponazywanymi funkcjami). Python posiada tez doskonala
implementacje Unicode i pozwala konwertowac prawie wszystko na wszystko
(np. zaden problem przekodowac znaki z cp1250 na polskiego dos'a czy latin2
i utf8). Python potrafi rozpoznawac polskie znaki w wyrazeniach regularnych
i operacjach na stringach. Np. mozna zrobic aby \w oznaczal nie tylko
dowolny znak ASCII ale takze uwzglednial polskie ogonki. PHP ma tylko
jakies glupie, niespojne funkcje do UTF8, ktore na dodatek sie wywalaja bo
korzystaja z rownie glupiego glupiego iconv'a. Znam ten bol, jak trzeba
bylo konwertowac teksty z cp1250 na latin2 i w tekscie wystepowaly znaki
dlugie myslnika i polskie (gorne i dolne) cudzyslowy. Poza tym Python
posiada obsluge wielowatkowosci i jest jezykiem ogolnego zastosowania a nie
jezykiem skryptowym do generowania kodu html. Starczy, czy chcesz wiecej?
:)
--
Jarosław Zabiełło
http://blog.zabiello.com
grzesiek
2006-12-01 13:03:13 UTC
Permalink
Post by Jaroslaw Zabiello
Post by grzesiek
Co takiego przemawia za Pythonem, czy on będize konkutencją dla PHP
Mnostwo rzeczy. Wymienie tylko niektore. Np. Python posiada znacznie
czytelniejsza i spojniejsza skladnie. Posiada takze pelna obiektowosc z
prawdziwymi przestrzeniami nazw (PHP ma jeden wspolny smietnik z
chaotycznie ponazywanymi funkcjami). Python posiada tez doskonala
implementacje Unicode i pozwala konwertowac prawie wszystko na wszystko
(np. zaden problem przekodowac znaki z cp1250 na polskiego dos'a czy latin2
i utf8). Python potrafi rozpoznawac polskie znaki w wyrazeniach regularnych
i operacjach na stringach. Np. mozna zrobic aby \w oznaczal nie tylko
dowolny znak ASCII ale takze uwzglednial polskie ogonki. PHP ma tylko
jakies glupie, niespojne funkcje do UTF8, ktore na dodatek sie wywalaja bo
korzystaja z rownie glupiego glupiego iconv'a. Znam ten bol, jak trzeba
bylo konwertowac teksty z cp1250 na latin2 i w tekscie wystepowaly znaki
dlugie myslnika i polskie (gorne i dolne) cudzyslowy. Poza tym Python
posiada obsluge wielowatkowosci i jest jezykiem ogolnego zastosowania a nie
jezykiem skryptowym do generowania kodu html. Starczy, czy chcesz wiecej?
:)
Ale nie przewidujesz żeby Python wyparł PHP, chociażby w
najbliższych 3/5 latach?
Popularność PHP jest nieporównywalna do Pythona. Szczególnie w
zastosowaniach takich jak tworzenie dynamicznych stron www?
Poza tym, nie wydaje mi się, aby Python miał więcej funkcji do tego
celu niż PHP.
Wiem, wiem, ilość nie przekłada się na jakość:).
Jaroslaw Zabiello
2006-12-01 13:36:11 UTC
Permalink
Post by grzesiek
Ale nie przewidujesz żeby Python wyparł PHP, chociażby w
najbliższych 3/5 latach?
Nie. PHP bedzie troche tracil, ale pewnie szybko nie zniknie. Problem z PHP
jest taki, ze nie tylko jest zle zaprojektowany to na dodatek idzie w slepa
uliczke i ma developerow lamerow.
Post by grzesiek
Popularność PHP jest nieporównywalna do Pythona. Szczególnie w
zastosowaniach takich jak tworzenie dynamicznych stron www?
Do prostych stronek PHP jest lepszy. Do czego wiekszego najlepiej
poslugiwac sie jakims frameworkiem (takze w PHP). Python do tej pory mial
chaos z tymi frameworkami. Sytuacja sie powoli krystalizuje w kierunku
dominacji Django i moze Pylonsa.

Jesli chodzi o strony webowe to ja tu widze znacznie wieksze zagrozenie dla
PHP ze strony Ruby on Rails niz frameworkow Pythona. Railsy maja doskonala
dokumentacje, kupe ksiazek, bardzo dobrze dopracowany funkcjonalnie
framework (migracje, rjs, capistrano, rxml itp.)
Post by grzesiek
Poza tym, nie wydaje mi się, aby Python miał więcej funkcji do tego
celu niż PHP.
PHP byl od poczatku nieobiektowym jezykiem szablonow ktory sie rozrosl na
bazie latania i przypadkowego dodawania nowych cechy. Python od samej
strony jezyka jest znacznie potezniejszy od PHP.
Post by grzesiek
Wiem, wiem, ilość nie przekłada się na jakość:).
A to inna sprawa. Co z tego ze jest pelno programistow PHP, jak wiekszosc z
nich to totalne lamerstwo. Naprawde dobrego programiste PHP znajdziesz tak
samo trudno jak do Pythona.
--
Jarosław Zabiełło
http://blog.zabiello.com
Grzegorz Staniak
2006-12-01 14:17:32 UTC
Permalink
Post by Jaroslaw Zabiello
Nie. PHP bedzie troche tracil, ale pewnie szybko nie zniknie. Problem z PHP
jest taki, ze nie tylko jest zle zaprojektowany
W ogóle nie jest zaprojektowany. Jest wyewoluowany z pary prostych skryptów
napisanych na potrzeby obs³ugi osobistej strony WWW - i to niestety wszêdzie
widaæ. Ale trudno stawiaæ zarzut z³ego projektu, bo ¿eby cokolwiek poprawiæ
nale¿a³o napisaæ od zera wersjê 3.0 niezgodn± w dó³ tam gdzie trzeba, zamiast
przeæ naprzód. To samo zaszkodzi³o Perlowi - wersja 4 powinna by³a zerwaæ
z histori±, teraz niestety widaæ ile wysi³ku kosztuje przerobienie
rozpêdzonego w z³ym kierunku molocha.

[---]
Post by Jaroslaw Zabiello
Popularno¶æ PHP jest nieporównywalna do Pythona. Szczególnie w
zastosowaniach takich jak tworzenie dynamicznych stron www?
Do prostych stronek PHP jest lepszy. Do czego wiekszego najlepiej
poslugiwac sie jakims frameworkiem (takze w PHP). Python do tej pory mial
chaos z tymi frameworkami. Sytuacja sie powoli krystalizuje w kierunku
dominacji Django i moze Pylonsa.
Taa, a TG oczywi¶cie scze¼nie, bo na CherryPy postawiony ;)

[---]
--
Grzegorz Staniak <***@wp.pl>
grzesiek
2006-12-01 17:46:49 UTC
Permalink
Post by Jaroslaw Zabiello
Nie. PHP bedzie troche tracil, ale pewnie szybko nie zniknie. Problem z PHP
jest taki, ze nie tylko jest zle zaprojektowany to na dodatek idzie w slepa
uliczke i ma developerow lamerow.
A to inna sprawa. Co z tego ze jest pelno programistow PHP, jak wiekszosc z
nich to totalne lamerstwo. Naprawde dobrego programiste PHP znajdziesz tak
samo trudno jak do Pythona.
Mocne słowa :-).

Mam książkę PHP5 i MySQL Biblia. Na podstawie tego, jak autor widzi
php ("Popularność PHP rośnie", "Dlaczego kochamy PHP") można
wywnioskować że php zdobywa swoja popularność dzięki tej "ślepej
uliczce" - nie mówię że nie masz racji, tylko że nie na darmo tam
są takie dodatki jak "PHP dla programistów C". Przyzwyczajenia widać
mają wielki wpływ. Jak to napisał w Thinking in Java wielki guru (a
tak na marginesie wcale mi sie ta książka tak nie podoba): "C++
musiał być kompatybilny wstecz z C aby programiści C łatwo mogli do
niego przejść. Dlatego też C++ odziedziczył, nie które jego
wady..." czy jakoś tak.
Janusz A. Urbanowicz
2006-12-02 16:21:54 UTC
Permalink
Post by grzesiek
Post by Jaroslaw Zabiello
Nie. PHP bedzie troche tracil, ale pewnie szybko nie zniknie. Problem z PHP
jest taki, ze nie tylko jest zle zaprojektowany to na dodatek idzie w slepa
uliczke i ma developerow lamerow.
A to inna sprawa. Co z tego ze jest pelno programistow PHP, jak wiekszosc z
nich to totalne lamerstwo. Naprawde dobrego programiste PHP znajdziesz tak
samo trudno jak do Pythona.
Mocne słowa :-).
Mam książkę PHP5 i MySQL Biblia. Na podstawie tego, jak autor widzi
php ("Popularność PHP rośnie", "Dlaczego kochamy PHP") można
wywnioskować że php zdobywa swoja popularność dzięki tej "ślepej
uliczce" - nie mówię że nie masz racji, tylko że nie na darmo tam
są takie dodatki jak "PHP dla programistów C". Przyzwyczajenia widać
mają wielki wpływ. Jak to napisał w Thinking in Java wielki guru (a
tak na marginesie wcale mi sie ta książka tak nie podoba): "C++
musiał być kompatybilny wstecz z C aby programiści C łatwo mogli do
niego przejść. Dlatego też C++ odziedziczył, nie które jego
wady..." czy jakoś tak.
Wcale nie takie mocne.

Przecietny ,,zawodowy'' programista PHP nie ma pojęcia o systemie na
którym jego ,,aplikacja'' chodzi (np miesza kod i dane _uploadowane
przez userów_), nie ma pojęcia o programowaniu jako takim, o bazach
danych poza najprostszymi tabelami, o strukturalizowaniu aplikacji, i
wogle kurwa o niczym, on tylko umie robić ,,stronki w php''
szuflujące dane z mysql do html i z powrotem.

Miałem nawet takiego co nie wiedział o pconnect, i każda kurwa odsłona
powodowała nowe połączenie do bazy. I co to znaczy że zapytanie ma
zwracać 403 (zwracało 200 i _tekstem_ 403). I to był dobry PHPowiec,
chwalony przez klientów.

Alex
--
JID: ***@hell.pl
PGP: 0x46399138
od zwracania uwagi na detale są lekarze, adwokaci, programiści i zegarmistrze
-- Czerski
Grzegorz Makarewicz
2006-12-02 16:29:33 UTC
Permalink
Post by Janusz A. Urbanowicz
Przecietny ,,zawodowy'' programista PHP nie ma pojęcia o systemie na
którym jego ,,aplikacja'' chodzi (np miesza kod i dane _uploadowane
przez userów_), nie ma pojęcia o programowaniu jako takim, o bazach
danych poza najprostszymi tabelami, o strukturalizowaniu aplikacji, i
wogle kurwa o niczym, on tylko umie robić ,,stronki w php''
szuflujące dane z mysql do html i z powrotem.
To nawet nie student :)


Ale sie wnerwiles :) - to tylko pech, krawiec w php tez zrobi strone,
ale nic ponadto.

mak
Janusz A. Urbanowicz
2006-12-02 16:53:39 UTC
Permalink
Post by Grzegorz Makarewicz
Post by Janusz A. Urbanowicz
Przecietny ,,zawodowy'' programista PHP nie ma pojęcia o systemie na
którym jego ,,aplikacja'' chodzi (np miesza kod i dane _uploadowane
przez userów_), nie ma pojęcia o programowaniu jako takim, o bazach
danych poza najprostszymi tabelami, o strukturalizowaniu aplikacji, i
wogle kurwa o niczym, on tylko umie robić ,,stronki w php''
szuflujące dane z mysql do html i z powrotem.
To nawet nie student :)
Owszem, to wykładowca był. Akademicki.
Post by Grzegorz Makarewicz
Ale sie wnerwiles :) - to tylko pech, krawiec w php tez zrobi strone,
ale nic ponadto.
No po prostu uwielbiam być budzonym rano przez prezesa telefonem że
część webowa projektu się zwaliła.
--
JID: ***@hell.pl
PGP: 0x46399138
od zwracania uwagi na detale są lekarze, adwokaci, programiści i zegarmistrze
-- Czerski
Janusz A. Urbanowicz
2006-12-02 16:55:01 UTC
Permalink
Post by Grzegorz Makarewicz
Post by Janusz A. Urbanowicz
Przecietny ,,zawodowy'' programista PHP nie ma pojęcia o systemie na
którym jego ,,aplikacja'' chodzi (np miesza kod i dane _uploadowane
przez userów_), nie ma pojęcia o programowaniu jako takim, o bazach
danych poza najprostszymi tabelami, o strukturalizowaniu aplikacji, i
wogle kurwa o niczym, on tylko umie robić ,,stronki w php''
szuflujące dane z mysql do html i z powrotem.
To nawet nie student :)
Owszem, to wykładowca był. Akademicki.
Post by Grzegorz Makarewicz
Ale sie wnerwiles :) - to tylko pech, krawiec w php tez zrobi strone,
ale nic ponadto.
No po prostu uwielbiam być budzonym rano przez prezesa telefonem że
część webowa projektu się zwaliła.

A moją opinię o PHP starannie podtrzymuje Wordpress którego regularnie
używam. Zna ktoś blog engine ze wszystkimi wypasami chodzący na django?
--
JID: ***@hell.pl
PGP: 0x46399138
od zwracania uwagi na detale są lekarze, adwokaci, programiści i zegarmistrze
-- Czerski
Grzegorz Makarewicz
2006-12-02 17:28:55 UTC
Permalink
Post by Janusz A. Urbanowicz
Post by Grzegorz Makarewicz
Post by Janusz A. Urbanowicz
Przecietny ,,zawodowy'' programista PHP nie ma pojęcia o systemie na
którym jego ,,aplikacja'' chodzi (np miesza kod i dane _uploadowane
przez userów_), nie ma pojęcia o programowaniu jako takim, o bazach
danych poza najprostszymi tabelami, o strukturalizowaniu aplikacji, i
wogle kurwa o niczym, on tylko umie robić ,,stronki w php''
szuflujące dane z mysql do html i z powrotem.
To nawet nie student :)
Owszem, to wykładowca był. Akademicki.
Taa, ci zawsze widza przyszloc nierealizujaca sie w 99% :)
Post by Janusz A. Urbanowicz
Post by Grzegorz Makarewicz
Ale sie wnerwiles :) - to tylko pech, krawiec w php tez zrobi strone,
ale nic ponadto.
No po prostu uwielbiam być budzonym rano przez prezesa telefonem że
część webowa projektu się zwaliła.
To wylacz tylko telefon i patrz jak firma nie zatrudnia php-owcow :) w
poniedzialki.

I jak masz kaca to tez lecisz aby byka poprawic ?
Nie przesadzaj - oni rowniez maja swoje sztuczki, a php wcale nie jest
zle. Porownujac do mod_pythona to calkiem sa niezle - przynajmniej
dzialaja po 100k hitach, ai serwer sie nie zamula.


Teraz inaczej - Szczecin, nieboszczycy, cmentarz - znalezienie grobu
kogos z rodziny ? W czym to jest napisane ?

Pomiedzy tym terminem, a kilkoma dniami poprzedzajacymi swieto - 2mln
hitow :)

PYTHON i Icor :)

mak
Grzegorz Makarewicz
2006-12-02 16:32:14 UTC
Permalink
Post by grzesiek
Mam książkę PHP5 i MySQL Biblia. Na podstawie tego, jak autor widzi
php ("Popularność PHP rośnie", "Dlaczego kochamy PHP") można
wywnioskować że php zdobywa swoja popularność dzięki tej "ślepej
uliczce" - nie mówię że nie masz racji, tylko że nie na darmo tam
są takie dodatki jak "PHP dla programistów C".
Kazdy sobie cos moze skrobac, ale "programowanie" to nie stronka w php -
to samo co nie wypisanie na tty-erze "Hello world".

mak
Bart Ogryczak
2006-12-01 14:02:46 UTC
Permalink
Post by grzesiek
Ale nie przewidujesz żeby Python wyparł PHP, chociażby w
najbliższych 3/5 latach?
Mysle, ze nawet szybciej. http://www.tiobe.com/tpci.htm
Post by grzesiek
Popularność PHP jest nieporównywalna do Pythona. Szczególnie w
zastosowaniach takich jak tworzenie dynamicznych stron www?
Nie szczególnie, a tylko i wylacznie. I to tez dosyc kiepsko. PHP jest
popularny, bo pozwala na osadzanie kodu bezposrednio w HTML. Podejscie,
które nie ma szans sie sprawdzic w jakimkolwiek powaznym zastosowaniu.
Co do uzywania PHP jako jezyka uniwersalnego, smiechu warte. Nie znam
ani jednej powaznej aplikacji PHP, która nie byla by aplikacja WUI.
PHP-GTK chyba umarlo smiercia naturalna.
Post by grzesiek
Poza tym, nie wydaje mi się, aby Python miał więcej funkcji do tego
celu niż PHP.
Zalezy co rozumiesz przez "funkcje do tego". Zobacz
http://docs.python.org/lib/internet.html
Odpowiednika np. SimpleHTTPServer w PHP nie masz. Nie ma tez nic na
ksztalt WSGI.
http://www.python.org/dev/peps/pep-0333/

Pomijam juz takie "genialnosci" PHP, jak np. ('1dupa' == 1 ) daje true.
Albo '1' == 1, ale $a[1] != $a['1'] itd. System typów w PHP jest OKDR.
Daniel Mróz
2006-12-01 14:57:10 UTC
Permalink
Dnia 1 Dec 2006 06:02:46 -0800
Post by Bart Ogryczak
Nie szczególnie, a tylko i wylacznie. I to tez dosyc kiepsko. PHP jest
popularny, bo pozwala na osadzanie kodu bezposrednio w HTML.
Kolega chyba o mod_python do Apache zapomniał :)


Pozdrawiam
Beorn
--
Daniel 'Beorn' Mróz <***@alpha.pl> http://127.0.0.1/beorn
[GIT d s:- a-@ C++++ UL++++$ P+ L++++ E--- W+ N+++ o? K- w---]
[O- M- V! PS+ PE++ Y+ PGP++ t- 5 X R !tv b+ DI D++ G++ e h*]
[ r(-) y+ ]
Jaroslaw Zabiello
2006-12-01 15:44:19 UTC
Permalink
Post by Daniel Mróz
Dnia 1 Dec 2006 06:02:46 -0800
Post by Bart Ogryczak
Nie szczególnie, a tylko i wylacznie. I to tez dosyc kiepsko. PHP jest
popularny, bo pozwala na osadzanie kodu bezposrednio w HTML.
Kolega chyba o mod_python do Apache zapomniał :)
No niby mozna:
http://www.modpython.org/live/current/doc-html/pyapi-psp.html#pyapi-psp
czy http://spyce.sourceforge.net/ ale skladnia jakas taka nieladna, bo
Python z racji korzystania z wciec do oznaczania blokow nie nadaje sie za
dobrze na osadzanie w HTML. Dlatego takie rozwiazanie jakie stosuja Railsy
(szablony rhtml) w Pythonie by sie nie sprawdzilo.

Wiekszosc woli czystego Python do kodu i jakis jezyk szablonow do warstwy
prezentacyjnej. I to jest chyba najlepsze podejscie dla Pythona.
--
Jarosław Zabiełło
http://blog.zabiello.com
Bart Ogryczak
2006-12-01 18:29:01 UTC
Permalink
Post by Daniel Mróz
Dnia 1 Dec 2006 06:02:46 -0800
Post by Bart Ogryczak
Nie szczególnie, a tylko i wylacznie. I to tez dosyc kiepsko. PHP jest
popularny, bo pozwala na osadzanie kodu bezposrednio w HTML.
Kolega chyba o mod_python do Apache zapomniał :)
Nie, dlaczego? Ja nie twierdze, ze jako jedyny pozwala. Tyle, ze
nastoletni uepmazder nie bedzie potrafil uzyc JSP, mod_python itd.
Pomijaj juz kwestie tego, ze mieszanie logiki z warstwa prezentacji
jest pomyslem nieszczególnym, jesli co ma sie nadawac do czegos
powazniejszego.
Daniel Mróz
2006-12-05 08:16:35 UTC
Permalink
Dnia 1 Dec 2006 10:29:01 -0800
Post by Bart Ogryczak
Post by Daniel Mróz
Post by Bart Ogryczak
Nie szczególnie, a tylko i wylacznie. I to tez dosyc kiepsko. PHP
jest popularny, bo pozwala na osadzanie kodu bezposrednio w HTML.
Kolega chyba o mod_python do Apache zapomniał :)
Nie, dlaczego? Ja nie twierdze, ze jako jedyny pozwala. Tyle, ze
nastoletni uepmazder nie bedzie potrafil uzyc JSP, mod_python itd.
Pomijaj juz kwestie tego, ze mieszanie logiki z warstwa prezentacji
jest pomyslem nieszczególnym, jesli co ma sie nadawac do czegos
powazniejszego.
Osobiście uważam taki pomysł za poroniony (używam ClearSilver).
Chciałem tylko zwrócić uwagę, że popularność PHP może wynikać z czego
innego, np. z bardzo dobrej dokumentacji on-line (wyszukiwarki funkcji,
klas i metod brakuje na http://docs.python.org/), czy promowania od
niemal samego początku jako język do pisania dynamicznych stron WWW.
Kurcze, PHPiarze nawet własne świerszczyki mają z gołymi kodami na
rozkładówkach.


Pozdrawiam
Beorn
--
Daniel 'Beorn' Mróz <***@alpha.pl> http://127.0.0.1/beorn
[GIT d s:- a-@ C++++ UL++++$ P+ L++++ E--- W+ N+++ o? K- w---]
[O- M- V! PS+ PE++ Y+ PGP++ t- 5 X R !tv b+ DI D++ G++ e h*]
[ r(-) y+ ]
Bart Ogryczak
2006-12-05 09:40:03 UTC
Permalink
Post by Daniel Mróz
Dnia 1 Dec 2006 10:29:01 -0800
Post by Bart Ogryczak
Post by Daniel Mróz
Post by Bart Ogryczak
Nie szczególnie, a tylko i wylacznie. I to tez dosyc kiepsko. PHP
jest popularny, bo pozwala na osadzanie kodu bezposrednio w HTML.
Kolega chyba o mod_python do Apache zapomniał :)
Nie, dlaczego? Ja nie twierdze, ze jako jedyny pozwala. Tyle, ze
nastoletni uepmazder nie bedzie potrafil uzyc JSP, mod_python itd.
Pomijaj juz kwestie tego, ze mieszanie logiki z warstwa prezentacji
jest pomyslem nieszczególnym, jesli co ma sie nadawac do czegos
powazniejszego.
Osobiście uważam taki pomysł za poroniony (używam ClearSilver).
Chciałem tylko zwrócić uwagę, że popularność PHP może wynikać z czego
innego, np. z bardzo dobrej dokumentacji on-line (wyszukiwarki funkcji,
klas i metod brakuje na http://docs.python.org/),
Byc moze. Ale moim zdaniem przede wszystkim ze wzgledu na cechy
czyniace go zrozumialymi dla totalnych laików. Niestety te same cechy
czynia go upierdliwymi dla zawodowców. Np. slabe typy sa fajne, jak
sie pisze maly skrypcik. Ale jak cos wiekszego, to nagle wychodza
kwiatki typu, ze masz $haslo_ze_stronki == $haslo_z_bazy, które true
dla hasla ze stronki = '0' i drugiego dowolnego bez numerków.[*]

Prawdziwe OOP jest niezrozumiale dla laików, podobnie programowanie
funkcyjne. Dlatego nie ma szans, zeby domorosly uepmaster docenil
hierarchie klas czy rzeczy takie jak list comprehencion czy funkcyjna
obróbka list.
Post by Daniel Mróz
czy promowania od
niemal samego początku jako język do pisania dynamicznych stron WWW.
To logiczne, w wersji wypuszczonej na swiat nazywal sie to Personal
Home Page Form Intepreter (PHP/FI) i bylo zestawem funkcji CGI do
obróbki HTML-owych formularzy.
Post by Daniel Mróz
Kurcze, PHPiarze nawet własne świerszczyki mają z gołymi kodami na
rozkładówkach.
Widzisz, po prostu w Pythonie nie masz takie potrzeby. Piszesz raz i
dziala ;-)

[*] PHP-owa "logika" jest taka: '0' (string) jest automagicznie
konwertowane na 0 (int) w momencie, kiedy przychodzi z zewnatrz. Przy
porównaniu dwóch zmiennych, druga jest automatycznie konwertowana na
typ pierwszej (czyli int). Konwersja nieporawnego napisu na int nie
daje zadnego excepion ValueError, tylko 0, wiec 0 == 0.
Daniel Mróz
2006-12-05 10:24:55 UTC
Permalink
Dnia 5 Dec 2006 01:40:03 -0800
Post by Bart Ogryczak
Post by Daniel Mróz
Kurcze, PHPiarze nawet własne świerszczyki mają z gołymi kodami na
rozkładówkach.
Widzisz, po prostu w Pythonie nie masz takie potrzeby. Piszesz raz i
dziala ;-)
Tak, ale taka pierdoła sprawia, że PHP jest bardziej widoczny i dzięki
temu częściej wybierany. Gdyby Pythonowi był poświęcony jakiś ciekawy i
ogólnodostępny papierowy periodyk, zainteresowanie tym językiem napewno
by wzrosło, gdyż przeciętny laik miałby szansę zapoznać się z nim na
podstawie przykładowych kodów szeroko omawianych w artykule. Teraz
nauka Pythona polega na grzebaniu w Internecie, zakupieniu książki
(często drogiej) i/lub narażaniu się na obrzucenie przez nas pomidorami
i gumowym kurczakiem po tym jak laik zada proste pytanie na grupie.
Nie schodźmy jednak jeszcze z chmur. Wyobraźmy sobie świat, w którym
Python jest promowany jako platforma dla aplikacji WWW, na stronie z
dokumentacją jest elegancka wyszukiwarka, która po wpisaniu nazwy
funkcji podaje jej opis wraz z przykładem wykorzystania, który idealnie
pasuje do Twoich zastosowań. W kioskach zalega tona czasopism
PythonArchitect, GVR zapobiega wybuchowi wojny Korea Pln. vs. Reszta
Świata, a użytkownicy Ruby zastanawiają się jakby to było w Świecie, w
którym język ten jest promowany jako platforma dla aplikacji WWW, na
stronie z dokumentacją jest elegancka wyszukiwarka, która po wpisaniu
nazwy funkcji podaje jej opis wraz z przykładem wykorzystania, który
idealnie pasuje do ich zastosowań, a w kioskach zalega tona czasopism
RubyArchitect. Ja tam nie widzę PHPowców.


Pozdrawiam
Beorn
--
Daniel 'Beorn' Mróz <***@alpha.pl> http://127.0.0.1/beorn
[GIT d s:- a-@ C++++ UL++++$ P+ L++++ E--- W+ N+++ o? K- w---]
[O- M- V! PS+ PE++ Y+ PGP++ t- 5 X R !tv b+ DI D++ G++ e h*]
[ r(-) y+ ]
Jaroslaw Zabiello
2006-12-05 10:57:03 UTC
Permalink
Gdyby Pythonowi był poświęcony jakiś ciekawy i ogólnodostępny papierowy
periodyk, zainteresowanie tym językiem napewno by wzrosło, gdyż
przeciętny laik miałby szansę zapoznać się z nim na podstawie
przykładowych kodów szeroko omawianych w artykule. Teraz nauka Pythona
polega na grzebaniu w Internecie, zakupieniu książki (często drogiej)
Niestety, to smutna prawda. Dokumentacja jak i cała promocja Pythona jest
kompletnie beznadziejna. Python ma szanse przegrać walkę o popularność z
Rubim, który jeszcze do niedawna był językiem prawie nikomu nie znanym.
--
Jarosław Zabiełło
http://blog.zabiello.com
William
2006-12-05 07:50:30 UTC
Permalink
Post by Daniel Mróz
Post by Bart Ogryczak
Nie szczególnie, a tylko i wylacznie. I to tez dosyc kiepsko. PHP jest
popularny, bo pozwala na osadzanie kodu bezposrednio w HTML.
Kolega chyba o mod_python do Apache zapomniał :)
Bluźnisz mój synu. Oczywiście jego grzechem jest to, że instalator instaluje
nam również moduł PSP a dokumentacja jawnie go opisuje kusząc co niektórych
pisaniem "jak w PHP", ale nie zmienia to podstawowego faktu - mod_python to
bardzo dobry projekt interfejsu do apache (mod_php nie ma 10% jego
funkcjonalności). PSP można sobie "użyć" tak samo w Django.
Robert
2006-12-06 08:47:03 UTC
Permalink
Post by Jaroslaw Zabiello
Post by grzesiek
Co takiego przemawia za Pythonem, czy on będize konkutencją dla PHP
Mnostwo rzeczy. Wymienie tylko niektore. Np. Python posiada znacznie
czytelniejsza i spojniejsza skladnie. Posiada takze pelna obiektowosc z
prawdziwymi przestrzeniami nazw (PHP ma jeden wspolny smietnik z
chaotycznie ponazywanymi funkcjami). Python posiada tez doskonala
implementacje Unicode i pozwala konwertowac prawie wszystko na wszystko
(np. zaden problem przekodowac znaki z cp1250 na polskiego dos'a czy latin2
i utf8). Python potrafi rozpoznawac polskie znaki w wyrazeniach regularnych
i operacjach na stringach. Np. mozna zrobic aby \w oznaczal nie tylko
dowolny znak ASCII ale takze uwzglednial polskie ogonki. PHP ma tylko
jakies glupie, niespojne funkcje do UTF8, ktore na dodatek sie wywalaja bo
korzystaja z rownie glupiego glupiego iconv'a. Znam ten bol, jak trzeba
bylo konwertowac teksty z cp1250 na latin2 i w tekscie wystepowaly znaki
dlugie myslnika i polskie (gorne i dolne) cudzyslowy. Poza tym Python
posiada obsluge wielowatkowosci i jest jezykiem ogolnego zastosowania a nie
jezykiem skryptowym do generowania kodu html. Starczy, czy chcesz wiecej?
:)
Co do obsługi encodingów, to święte słowa.

Co do obsługi wątków, to chyba jakiś żart.
Jaroslaw Zabiello
2006-12-06 08:55:41 UTC
Permalink
Post by Robert
Poza tym Python posiada obsluge wielowatkowosci i jest jezykiem ogolnego
zastosowania a nie jezykiem skryptowym do generowania kodu html.
Co do obsługi wątków, to chyba jakiś żart.
A może ich nie ma?
--
Jarosław Zabiełło
http://blog.zabiello.com
Jaroslaw Zabiello
2006-11-25 00:43:37 UTC
Permalink
Post by grzesiek
też to poczułem :-), że ja thinkink i c++ a nie python
Zauważyłem. Do tego strasznie piszesz w strasznie nieczytelny, zagmatwany
sposób.
Post by grzesiek
jaka jest różnica między nimi?
colection = sys.argv[1]
count_column = sys.argv[2]
ja rozumiem że oba są stringami
Tak
Post by grzesiek
jeżeli napiszę: ./gen.py abc 3
sys.argv[1] - jest string
sys.argv[2] - jest automatycznie int a nie jak w c char[]
Oba będą Stringiem, sprawdź:

import sys
for x in sys.argv:
print x, type(x)
Post by grzesiek
czyli string generate musi przed wypisaniem kolejnej kombinacji
zmienić jeden ze znaków, a tu: *niemodyfikowalne* :0
A co za problem aby zamiast

napis[0] = 'a'

napisać

napis = 'a' + napis[1:]

O slicing czytałeś?
Post by grzesiek
Post by Rob Wolfe
generate = list(collection[0] * len(collection))
niech będzie ale wtedy będe miał
generate ['a', 'a', 'a']
a nie
aaa
w konsoli
A co za problem dorzucić join?

generate = list(collection[0] * len(collection)).join('')
Post by grzesiek
A waszym zdaniem czy Python mógłby zastąpić mi C/C++ jeżeli nie
bieżemy pod uwagę wydajności i samego typu języka
(skryptowy-kompilowany). Oczywiście jak motywację takiego rozważania
przyjmują że w Pythonie ułatwił bym sobie pisanie (jak na ironie to
narazie sobie utrudniam:-))
Ano utrudniasz, bo usiłujesz podchodzić do Pythona jak do C i piszesz w zły
sposób kod, nadmiarowo, dookoła, nie wykorzystujesz tego, co oferuje ten
język. Ale to kwestia zrozumienia filozofii pisania w Pythonie. Znasz Zen
Pythona?

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
--
Jaroslaw Zabiello
http://blog.zabiello.com
grzesiek
2006-11-25 11:15:03 UTC
Permalink
Post by Jaroslaw Zabiello
A co za problem aby zamiast
napis[0] = 'a'
napisać
napis = 'a' + napis[1:]
bo w pętli moge napisać
napis[i] = x;
gdzie x to char
i mogę sobie zmienic (i muszę) dowolny znak z ciągu znaków na inny
dowolny znak znajdujący sie w x
a jak zechcę napisać:
napis[2] = "a"
to napisze
napis = napis[:1] + "a" + napis[3:]
tak?
ja dziękuje, jak prosto
Post by Jaroslaw Zabiello
A co za problem dorzucić join?
generate = list(collection[0] * len(collection)).join('')
import sys
import string

if __name__ == "__main__":
collection = sys.argv[1]
count_column = sys.argv[2]
count_colection = len(collection)

#generate = collection[0] * len(count_column)
generate = list(collection[0] * len(collection)).join('')

[***@localhost generator]$ ./gen.py abc 4
Traceback (most recent call last):
File "./gen.py", line 12, in ?
generate = list(collection[0] * len(collection)).join('')
AttributeError: 'list' object has no attribute 'join'

ups... :-)

Chyba narazie sobie dam spokuj z Pythonem. Może będe starał sie go
używać do pisania skryptów zamiast w bashu pisać. Tam może będzie
lepiej pasował do tego co trzeba zrobić. Bo z tego co popróbowałem
to Python wcale nie jest taki łatwy, przynajmniej w manipulacji
stringami.
Post by Jaroslaw Zabiello
napis = 'a' + napis[1:]
A to mi przypomina assemblera, z offsetem :-)
Jaroslaw Zabiello
2006-11-25 13:35:06 UTC
Permalink
Post by grzesiek
napis[2] = "a"
to napisze
napis = napis[:1] + "a" + napis[3:]
tak?
ja dziękuje, jak prosto
Generalnie wszelkie operacje na stringach są o niebo prostsze w Pythonie
niż w C (nie mówiąc o kompletnym braku problemu z przepełnieniem bufora).
Doskonała implementacja Unicode, wycinanie stringów, wyrażenia regularne, i
to wszystko uwzględniające polskie ogonki. Spróbuj to napisać w czystym C.
Czepiasz się przypisań, bo potrzebujesz robić to w miejscu. To jest już
taka cecha Pythona, że napisy są niemutowalne. Jak chcesz mieć mutowalne,
to przyjrzyj się językowi Ruby (http://www.ruby-lang.org/pl)
Post by grzesiek
generate = list(collection[0] * len(collection)).join('')
AttributeError: 'list' object has no attribute 'join'
Mój błąd. Miało być: ''.join(list(collection[0] * len(collection)))
Post by grzesiek
Bo z tego co popróbowałem to Python wcale nie jest taki łatwy,
przynajmniej w manipulacji stringami.
Jak ci tak koniecznie trzeba mutowalnych napisów, to przyjrzyj się Rubiemu.
Dla samego obiektu String masz 145 metod, wbudowane w składnię wyrażenia
regularne, zmiana w miejscu (to co ci tak brakowało) i sporo, sporo więcej.
--
Jaroslaw Zabiello
http://blog.zabiello.com
Marcin Mielżyński
2006-11-25 15:33:14 UTC
Permalink
Post by Jaroslaw Zabiello
Generalnie wszelkie operacje na stringach są o niebo prostsze w Pythonie
niż w C (nie mówiąc o kompletnym braku problemu z przepełnieniem bufora).
mowa jest o C++ a nie o C - to są dwa różne światy i w C++ wcale nie
jest tak źle:

string s="abc";
string s2="";
fill_n(back_inserter(s2),s.size(),s[0]);


stl + boost (regex, iostreams, string_algo) i C++ to całkiem wygodne
narzędzie do operowania łańcuchami

lopex
grzesiek
2006-11-25 17:09:29 UTC
Permalink
Post by Jaroslaw Zabiello
Post by grzesiek
napis[2] = "a"
to napisze
napis = napis[:1] + "a" + napis[3:]
tak?
ja dziękuje, jak prosto
Generalnie wszelkie operacje na stringach są o niebo prostsze w Pythonie
niż w C (nie mówiąc o kompletnym braku problemu z przepełnieniem bufora).
jak pewnie we wszystkich językach interpretowanych, zajmuję sie tym
interpreter, na ironie C :-)
Post by Jaroslaw Zabiello
Doskonała implementacja Unicode, wycinanie stringów, wyrażenia regularne, i
to wszystko uwzględniające polskie ogonki. Spróbuj to napisać w czystym C.
ja tam nie będę, ale ci co napisali Pythona tak zrobili
Post by Jaroslaw Zabiello
Czepiasz się przypisań, bo potrzebujesz robić to w miejscu. To jest już
taka cecha Pythona, że napisy są niemutowalne.
taka cecha?
powiedzmy sobie w prost, Python wcale nie jest taki wspaniały jak to
sie wypisuje na niektórych stronach www. Ma napewno mocne strony ale
myślę że nie jest taki idealny.
Post by Jaroslaw Zabiello
Jak chcesz mieć mutowalne,
to przyjrzyj się językowi Ruby (http://www.ruby-lang.org/pl)
Ja ten program już napisałem i chciałem go przepisać (tak jak
pisałem na samym początku) tylko aby zobaczyć jak go by sie pisało
w Pythonie. Nie szukam takiego języka, który by to potrafił zrobić,
chciałem sie tylko dowiedzieć czy w Pythonie da sie to "łatwiej"
napisać, a "zamiana" listy na stringi nie jest wcale zachęcające.
Nie rozumiem tej filozofii, że stringi są niemutowalne, w C/C++ mam
wybór - const, a tu?

Mimo wszystko chciał bym podziękować za poświęconą mi uwagę dla
tych osób, które mi starały sie pomóc a zwłaszcza dla Rob Wolfe
Janusz A. Urbanowicz
2006-11-25 18:10:52 UTC
Permalink
Post by grzesiek
Post by Jaroslaw Zabiello
Jak chcesz mieć mutowalne,
to przyjrzyj się językowi Ruby (http://www.ruby-lang.org/pl)
Ja ten program już napisałem i chciałem go przepisać (tak jak
pisałem na samym początku) tylko aby zobaczyć jak go by sie pisało
w Pythonie. Nie szukam takiego języka, który by to potrafił zrobić,
chciałem sie tylko dowiedzieć czy w Pythonie da sie to "łatwiej"
napisać, a "zamiana" listy na stringi nie jest wcale zachęcające.
Nie rozumiem tej filozofii, że stringi są niemutowalne, w C/C++ mam
wybór - const, a tu?
Chuja tam wybór. W tak naprawdę nie masz typów danych tylko wskaźniki
do obszarów pamięci, i ty musisz za kompilator wykonywać całą robotę
kontrolując typy danych.

W pythonie masz typy danych a nie słabo przylepione na wskaźnikach etykietki.
--
JID: ***@hell.pl
PGP: 0x46399138
od zwracania uwagi na detale są lekarze, adwokaci, programiści i zegarmistrze
-- Czerski
Jaroslaw Zabiello
2006-11-25 21:28:39 UTC
Permalink
Post by grzesiek
jak pewnie we wszystkich językach interpretowanych, zajmuję sie tym
interpreter, na ironie C :-)
Pudło. Pythona posiada wile implementacji. Jest Jython, czyli interpreter
Pythona napisany w czystej Javie. Jest IronPython napisany w (bodajże) C#.
Jest nawet interpreter Pythona napisany w Pythonie.
Post by grzesiek
Post by Jaroslaw Zabiello
Doskonała implementacja Unicode, wycinanie stringów, wyrażenia regularne, i
to wszystko uwzględniające polskie ogonki. Spróbuj to napisać w czystym C.
ja tam nie będę, ale ci co napisali Pythona tak zrobili
j.w. Poza tym po to są napisane biblioteki podstawowe, aby końcowy user nie
musiał się męczyć z C.
Post by grzesiek
Post by Jaroslaw Zabiello
Czepiasz się przypisań, bo potrzebujesz robić to w miejscu. To jest już
taka cecha Pythona, że napisy są niemutowalne.
taka cecha?
Ano taka. Tak jak wcięcia bloków, pełna obiektowość itd. Gdybyś wpierw
poczytał coś o Pythonie to byś potem mu nie stawiał zarzutów, że nie
zachowuje się jak C++.
Post by grzesiek
Python wcale nie jest taki wspaniały jak to sie wypisuje na niektórych
stronach www. Ma napewno mocne strony ale myślę że nie jest taki
idealny.
A ktoś tak mówi? Żaden język nie jest idealny.
Post by grzesiek
chciałem sie tylko dowiedzieć czy w Pythonie da sie to "łatwiej"
napisać,
Jak się piszę w Pythonie z manierą z C++ to wychodzą z tego potworki
składniowe.
Post by grzesiek
Nie rozumiem tej filozofii, że stringi są niemutowalne, w C/C++ mam
wybór - const, a tu?
W Pythonie stringi nie są listą. Ale można je zmienić jak ktoś chce:

x = 'X'
napis = list("Ala ma kota")
for i in range(len(napis)):
napis[i] = x
napis = ''.join(napis)
--
Jaroslaw Zabiello
http://blog.zabiello.com
Janusz A. Urbanowicz
2006-11-25 15:49:49 UTC
Permalink
Post by grzesiek
Post by Jaroslaw Zabiello
A co za problem aby zamiast
napis[0] = 'a'
napisać
napis = 'a' + napis[1:]
bo w pętli moge napisać
napis[i] = x;
gdzie x to char
i mogę sobie zmienic (i muszę) dowolny znak z ciągu znaków na inny
dowolny znak znajdujący sie w x
napis[2] = "a"
to napisze
napis = napis[:1] + "a" + napis[3:]
tak?
ja dziękuje, jak prosto
Stary, masz mózg kompletnie wypracny przez C. To że w C string=tablica
ti nie nasza wina, ale nie mieszajmy dwóch systemów walutowych. jak
chcesz sobie trzymać stringa w tablicy (liście) to se go trzymaj, i
odwołuj się do niego przez ''.join(lista), a nie taką masakrą.
--
JID: ***@hell.pl
PGP: 0x46399138
od zwracania uwagi na detale są lekarze, adwokaci, programiści i zegarmistrze
-- Czerski
grzesiek
2006-11-26 12:54:00 UTC
Permalink
Post by Janusz A. Urbanowicz
Post by grzesiek
bo w pętli moge napisać
napis[i] = x;
gdzie x to char
i mogę sobie zmienic (i muszę) dowolny znak z ciągu znaków na inny
dowolny znak znajdujący sie w x
napis[2] = "a"
to napisze
napis = napis[:1] + "a" + napis[3:]
tak?
ja dziękuje, jak prosto
Stary, masz mózg kompletnie wypracny przez C. To że w C string=tablica
ti nie nasza wina, ale nie mieszajmy dwóch systemów walutowych. jak
chcesz sobie trzymać stringa w tablicy (liście) to se go trzymaj, i
odwołuj się do niego przez ''.join(lista), a nie taką masakrą.
Loading Image...
Janusz A. Urbanowicz
2006-11-27 13:09:28 UTC
Permalink
Post by grzesiek
Post by Janusz A. Urbanowicz
Post by grzesiek
bo w pętli moge napisać
napis[i] = x;
gdzie x to char
i mogę sobie zmienic (i muszę) dowolny znak z ciągu znaków na inny
dowolny znak znajdujący sie w x
napis[2] = "a"
to napisze
napis = napis[:1] + "a" + napis[3:]
tak?
ja dziękuje, jak prosto
Stary, masz mózg kompletnie wypracny przez C. To że w C string=tablica
ti nie nasza wina, ale nie mieszajmy dwóch systemów walutowych. jak
chcesz sobie trzymać stringa w tablicy (liście) to se go trzymaj, i
odwołuj się do niego przez ''.join(lista), a nie taką masakrą.
http://www.pasteur.fr/formation/infobio/python/images/tab_collection.png
No i?

Bo coraz bardziej mam wrażenie, że ty tu nie na polowanie przyszedłeś.
--
JID: ***@hell.pl
PGP: 0x46399138
od zwracania uwagi na detale są lekarze, adwokaci, programiści i zegarmistrze
-- Czerski
Jaroslaw Zabiello
2006-11-28 17:03:27 UTC
Permalink
Post by grzesiek
napis[2] = "a"
Nie rozumiesz, że w Pythonie stringi są pełnymi obiektami, a nie typami
prymitywnymi. To, że napisy w Pythonie są niemutowalne wcale nie jest takim
zły pomysłem. Zobacz co się stanie w wypadku życia równie wysokopoziomego
języka, który zezwala na zmianę stringa tak jak listy:

x = y = "Test"
x[0] = "F"
puts x # => Fest
puts y # => Fest... też uległo zmianie!

zmienne w Pythonie czy (jak w powyższym przykładzie) w Ruby są tylko
referencjami do obiektu.
--
Jaroslaw Zabiello
http://blog.zabiello.com
grzesiek
2006-11-28 23:08:16 UTC
Permalink
Post by Jaroslaw Zabiello
Post by grzesiek
napis[2] = "a"
Nie rozumiesz, że w Pythonie stringi są pełnymi obiektami, a nie typami
prymitywnymi.
to już wcześniej zrozumiałem, bo mają metody - dir("abc")
Post by Jaroslaw Zabiello
referencjami do obiektu.
x = y = "Test"
x[0] = "F"
puts x # => Fest
puts y # => Fest... też uległo zmianie!
aha, to teraz wiem dlaczego są niemutowalne
a tyle to razy było wałkowane w książkach do C++ i Javy :-) i gdzie
tam tylko są referencje, no i wskaźniki nasze kochane
Post by Jaroslaw Zabiello
To, że napisy w Pythonie są niemutowalne wcale nie jest takim
zły pomysłem.
teraz to zmienia postać rzeczy - chyba w takiej sytuacji muszą być
niemutowalne, jeżeli Python nie chce przypominać wyżej wymienionych
języków

dzieki za przykład
pozdrawiam

Dive Into Python - "everything in Python is an object"
Rob Wolfe
2006-11-25 20:17:09 UTC
Permalink
Post by grzesiek
Post by Rob Wolfe
generate = collection[0] * len(collection)
generate = "".join([collection[0] for c in collection])
?
nie rozumiemy się, generate ma być długości count_column a nie
collection
No to:
generate = collection[0] * len(count_column)
Post by grzesiek
jaka jest różnica między nimi?
colection = sys.argv[1]
count_column = sys.argv[2]
ja rozumiem że oba są stringami więc używam int w while, a jak nie
Powinieneś to użyć wcześniej przed while'em, a nie marnować
czas procesora w każdym obiegu pętli:

count_column = int(sys.argv[2])
Post by grzesiek
generate = colection[0] * len(count_column)
i dziłą
teraz mam pytanie? jeżeli napiszę: ./gen.py abc 3
sys.argv[1] - jest string
sys.argv[2] - jest automatycznie int a nie jak w c char[]
Parametry są zawsze stringami.
Post by grzesiek
Post by Rob Wolfe
Post by grzesiek
save_col_pos = []
x = 0
Po kiego grzyba tu używasz funkcji `int`?
Post by grzesiek
save_col_pos.append(0)
x += 1
...
save_col_pos = [0] * count_column
File "./gen.py", line 17, in ?
save_col_pos = [0] * count_column
TypeError: can't multiply sequence by non-int
Bo trzeba było skonwertować do inta na samym początku
skryptu.
Post by grzesiek
Teraz chciał by sie tylko zapytać czy ten program, który chcę
przepisać nie jest przypadkiem jednym z tych, w których to python nie
sprawdza sie najlepiej, nie chodzi o szybkość tylko same zakodowanie
tego.
Oczywiście nie jest.
Post by grzesiek
"Wybacz, ale jeśli lubisz taki styl programowania, to Python
jest zdecydowanie nie dla Ciebie."
zrezygnować?
To miała być uszczypliwa uwaga na temat stylu, a nie zastosowania
samego języka.
Post by grzesiek
Może najlepszym językiem dla mnie jest rzeczywiście ten, który znam
najlepiej niż ten, który ma zawalistą skłądnie, np. bez klamr {}.
A waszym zdaniem czy Python mógłby zastąpić mi C/C++ jeżeli nie
bieżemy pod uwagę wydajności i samego typu języka
Nie przedłużając już tej dyskusji, bo widzę, że zdanie na temat
Pythona masz już doskonale wyrobione.
Przepisałem ten Twój programik do Pythona i sam sobie
oceń co jest bardziej przejrzyste i łatwiejsze w napisaniu.

<code>
#!/usr/bin/env python
#-*- coding: iso-8859-2 -*-

__doc__ = """%(PROG_NAME)s [kolekcja] [dlugosc klucza]
Generuje klucz o zadanej długości ze zdefiniowanej kolekcji.
np. %(PROG_NAME)s abc 3
%(PROG_NAME)s [kolekcja]
Generuje klucz o długości zdefiniowanej kolekcji.
np. %(PROG_NAME)s abc
%(PROG_NAME)s -t [kolekcja] [dlugosc klucza]
Przeprowadza test - ile wyników dałoby dane polecenie.
np. %(PROG_NAME)s -t abc 2
Inne przykłady:\n
%(PROG_NAME)s -t 10 8
%(PROG_NAME)s 10 8 > plik.txt
%(PROG_NAME)s \"12 3\"
"""

import sys, os, time

def usage():
print __doc__ % dict(PROG_NAME=os.path.basename(sys.argv[0]))
sys.exit(1)

def info(d):
print """Kolekcja: \t %(COLLECTION)s
Generowane: \t %(GENERATE)s
Dlugosc klucza: \t %(COUNT_COLUMN)d
Dlugosc probek: \t %(COUNT_COLLECTION)d
Ilosc kombinacji: \t %(COUNT_COMBINATION)d
ok. bajtow: \t %(BYTES)d
""" % d

def czas(start, end):
print """\nCzasz generowania:
%.2f sekund,
%.2f minut
""" % (end - start, (end - start) / 60)

def parse_arg():
import getopt
try:
opts, args = getopt.getopt(sys.argv[1:], "ht")
except getopt.GetoptError:
usage()
if len(args) == 0:
usage()
test = False
for o, a in opts:
if o == "-t":
test = True
if o == "-h":
usage()
if test:
print "TEST"
collection = args[0]
count_column = 0

if len(args) == 1:
count_column = len(collection)
elif len(args) == 2:
try:
count_column = int(args[1])
except ValueError:
pass
if count_column == 0:
print "Zerowa długość klucza."
sys.exit(2)
return test, collection, count_column, len(collection)

def wariacje(collection, n):
if n==0: yield []
else:
for i in xrange(len(collection)):
for s in wariacje(collection, n-1):
yield [collection[i]] + s

def main():
(test, collection, count_column, count_collection) = parse_arg()
generate = count_column * collection[0]
count_combination = 1
for i in range(count_column): count_combination *= count_collection
info(dict(COLLECTION=collection, GENERATE=generate, COUNT_COLUMN=count_column,
COUNT_COLLECTION=count_collection, COUNT_COMBINATION=count_combination,
BYTES=count_combination * count_column + 300))
if test: sys.exit(0)
start = time.clock()
for p in wariacje(list(collection), count_column): print "".join(p)
end = time.clock()
czas(start, end)

if __name__ == "__main__":
main()
</code>
--
pozdrawiam
Rob
Rob Wolfe
2006-11-25 20:21:50 UTC
Permalink
Post by grzesiek
generate = collection[0] * len(count_column)
Oczywiście miało być:
generate = collection[0] * count_column
--
pozdrawiam
Rob
grzesiek
2006-11-25 20:58:38 UTC
Permalink
DZIĘKUJE BARDZO
Jestem bardzo zadziwiony że sie fatygowałaś, tym bardziej szkoda
twojej pracy że umnie wyskakuje:
[***@localhost generator]$ ./gen.py
./gen.py: line 4: __doc__: command not found

ja oczywiście nie wiem jak to naprawić a szkoda twojego pisania,
żeby teraz nie dziłało :-)

A co do zdania o Pythonie to nie, nie mam jeszcze wyrobionego, jestem w
trakcie.
Właśnie "biegam" po examplach toturilach i e-bookach i czytam,
zaczyna go oczywiście coraz bardziej rozumieć.
Są rzeczy, które mnie zadziwiają w Pythonie, pozytywnie i negatywnie
też.
Paweł Lewicki
2006-11-25 21:47:27 UTC
Permalink
Post by grzesiek
DZIĘKUJE BARDZO
Jestem bardzo zadziwiony że sie fatygowałaś, tym bardziej szkoda
./gen.py: line 4: __doc__: command not found
ja oczywiście nie wiem jak to naprawić a szkoda twojego pisania,
żeby teraz nie dziłało :-)
A co do zdania o Pythonie to nie, nie mam jeszcze wyrobionego, jestem w
trakcie.
Właśnie "biegam" po examplach toturilach i e-bookach i czytam,
zaczyna go oczywiście coraz bardziej rozumieć.
Są rzeczy, które mnie zadziwiają w Pythonie, pozytywnie i negatywnie
też.
Jak cię coś zadziwia negatywnie to sie podziel, a nie troluj. :)
Ktoś może wyprowadzić z błędu.

Paweł
Rob Wolfe
2006-11-26 13:37:35 UTC
Permalink
Post by grzesiek
DZIĘKUJE BARDZO
Jestem bardzo zadziwiony że sie fatygowałaś, tym bardziej szkoda
Żadna fatyga. 15 minut roboty. To jest właśnie Python.
Post by grzesiek
./gen.py: line 4: __doc__: command not found
A umiesz w ogóle uruchamiać skrypty pod Linuksem?
Znasz takie pojęcie jak shebang?
http://en.wikipedia.org/wiki/Shebang_(Unix)
Jak nie znasz, to spróbuj tak:
python gen.py
Post by grzesiek
ja oczywiście nie wiem jak to naprawić a szkoda twojego pisania,
żeby teraz nie dziłało :-)
A co do zdania o Pythonie to nie, nie mam jeszcze wyrobionego, jestem w
trakcie.
Właśnie "biegam" po examplach toturilach i e-bookach i czytam,
zaczyna go oczywiście coraz bardziej rozumieć.
Są rzeczy, które mnie zadziwiają w Pythonie, pozytywnie i negatywnie
też.
Mnie też, ale do pierwszych wniosków doszedłem
dopiero po dogłębnym przestudiowaniu tutoriala i dokumentacji.
--
pozdrawiam
Rob
grzesiek
2006-11-26 14:57:50 UTC
Permalink
Super, działa wielkie dzieki.
Porównałem czasy dla gen 10 16
gen.py: 8.33 s
gen: 10 s
Czyżby python był tak szybki jak C++ (tu widzimy szybszy)? czy Twój
algorytm jest szybszy?
Tak czy siek widać, że Python w odpowiednich rękach jest szybszy,
niż C++ w moich :-).
Zauważyłem również że Python ma na tego typu "okazje" specjalne
polecenie - yield.

No no no, i wszystko jasne - dałeś mi do myślenia.
Robert
2006-11-27 11:36:10 UTC
Permalink
Post by grzesiek
Czyżby python był tak szybki jak C++ (tu widzimy szybszy)? czy Twój
algorytm jest szybszy?
Każdy język jest szybszy od każdego innego. Chociaż niektórzy
tutaj (nie będę palcem pokazywał) twierdzą, że mimo tego Ruby jest
od wszystkich szybszy.
grzesiek
2006-11-27 14:22:51 UTC
Permalink
Post by Robert
Post by grzesiek
Czyżby python był tak szybki jak C++ (tu widzimy szybszy)? czy Twój
algorytm jest szybszy?
Każdy język jest szybszy od każdego innego. Chociaż niektórzy
aha, rozumiem: Python jest szybszy od C++ a C++ od Pythona
a jak zapytam, który jest najszybszy to powiesz że każdy inny? :)
Jaroslaw Zabiello
2006-11-27 14:30:26 UTC
Permalink
Post by grzesiek
aha, rozumiem: Python jest szybszy od C++ a C++ od Pythona
a jak zapytam, który jest najszybszy to powiesz że każdy inny? :)
Wszystko zależy od tego co chcesz zrobić. Czasem, jak widząc Python może
być szybszy. Czasem od C++ szybsza jest Java. Tak swoją drogą widziałem C++
bywa mocno krytykowany przez zwolenników... C. Zdaje się Guido nawet nie
chce słyszeć aby CPythona przepisać do C++.
--
Jarosław Zabiełło
http://blog.zabiello.com
grzesiek
2006-11-27 15:08:18 UTC
Permalink
Post by Jaroslaw Zabiello
Wszystko zależy od tego co chcesz zrobić. Czasem, jak widząc Python może
być szybszy. Czasem od C++ szybsza jest Java. Tak swoją drogą widziałem C++
bywa mocno krytykowany przez zwolenników... C. Zdaje się Guido nawet nie
chce słyszeć aby CPythona przepisać do C++.
Tak, moim skromnym zdaniem :-), dziś szybkośc języka to cecha coraz
mniej ważna.
Dla C przypadła rola pisania systemów i innych, wymagających jego
właściwości programów.
A cała reszta a zwłaszcza nowszych języków dąży do tego aby było
jak najłatwiej i szybciej.
Obecnie najnowsze języki to "interpretery" lub podobne, czy sie myle?
A garbage collector to już standart chyba.

A odnośnie Pythona - zaczełem pisac GUI (PyGTK) dla generatora i
jest o nieporównanie szybciej, łatwiej, nie ma zbędnych
szczegółów, szkoda tylko że nie można kodu ukryc - chyba że sie
da?
Tomasz Kramza
2006-11-27 15:27:03 UTC
Permalink
Post by grzesiek
A odnośnie Pythona - zaczełem pisac GUI (PyGTK) dla generatora i
jest o nieporównanie szybciej, łatwiej, nie ma zbędnych
szczegółów, szkoda tylko że nie można kodu ukryc - chyba że sie
da?
Tego napisanego w C++ i skompilowanego też się nie da (choć jest minimalnie
trudniej rozszyfrować intencje autora) ukryć. Jeśli chce sie chronić kod to
IMHO powinno się to zostawić licencji, a jeśli mowa o kodzie, który
powinien być ukryty, ponieważ jego znajomość mogłaby pozwolić coś obejść to
metoda "Security through obscurity" jest raczej chybionym pomysłem.
--
Tomasz Kramza
GG: 1667758, Jabber ID: ***@chrome.pl
WWW: http://tomashk.jogger.pl/ , GnuPG ID: 0x2969987F
Rob Wolfe
2006-11-27 15:32:03 UTC
Permalink
Post by grzesiek
A odnośnie Pythona - zaczełem pisac GUI (PyGTK) dla generatora i
jest o nieporównanie szybciej, łatwiej, nie ma zbędnych
szczegółów, szkoda tylko że nie można kodu ukryc - chyba że sie
da?
Jeśli masz na myśli dostarczenie softu na zewnątrz,
to możesz przesłać tylko skompilowane pliki "pyc".
(analogicznie do javow'ych "class", czy windzianych "exe")
--
pozdrawiam
Rob
Amadeusz Jasak
2006-11-27 15:43:36 UTC
Permalink
Post by Rob Wolfe
Post by grzesiek
A odnośnie Pythona - zaczełem pisac GUI (PyGTK) dla generatora i
jest o nieporównanie szybciej, łatwiej, nie ma zbędnych
szczegółów, szkoda tylko że nie można kodu ukryc - chyba że sie
da?
Jeśli masz na myśli dostarczenie softu na zewnątrz,
to możesz przesłać tylko skompilowane pliki "pyc".
(analogicznie do javow'ych "class", czy windzianych "exe")
Ale to się da zdekompilować (analogicznie do javow'ych "class" np.
cavaj, a exe to np. ida)
--
Pozdrawiam
Amadeusz Jasak vel alfanick
Rob Wolfe
2006-11-27 20:42:36 UTC
Permalink
Post by Amadeusz Jasak
Post by Rob Wolfe
Post by grzesiek
A odnośnie Pythona - zaczełem pisac GUI (PyGTK) dla generatora i
jest o nieporównanie szybciej, łatwiej, nie ma zbędnych
szczegółów, szkoda tylko że nie można kodu ukryc - chyba że sie
da?
Jeśli masz na myśli dostarczenie softu na zewnątrz,
to możesz przesłać tylko skompilowane pliki "pyc".
(analogicznie do javow'ych "class", czy windzianych "exe")
Ale to się da zdekompilować (analogicznie do javow'ych "class" np.
cavaj, a exe to np. ida)
A kto powiedział, że się nie da?
Pytanie było o _ukrycie_ kodu, a nie zapewnienie jego niejawności
po wsze czasy. Tego się oczywiście nijak nie da zrobić.
A nie jedni próbowali. :)
--
pozdrawiam
Rob
grzesiek
2006-11-27 21:50:33 UTC
Permalink
Post by Rob Wolfe
Post by Amadeusz Jasak
Post by Rob Wolfe
Post by grzesiek
A odnośnie Pythona - zaczełem pisac GUI (PyGTK) dla generatora i
jest o nieporównanie szybciej, łatwiej, nie ma zbędnych
szczegółów, szkoda tylko że nie można kodu ukryc - chyba że sie
da?
Jeśli masz na myśli dostarczenie softu na zewnątrz,
to możesz przesłać tylko skompilowane pliki "pyc".
(analogicznie do javow'ych "class", czy windzianych "exe")
Ale to się da zdekompilować (analogicznie do javow'ych "class" np.
cavaj, a exe to np. ida)
A kto powiedział, że się nie da?
Pytanie było o _ukrycie_ kodu, a nie zapewnienie jego niejawności
po wsze czasy. Tego się oczywiście nijak nie da zrobić.
A nie jedni próbowali. :)
Myślę, że jeżeli ktoś nie umie pisać w Pythonie to i nie będzie
próbował dekompilować, bo i po co :-)
A mi wystarczy żeby to nie było tak jak z HTML i JavaScript.
Wiem że można i to ukryć :-).

Chodziło mi o coś na wzór PHP, jest ale go nie widać
William
2006-11-28 07:37:08 UTC
Permalink
Post by Rob Wolfe
A kto powiedział, że się nie da?
Pytanie było o _ukrycie_ kodu, a nie zapewnienie jego niejawności
po wsze czasy. Tego się oczywiście nijak nie da zrobić.
A nie jedni próbowali. :)
Podam ci co najmniej trzy spawdzone implementacje:

1) WebServices
2) Maszyny z systemem wgrywanym do pamięci RAM i czujnikami zdjęcia obudowy
3) Karty chipowe, mikroprocesory jednoukładowe z wewnąrtzną pamięcią
programu

Każda z tych technik zapewnia ochronę kodu w akceptowalnym stopniu, tzn.
koszt jego wykradzenia jest zazwyczaj wyższy niż wartosc kodu
Rob Wolfe
2006-11-28 07:52:04 UTC
Permalink
Post by William
Post by Rob Wolfe
A kto powiedział, że się nie da?
Pytanie było o _ukrycie_ kodu, a nie zapewnienie jego niejawności
po wsze czasy. Tego się oczywiście nijak nie da zrobić.
A nie jedni próbowali. :)
1) WebServices
2) Maszyny z systemem wgrywanym do pamięci RAM i czujnikami zdjęcia obudowy
Super, ale miałem na myśli sytuację, w której wysyłasz klientowi
soft w takiej czy innej postaci. Gdy nie ma fizycznego dostępu
do plików, to nie da się ich zdekompilować i tylko wtedy.
Post by William
3) Karty chipowe, mikroprocesory jednoukładowe z wewnąrtzną pamięcią
programu
Widywałem już cracki do takich zabezpieczeń.
Post by William
Każda z tych technik zapewnia ochronę kodu w akceptowalnym stopniu, tzn.
koszt jego wykradzenia jest zazwyczaj wyższy niż wartosc kodu
Dwie pierwsze są super, ale nie zawsze można je wykorzystać.
--
pozdrawiam
Rob
Bart Ogryczak
2006-11-27 16:09:27 UTC
Permalink
Post by grzesiek
A odnośnie Pythona - zaczełem pisac GUI (PyGTK) dla generatora i
jest o nieporównanie szybciej, łatwiej, nie ma zbędnych
szczegółów, szkoda tylko że nie można kodu ukryc - chyba że sie
da?
Freeze (i jego alternatywy). Oczywiscie da sie to zdekompilowac, ale
czytelne to nie bedzie.
Robert
2006-11-27 18:40:07 UTC
Permalink
Post by grzesiek
Post by Jaroslaw Zabiello
Wszystko zależy od tego co chcesz zrobić. Czasem, jak widząc Python może
być szybszy. Czasem od C++ szybsza jest Java. Tak swoją drogą widziałem C++
bywa mocno krytykowany przez zwolenników... C. Zdaje się Guido nawet nie
chce słyszeć aby CPythona przepisać do C++.
Tak, moim skromnym zdaniem :-), dziś szybkośc języka to cecha coraz
mniej ważna.
Naiwny.
Post by grzesiek
Dla C przypadła rola pisania systemów i innych, wymagających jego
właściwości programów.
A cała reszta a zwłaszcza nowszych języków dąży do tego aby było
jak najłatwiej i szybciej.
Obecnie najnowsze języki to "interpretery" lub podobne, czy sie myle?
Nie do końca, Haskell np. (i jego pomioty) jest (może być)
kompilowany.
Post by grzesiek
A garbage collector to już standart chyba.
Standard.
Post by grzesiek
A odnośnie Pythona - zaczełem pisac GUI (PyGTK) dla generatora i
jest o nieporównanie szybciej, łatwiej, nie ma zbędnych
szczegółów, szkoda tylko że nie można kodu ukryc - chyba że sie
da?
Nie za bardzo (zawsze musisz chociaż .pyc umieścić), ale da się
zobfuskować.
Piotr Dembiński
2006-11-27 20:29:02 UTC
Permalink
"Robert" <***@mat.uni.torun.pl> writes:

[...]
Post by Robert
Nie za bardzo (zawsze musisz chociaż .pyc umieścić), ale da się
zobfuskować.
Oj da się.
grzesiek
2006-11-27 20:35:07 UTC
Permalink
Post by Robert
Post by grzesiek
Tak, moim skromnym zdaniem :-), dziś szybkośc języka to cecha coraz
mniej ważna.
Naiwny.
etam, mówiłem ogólnie, a nie tam że np. GTK+ mogło by być równie
dobrze napisane w Pythonie i nikt by różnicy nie zauważył

Wiem że dla takich kwestii czasami nawet C jest niewystarczająco
dobry. Nie raz miałem okazje widzieć jak jakiś program (w C i GTK+)
był tak napisany że mogłem sobie herbatę zaparzyć zanim sie
zamknie, bo to( Close ) od razu zrobiłem gdy tylko spostrzegłem że
zanim wczyta całą listę to minie parę minut.
Ale to nie zmienia faktu, że (tak na Bolka oko) ok. 80% programów z
GUI mogło by być napisanych w nakładce np. PyGTK i nikt by różnicy
nie zauważył.
A może nadal sie mylę ?
Grzegorz Makarewicz
2006-11-28 08:27:16 UTC
Permalink
Post by grzesiek
Ale to nie zmienia faktu, że (tak na Bolka oko) ok. 80% programów z
GUI mogło by być napisanych w nakładce np. PyGTK i nikt by różnicy
nie zauważył.
A może nadal sie mylę ?
Moi klienci nie widza roznicy - python + wxPython.

mak
Robert
2006-11-28 09:01:45 UTC
Permalink
Post by grzesiek
Post by Robert
Post by grzesiek
Tak, moim skromnym zdaniem :-), dziś szybkośc języka to cecha coraz
mniej ważna.
Naiwny.
etam, mówiłem ogólnie, a nie tam że np. GTK+ mogło by być równie
dobrze napisane w Pythonie i nikt by różnicy nie zauważył
Wiem że dla takich kwestii czasami nawet C jest niewystarczająco
dobry. Nie raz miałem okazje widzieć jak jakiś program (w C i GTK+)
był tak napisany że mogłem sobie herbatę zaparzyć zanim sie
zamknie, bo to( Close ) od razu zrobiłem gdy tylko spostrzegłem że
zanim wczyta całą listę to minie parę minut.
Ale to nie zmienia faktu, że (tak na Bolka oko) ok. 80% programów z
GUI mogło by być napisanych w nakładce np. PyGTK i nikt by różnicy
nie zauważył.
A może nadal sie mylę ?
To prawda, ale zauważ, że zgodnie z zasadą Pareto (80:20 - doskonale
pasuje do Twojego szacunku 80%), to, co ciekawe, nowatorskie i
potencjalnie bardzo dochodowe, nie jest z reguły w tych 80, ale w
pozostałych 20% problemów nieszablonowych, w których wydajność
może (ale nie musi) być kluczowa.
Piotr Dembiński
2006-11-29 15:49:28 UTC
Permalink
"grzesiek" <***@interia.pl> writes:

[...]
Post by grzesiek
Ale to nie zmienia faktu, że (tak na Bolka oko) ok. 80% programów
z GUI mogło by być napisanych w nakładce np. PyGTK i nikt by różnicy
nie zauważył.
W gruncie rzeczy masz rację.
Robert
2006-11-27 18:38:20 UTC
Permalink
Post by grzesiek
Post by Robert
Post by grzesiek
Czyżby python był tak szybki jak C++ (tu widzimy szybszy)? czy Twój
algorytm jest szybszy?
Każdy język jest szybszy od każdego innego. Chociaż niektórzy
aha, rozumiem: Python jest szybszy od C++ a C++ od Pythona
a jak zapytam, który jest najszybszy to powiesz że każdy inny? :)
Zależy kto pisze. Aczkolwiek przy nieograniczonym czasie
(asymptotycznie) można powiedzieć, że (chyba dla prawie każdego
problemu) najbardziej zoptymalizowany kod w C/C++ będzie zawsze
szybszy (najczęściej dużo szybszy) od najbardziej zoptymalizowanego
w Pythonie.

Chciałem po prostu naświetlić ideę, że "wydajność języków" nie
jest relacją totalną, o ile w ogóle można ją zdefiniować.
Rob Wolfe
2006-11-24 20:33:34 UTC
Permalink
Post by grzesiek
W wyniku mojego zainteresowania Ptyhonem postanowiłem sprawdzić jak
sie ma te cudowne programowanie w Pythonie do rzeczywistości.
Postanowiłe wię przepisać jeden z moich programów na pythona.
Program napisany był w C++.
Rany boskie, co za chaos.
Jeśli na przyszlość chcesz uzyskać jakąś sensowną pomoc,
to prezentuj jakiś *spójny*, *w pełni działający* kod.
Post by grzesiek
...
string colection("");
colection = argv[test?2:1];
Co to jest `test`?
No dobra w `collection` mamy jakiś string. Lećmy dalej.
Post by grzesiek
unsigned int count_column = argv[test?3:2] == NULL ?colection.size()
:atoi(argv[test?3:2]);
Wybacz, ale jeśli lubisz taki styl programowania, to Python
jest zdecydowanie nie dla Ciebie.
Post by grzesiek
unsigned int count_colection = colection.size();
Zgaduję, że w count_column jest liczba znaków w stringu `collection`.
Post by grzesiek
string generate(count_column, colection[0]); // tu jest problem
Co to jest `generate`?
Znowu zgaduję, że ta funkcja ma utworzyć string o długości stringu
`collection` zawierający tylko pierwszy znak z `collection`.
Post by grzesiek
...
...
colection = sys.argv[1]
count_column = sys.argv[2]
count_colection = len(colection)
generate = ? // jak to napisać
Tutaj z kolei `generate` to już nie jest funkcja, ale zmienna.
Rany boskie, litości!
Zgaduję, że o to Ci chodzi:

generate = list(collection[0] * len(collection))

O tym dlaczego tu użyłem funkcji list patrz niżej.
Post by grzesiek
...
Dodam że nie znam Pythona, dopiero sie nim interesuje. Poza tym będę
generate[col] = colection[save_col_pos[col]];
Co to jest `save_col_pos`?
Teraz wyjaśnienie dlaczego użyłem funkcji list powyżej.
Stringi w Pythonie są obiektami, które raz utworzone
nie mogą zostać zmienione. [1] [2]

<code>
Post by grzesiek
s = "abc"
s[0] = "x"
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: object does not support item assignment
Post by grzesiek
l = list(s)
l
['a', 'b', 'c']
Post by grzesiek
l[0] = "x"
l
['x', 'b', 'c']
</code>
Post by grzesiek
# python
generate = "abc"
# chcę zmienić wszystkie znaki n apierwszy
generate[1] = generate[0]
generate[2] = generate[0]
<code>
Post by grzesiek
l = list("abc")
l
['a', 'b', 'c']
Post by grzesiek
l = [l[0] for i in l]
l
['a', 'a', 'a']
</code>
Post by grzesiek
W dokumentacji jest wiele metod dla obiektów string ale tam pisze że
większość z nich nie będzie dostępna w wersji 3 Pythona, więc
korzystanie z nich odpada.
Mowa jest o funkcjach w module string, a nie o metodach obiektu string.


[1] http://docs.python.org/ref/types.html
[2] http://docs.python.org/tut/node5.html
--
pozdrawiam
Rob
Rob Wolfe
2006-11-24 21:30:24 UTC
Permalink
Post by grzesiek
W wyniku mojego zainteresowania Ptyhonem postanowiłem sprawdzić jak
sie ma te cudowne programowanie w Pythonie do rzeczywistości.
Postanowiłe wię przepisać jeden z moich programów na pythona.
Program napisany był w C++.
Jeśli na przyszłość chcesz uzyskać jakąś sensowną pomoc,
to prezentuj jakiś *spójny*, *działający* kod.
Post by grzesiek
...
string colection("");
colection = argv[test?2:1];
Co to jest `test`?
No dobra w `collection` mamy jakiś string. Lećmy dalej.
Post by grzesiek
unsigned int count_column = argv[test?3:2] == NULL ?colection.size()
:atoi(argv[test?3:2]);
Wybacz, ale jeśli lubisz taki styl programowania, to Python
jest zdecydowanie nie dla Ciebie. Sugerowałbym PERL-a.
Post by grzesiek
unsigned int count_colection = colection.size();
string generate(count_column, colection[0]); // tu jest problem
...
...
colection = sys.argv[1]
count_column = sys.argv[2]
count_colection = len(colection)
generate = ? // jak to napisać
Prawdopodobnie o to Ci chodzi:

generate = list(collection[0] * len(collection))

O tym dlaczego tu użyłem funkcji list patrz niżej.
Post by grzesiek
...
Dodam że nie znam Pythona, dopiero sie nim interesuje. Poza tym będę
generate[col] = colection[save_col_pos[col]];
Co to jest `save_col_pos`?
Teraz wyjaśnienie dlaczego użyłem funkcji list powyżej.
Stringi w Pythonie są obiektami, które raz utworzone
nie mogą zostać zmienione. [1] [2]

<code>
Post by grzesiek
s = "abc"
s[0] = "x"
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: object does not support item assignment
Post by grzesiek
l = list(s)
l
['a', 'b', 'c']
Post by grzesiek
l[0] = "x"
l
['x', 'b', 'c']
</code>
Post by grzesiek
# python
generate = "abc"
# chcę zmienić wszystkie znaki n apierwszy
generate[1] = generate[0]
generate[2] = generate[0]
<code>
Post by grzesiek
l = list("abc")
l
['a', 'b', 'c']
Post by grzesiek
l = [l[0] for i in l]
l
['a', 'a', 'a']
</code>
Post by grzesiek
W dokumentacji jest wiele metod dla obiektów string ale tam pisze że
większość z nich nie będzie dostępna w wersji 3 Pythona, więc
korzystanie z nich odpada.
Mowa jest o funkcjach w module string, a nie o metodach obiektu string.

[1] http://docs.python.org/ref/types.html
[2] http://docs.python.org/tut/node5.html
--
pozdrawiam
Rob
Wojciech Muła
2006-11-27 15:37:52 UTC
Permalink
Post by grzesiek
W dokumentacji jest wiele metod dla obiektów string ale tam pisze że
większość z nich nie będzie dostępna w wersji 3 Pythona, więc
korzystanie z nich odpada.
Nie wiadomo kiedy pojawi się Python 3, nie wiadomo jak będzie
ostatecznie wyglądał, więc teraz nie warto się specjalnie
przejmować mglistymi przepowiedniami.

w.
--
Tępi głupcy są własnymi nieprzyjaciółmi, gdy dopuszczają
się złych uczynków, których owoce są gorzkie.
Loading...