Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

cz. 9 | Siła konsoli w systemach Uniksowych

Witam.

Ostatnio sobie przypomniałem o tej najstarszej serii wpisów i postanowiłem ją zreaktywować i oto efekt.

W tej części opiszę Pythona, czyli scyzoryk do wszystkiego, w dodatku posiadającego coś w rodzaju własnego shella.

Python jako interaktywna konsola

Python to bardzo bogaty język skryptowy*, praktycznie większość ważniejszych aplikacji Uniksowych posiada API w Pythonie, słynie także z estetyki przez obowiązkowe wcięcia w kodzie czy z wbudowanego "shella".

Przy pomocy konsoli Pythona można przykładowo bardzo szybko policzyć jak długie mamy hasło, zahashować ciąg znaków, sterować odtwarzaczem muzycznym przez zaimportowanie bibilioteki z jego API i wykorzystywanie funkcji z tej biblioteki, dzielić ciągi znaków czy łączyć w jedność - i wiele różnych czynności w bardzo prosty sposób.

Python jest także dostępny dla Windows, jednak nie jest tak bardzo rozbudowany przez biblioteki jak w systemach Uniksowych.

Jednak proste operacje na ciągach znaków można na pewno w nim wykonać, a także być może niektóre skomplikowane przy pomocy WMI - ale i to niestety nie daje jeszcze takich możliwości jak API w Uniksach, szkoda.

* choć po części można go też nazwać kompilowanym bo po pierwszym uruchomieniu tworzy się plik .pyc - binarny można powiedzieć 

Komentarze

0 nowych
Vifon   5 #1 21.04.2011 13:35

Mnie Python odrzuca swoją "nietypową" obsługą wyrażeń arytmetycznych. Np. 20-10.99 daje ciekawy wynik. Ja rozumiem, że używanie liczb zmiennoprzecinkowych wiąże się z pewną niedokładnością, ale nawet goły C wywala poprawną wartość!

webnull   9 #2 21.04.2011 13:38

@Vifon
">>> 20-10.99
9.01"

W czym problem?

Vifon   5 #3 21.04.2011 14:08

@webnull
Teraz sprawdziłem w Pythonie 3 i faktycznie poprawili, ale wciąż dominuje Python 2. W Pythonie 2.6 to wygląda tak:
">>> 20-10.99
9.0099999999999998"
Nawet jeśli poprawili, to pewien niesmak pozostał.

webnull   9 #4 21.04.2011 14:35

@Vifon
Ja używam Pythona 2.7

przemek1234   7 #5 21.04.2011 15:04

W systemach Windows fajnym shellem dla ludzi zniesmaczonych prostotą niczym z czasów DOS'a jest też Windows PowerShell, o również niesłychanych możliwościach (W Win 7 dołączony, w Win Vista wgrywa się jako aktualizacja, w Win XP do samodzielnego pobrania, ale starsza wersja).

  #6 21.04.2011 15:34

od bardziej skomplikowanych zadań jest powershell na windzie, który przy dostępie do API bibliotek third-party nie wymaga ani specjalnych nagłówków, ani importów czy czegokolwiek - wszystko załatwiają mechanizmy reflection - wystarczy by funkcje exportowane w dll-ach były bez manglowanych nazw (C-like);

webnull   9 #7 21.04.2011 17:43

Z tym, że 99,9% producentów oprogramowania trzeciego olewa PowerShella dlatego nie ma on większych szans na rozszerzenie funkcjonalności na tyle co w Uniksach, szkoda bo wtedy zniknęłoby mi kilka problemów : -)

iluzion   5 #8 21.04.2011 19:30

@Vifon @webnull

Python słynie z tego, że często wprowadza zmiany. Na jednym z blogów czytałem kiedyś wpis na temat Pythona 3. Autor żalił się właśnie na liczby zmiennoprzecinkowe. Zauważył, że:

Python 2.7:

>>> 17/3
5

Python 3.2:

>>> 17/3
5.666666666666667

Python 2.7:

>>> round(1.5)
2.0
>>> round(2.5)
3.0

Python 3.2:

>>> round(1.5)
2
>>> round(2.5)
2

***

Gdy zależy nam na zachowaniu wysokiej precyzji powinniśmy korzystać z decimal.Decimal z modułu decimal.

>>> import decimal as d
>>> d.Decimal('20') - d.Decimal('10.99')
Decimal('9.01')

Jeśli korzystamy z funkcji matematycznych (np. round) najbezpieczniej jest korzystać z modułów przeznaczonych do obliczeń, np. NumPy. Tam zasada jest jasno opisana.

http://docs.scipy.org/doc/numpy/reference/generated/numpy.around.html#num

Liczba x.5 zostanie (zgodnie z inżynierskim podejściem) zaokrąglona do wartości parzystej.

"For values exactly halfway between rounded decimal values, Numpy rounds to the nearest even value. Thus 1.5 and 2.5 round to 2.0, -0.5 and 0.5 round to 0.0, etc. Results may also be surprising due to the inexact representation of decimal fractions in the IEEE floating point standard [R9] and errors introduced when scaling by powers of ten."

Problemem nie jest Python tylko odpowiednie podejście do problemu... i ostrożność.

iluzion   5 #9 21.04.2011 19:40

Co do PowerShella i innych powłok...

http://en.wikipedia.org/wiki/Comparison_of_command_shells

Pigmej   5 #10 21.04.2011 20:16

@iluzion

Pogratulować temu autorowi na 'blogu' wiedzy nt pythona:
odnośnie dzielenia: http://www.python.org/dev/peps/pep-0238/


Python 3.x i python 2.x to dwie osobne gałęzie które MOCNO różnią się między sobą (upraszczam ale tak będzie najwygodniej).

  #11 21.04.2011 23:35

@Vifon | 21.04.2011 14:08 :
W starszych wersjach Pythona istnieje coś takiego, jak typ dłuygi.

  #12 22.04.2011 10:08

Istnieje coś takiego, jak iPython, jednak nie miałem za bardzo okazji się nie bawić.

Pigmej   5 #13 22.04.2011 11:18

@notgnucy

Oraz bpython ktory jest chyba nawet lepszy jesli zaczyna sie swoja przygode z PY.