Mimo, iż Pythona używałem już wcześniej to nigdy nie czytałem żadnej książki o nim (w wersji papierowej). Spodziewałem się, że taka książka może dużo wyjaśnić i pokazać Pythona w nowym świetle. Chodzi głownie o wyjaśnienie filozofii tego języka. Takie mam własnie odczucie ją czytając.
Jeszcze jest za wcześniej, aby oceniać tą książkę ale już mogę przedstawić kilka ciekawostek, które wyczytałem.
Po pierwsze to środowisko IDLE. W Windows jest domyślnie dodawane do instalacji Pythona. W Linuksie można również je zainstalować jako dodatkową paczkę. Tak samo sytuacja wygląda z samym interpreterem Pythona w wersji 3.x. W Windows dostaniemy najnowszą wersję, na moim systemie jakim jest wersja stabilna Debiana domyślnie jest Python w wersji starszej 2.x z pewnych powodów - systemowych. Nie oznacza to jednak, że nie można jednocześnie posiadać wersji nowszej, owszem, można, tylko również trzeba dodatkowo to zainstalować i jest.
Tak samo sprawa wygląda z środowiskiem IDLE, które jest napisane w GUI Tkinter. To standardowa biblioteka Pythona do pisania programów z GUI, bazuje ona na Tk. Jej zaletą jest "lekkość". Za IDLE przemawia również wbudowany debugger, więc czemu nie.
Kolejną rzeczą jest rozmiar liczb. Nie wiem jak we wcześniejszych wersjach Pythona ale w 3.x zmienne są ograniczone tylko przez dostępną pamięć w komputerze. Ciekawe.
Co do samych wersji to faworyzowana jest wersja 3.1 lub późniejsze bo zawiera pewne poprawki wersji 3.0.
Pisałem o instalacji dodatkowo Pythona 3, w wyniku czego mamy kilka interpreterów - jak widać na pierwszym zdjęciu. Chodzi o to, że zapis w skrypcie:
#!/usr/bin/env python
oznacz, że interpreter może być zainstalowany w innej ścieżce niż wymieniona albo używa pierwszy napotkany w tym katalogu - pierwszym będzie zapewne ten o najniższym numerze. Możemy to przetestować.
grzesiek@home:~/Desktop$ cat test.py
#!/usr/bin/env python
import sys
print(sys.version)
grzesiek@home:~/Desktop$ ./test.py
2.6.6 (r266:84292, Oct 9 2010, 12:24:52)
[GCC 4.4.5]
Dlatego preferuje samemu wywoływać interpreter ale nie w kodzie np.:
grzesiek@home:~/Desktop$ cat test.py
#!/usr/bin/python3.1
import sys
print(sys.version)
grzesiek@home:~/Desktop$ ./test.py
3.1.3 (r313:86834, Nov 28 2010, 10:01:07)
[GCC 4.4.5]
tylko tak:
grzesiek@home:~/Desktop$ python3.1 test.py
3.1.3 (r313:86834, Nov 28 2010, 10:01:07)
[GCC 4.4.5]
Kwestia upodobań.
Teraz kilka ciekawych przykładów.
>>> "test"[2]
's'
>>> _
's'
>>> "test"[0]
't'
"_" to ostatnie wykonanie wyrażenie.
>>> int(" xxx3")
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
int(" xxx3")
ValueError: invalid literal for int() with base 10: ' xxx3'
>>> int(" 3 ")
3
Obiekt przestaje istnieć, jeżeli zostało usunięte ostatnie odniesienie do niego. Tym właśnie są wszystkie zmienne. Zmienne są niezmienne - prawda, że śmieszne. Krotki i napisy również.
Wyliczanie elementów krotki i napisu:
>>> "aa","bb","cc"
('aa', 'bb', 'cc')
>>> len(("aa",))
1
>>> len("aa")
2
Listy można zmieniać:
>>> x = ["a","b","c"]
>>> x
['a', 'b', 'c']
>>> x.append("x")
>>> x
['a', 'b', 'c', 'x']
>>> list.append(x,999)
>>> x
['a', 'b', 'c', 'x', 999]
>>> x[0]
'a'
>>> x[0] = 0
>>> x
[0, 'b', 'c', 'x', 999]
>>>
Tożsamość:
>>> a = 5
>>> b = 5
>>> a is b
True
>>> a2 = "test"
>>> b2 = "test"
>>> a2 is b2
True
>>> a3 = [1,2,3]
>>> b3 = [1,2,3]
>>> a3 is b3
False
>>> a3 = b3
>>> a3 is b3
True
>>> a4 = (1,2,3)
>>> b4 = (1,2,3)
>>> a4 is b4
False
>>> a = 4
>>> a is b
False
Porównanie:
>>> a2 == b2
True
>>> a4 == b4
True
Ładnie wygląda:
>>> a =3
>>> 0 < a < 10
True
Operator przynależności:
>>> a3
[1, 2, 3]
>>> 2 in a3
True
>>> 10 not in a3
True
>>> a2
'test'
>>> "t" in a2
True
Operatory arytmetyczne nie tylko dla liczb:
>>> nazwa = "cos"
>>> nazwa += " tam"
>>> nazwa
'cos tam'
>>> x
[0, 'b', 'c', 'x', 999]
>>> x += nazwa
>>> x
[0, 'b', 'c', 'x', 999, 'c', 'o', 's', ' ', 't', 'a', 'm']
>>> x += "999"
>>> x
[0, 'b', 'c', 'x', 999, 'c', 'o', 's', ' ', 't', 'a', 'm', '9', '9', '9']
Elementy wbudowane:
>>> dir()
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'a', 'a2', 'a3', 'a4', 'b', 'b2', 'b3', 'b4', 'main', 'nazwa', 'os', 'x']
>>> dir("__builtins__")
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_formatter_field_name_split', '_formatter_parser', 'capitalize', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
>>> dir('b')
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_formatter_field_name_split', '_formatter_parser', 'capitalize', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
Liczby:
>>> 0b1010101
85
>>> 0xEEEEE
978670
>>> bin(1234)
'0b10011010010'
>>> hex(1234)
'0x4d2'
>>> oct(1234)
'0o2322'
>>> import math
>>> math.pi
3.141592653589793
>>> 1,3.14
(1, 3.14)
Nie będę tu opisywał dokładnie tych przykładów ale i tak są przydatne - przynajmniej dla mnie.
Nie będę tu opisywał dokładnie tych przykładów ale i tak są przydatne - przynajmniej dla mnie.
No comments:
Post a Comment