PYTHON
В довіднику зібрана колекція з дорогоцінних каменів, щоб закріпити ваші успіхи у вивченні Python.
Основи
1. Запуск сценаріїв Python
На більшості UNIX-систем, можна запустити сценарії Python з командного рядка, наприклад, для сценарію mypyprog.py:
python mypyprog.py
2. Запуск програм на Python з інтерпретатора
Інтерактивний інтерпретатор Python дозволяє вам легко спробувати перші кроки в програмуванні і використанні всіх команд Python. Ви просто вводите кожну команду в командному рядку (>>>), одну за іншою і негайно отримуєте відповідь.
Інтерпретатор Python запускається за допомогою команди python:
python
Python 2.6.2 (release26-maint, Apr 19 2009, 01:56:41)[GCC 4.3.3] on linux2
Type “help”, “copyright”, “credits”or “license” for more information.
>>> <тут введіть команду>
У цьому довіднику весь код, який починається зі знаку >>> означає, що використовується командний рядок Python.
Також важливо пам’ятати, що Python сприймає відступи (tabs) дуже серйозно – тому, якщо ви отримуєте будь-які помилки зі згадуванням відступу, виправіть інтервал табуляції.
3. Динамічне введення
У Java, C++ та в інших статично типізованих мовах, необхідно вказати тип даних, що повертаються і аргументи функції. З іншого боку, Python є динамічною універсальною мовою. В Python ви ніколи не повинні явно вказувати тип будь-яких даних. Виходячи з того, яке значення привласнюєте, Python буде відстежувати тип даних усередині.
4. Оператори Python
Python використовує повернення каретки для розділу операторів, а також двокрапку і відступи для поділу коду на блоки. Більшість компільованих мов програмування, таких як C і C++, використовують крапку з комою для розділення операторів і фігурні дужки для окремих блоків коду.
5. Оператори == і =
Python використовує ‘==’ для порівняння і ‘=’ для присвоювання. Python не підтримує вбудовані присвоювання, тому немає жодного ризику випадково присвоїти значення, коли ви насправді хочете, його порівняти.
6. Об’єднання рядків
Ви можете використати ‘+’ для об’єднання рядків.
>>> print (‘Mikro’+’Tik’)
MikroTik
7. Метод __init__
Метод __init__ запускається, як тільки створюється примірник об’єкту класу. Метод корисний, коли хочете зробити будь-яку ініціалізацію зі своїм об’єктом. Метод __init__ аналогічний конструктору в C++, C # або Java.
Приклад:
class Person:
def __init__(self, name):
self.name = name
def sayHi(self):
print (‘Hello, my name is’, self.name)
p = Person(‘Taras’)
p.sayHi()
Виведення:
python initmethod.py
Hello, my name is Taras
8. Модулі
Щоб зберегти свої програми керованим по мірі того, як вони ростуть в розмірах, ви можете розбити їх на кілька файлів. Python дозволяє помістити кілька визначень функцій в файл і використовувати їх як модулі, які можна імпортувати в інші сценарії і програми. Ці файли повинні мати розширення .py.
Приклад:
# файл my_function.py
def minmax(a,b):
if a <= b:
min, max = a, b
else:
min, max = b, a
return min, max
Використання модуля:
import my_function
x,y = my_function.minmax(25, 6.3)
9. Визначені в модулі імена
Приклад:
Вбудована функція ‘dir()’ може бути використана, щоб з’ясувати, які імена визначає модуль. Повертається сортований список рядків.
>>> import time
>>> dir(time)
[‘__doc__’, ‘__file__’, ‘__name__’,
‘__package__’, ‘accept2dyear’,
‘altzone’, ‘asctime’, ‘clock’,
‘ctime’, ‘daylight’, ‘gmtime’,
‘localtime’, ‘mktime’, ‘sleep’,
‘strftime’, ‘strptime’, ‘struct_
time’, ‘time’, ‘timezone’, ‘tzname’,
‘tzset’]
10. Внутрішня документація модуля
Ви можете побачити внутрішню документацію (якщо така є) для імені модуля, переглядаючи .__doc__.
Приклад:
>>> import time
>>> print time.clock.__doc__
clock() -> число у форматы з плаваючою комою
Цей приклад повертає час CPU або реальний час з моменту запуску процесу або після першого виклику clock(). Точність така ж, як і для системних записів.
11. Передача аргументів в сценарій Python
Python дозволяє отримати доступ до всього, що ви передали в сценарій при його виклику. Контент «командного рядка» зберігається в списку sys.argv.
import sys
print sys.argv
12. Завантаження модулів або команд при запуску
Ви можете завантажити готові модулі або команди при запуску будь-якого скрипта Python за допомогою змінної оточення $PYTHONSTARTUP. Ви можете встановити змінну оточення $PYTHONSTARTUP в файлі, який містить інструкції по завантаженню необхідних модулів або команд.
13. Перетворення рядка в об’єкт дати
Ви можете використати функцію ‘DateTime’ для конвертування рядка в об’єкт дати.
Приклад:
from DateTime import DateTime
dateobj = DateTime(string)
14. Перетворення списку в рядок для відображення
Ви можете перетворити список в рядок одним із таких способів.
1-й метод:
>>> mylist = [‘spam’, ‘ham’, ‘eggs’]>>> print (‘, ‘.join(mylist))
spam, ham, eggs
2-й метод:
>> print (‘\n’.join(mylist))
spam
ham
eggs
15. Автозаповнення інтерпретатора Python
Ви можете отримати автоматичне заповнення всередині інтерпретатора Python, додавши наступні рядки в ваш файл .pythonrc (або в свій файл для Python для читання під час запуску):
import rlcompleter, readline
readline.parse_and_bind(‘tab: complete’)
Це дозволить Python при натисканні клавіші Tab робити завершення частково набраної функції, метода та імен змінних.
16. Інструмент документації Python
Ви можете запустити графічний інтерфейс для пошуку документації Python скориставшись командою:
pydoc -g
Вам знадобиться пакет python-tk для цієї функції.
17. Сервер документації Python
Ви можете запустити сервер HTTP на вказаному порту локальної машини, що забезпечить доступ в чудовому вигляді до всієї документації Python, включаючи документацію для модулів сторонніх розробників.
pydoc -p <portNumber>
18. Програмне забезпечення для розробників на Python
Є багато інструментів, щоб допомогти розробникам на Python. Ось кілька важливих з них:
IDLE: Вбудований в Python IDE, з функцією автозаповнення, з підписаним спливаючим вікном допомоги та редагування файлів.
IPython: Інше розширення оболонки Python з вкладки-завершенням та іншими функціями.
Eric3: A IDE GUI Python з автозавершенням, класом браузера, вбудованою оболонкою і відладчиком.
WingIDE: Комерційний IDE Python з безкоштовною ліцензією доступний для розробників з відкритим вихідним кодом у всьому світі.
Вбудовані модулі
19. Виконання функцій в момент зупинки інтерпретатора Python
Можете використати модуль ‘atexit’ для виконання функцій в момент зупинки інтерпретатора Python.
Приклад:
def sum():
print(4+5)
def message():
print(“Executing Now”)
import atexit
atexit.register(sum)
atexit.register(message)
Виведення:
Executing Now
9
20. Перетворення цілих чисел в двійкові, в hex- і восьмеричний код
Python надає простий у використанні функції – bin(), hex() і oct() – для перетворення цілого числа в двійкове, hex- і восьмеричний формати, відповідно.
Приклад:
>>> bin(24)
‘0b11000’
>>> hex(24)
‘0x18’
>>> oct(24)
‘030’
21. Перетворення будь-яких символів в UTF-8
Можете використати наступну функцію для перетворення будь яких символів у формат UTF-8:
data.decode(“input_charset_here”).
encode(‘utf-8’)
22. Видалення дублікатів із списків
Якщо хочете видалити дублікати із списку, просто вставте кожний елемент в dict як ключ (в прикладі з ‘none’ як значення) і потім перевірте з dict.keys().
from operator import setitem
def distinct(l):
d = {}
map(setitem, (d,)*len(l), l, [])
return d.keys()
23. Цикл do-while
Оскільки Python не має конструкцій циклу do-while або do-until (поки що), можете використати наступний метод для отримання подібного результату:
while True:
do_something()
if condition():
break
24. Визначення платформи системи
Для виконання функцій конкретної платформи дуже корисно виявити платформу, на якій працює інтерпретатор Python. Ви можете використати ‘sys.platform’, щоб дізнатися поточну платформу.
Приклад:
На Ubuntu Linux
>>> import sys
>>> sys.platform
‘linux2’
На Mac OS X Snow Leopard
>>> import sys
>>> sys.platform
‘darwin’
25. Відключення і включення «збору сміття»
Іноді ви можете включити або відключити «збирач сміття» під час виконання. Ви можете використовувати модуль ‘gc’, щоб включити або відключити «збір сміття».
Приклад:
>>> import gc
>>> gc.enable <вбудована функція дозволена>
>>> gc.disable <вбудована функція заборонена>
26. Використання модулів на C для кращої продуктивності
Багато модулів Python поставляються з аналогами модулів C. За допомогою цих модулів C можна отримати значний приріст продуктивності в складних додатках.
Приклад:
cPickle instead of Pickle, cStringIO
замість StringIO.
27. Обчислення максимуму, мінімуму і суми з будь-якого списку або ітерактивно
Можете використати наступні вбудовані функції:
max: Повертає найбільший елемент із списку.
min: Повертає найменший елемент із списку.
sum: Функція повертає суму всіх елементів списку. Можна використати необов’язковий другий аргумент: значення, з якого має починатися додавання (за замовчуванням 0).
28. Подання дробних чисел
Примірник дробних чисел може бути створений за допомогою наступної конструкції:
Fraction([numerator[,denominator]])
29. Виконання математичних операцій
Модуль ‘math’ надає безліч математичних функцій. Вони працюють для цілих чисел і чисел з плаваючою точкою, крім комплексних чисел. Для комплексних чисел використовується окремий модуль, який називається ‘cmath’.
Приклад:
math.acos(x): Повертає arccos від x.
math.cos(x): Повертає cos від x.
math.factorial(x) : Повертає x-факторіал.
30. Робота з масивами
Модуль ‘array’ забезпечує ефективний спосіб використання масивів в ваших програмах. Модуль ‘array’ ‘ визначається введенням наступного: array(typecode [, initializer])
Після того, як ви створили об’єкт масиву, скажімо, myarray, ви можете застосувати купу методів до нього. Ось кілька важливих з них:
myarray.count(x): Повертає кількість значень x в масиві.
myarray.extend(x): Визначає x як кінець масиву.
myarray.reverse(): Обертає порядок в масиві.
31. Сортування складових списку
Модуль ‘bisect’ робить можливим дуже легко отримати списки в будь-якому порядку. Можете використати наступні функції для впорядковування списків:
bisect.insort(list, item [, low[, high]])
Вставка елемента в список в відсортованому порядку. Якщо елемент вже є в списку, новий запис вставляється праворуч від будь-якого з існуючих записів.
bisect.insort_left(list, item [, low[, high]])
Вставки елемента в список в відсортованому порядку. Якщо елемент вже є в списку, новий запис вставляється зліва від будь-яких існуючих записів.
32. Використання пошуку на основі регулярних виразів
Модуль ‘re’ робить дуже простим у використанні пошук на основі регулярних виразів. Можете використати функцію ‘re.search()’ на основі регулярних виразів. Перевірте наведені нижче приклади.
Приклад:
>>> import re
>>> s = “Adam is a bad boy”
>>> if re.search(“A”, s): print(“Match!”) # char literal
…
Match!
>>> if re.search(“[@A-Z]”, s): print (“Match!”) # char class
… # match either at-sign or capital letter
Match!
>>> if re.search(“\d”, s): print(“Match!”) # digits class
…
33. Робота з форматом стиснення bzip2 (.bz2)
Можете використати модуль ‘bz2’ для читання та запису даних за допомогою алгоритму стиснення bzip2.
bz2.compress() : Для стиснення bz2
bz2.decompress() : Для витягування bz2
Приклад:
# Файл: bz2-example.py
import bz2
MESSAGE = “Adam is a bad boy”
compressed_message = bz2.
compress(MESSAGE)
decompressed_message = bz2.
decompress(compressed_message)
print (“original:”, repr(MESSAGE))
print (“compressed message:”, repr(compressed_message))
print (“decompressed message:”, repr(decompressed_message))
Вихід:
python bz2- example.py
original: ‘Adam is a bad boy’
compressed message: ‘BZh91AY&SY\xc4\x0fG\x98\x00\x00\x02\x15\x80@\x00\x00\x084%\x8a \x00”\x00\x0c\x84\r\x03C\xa2\xb0\xd6s\xa5\xb3\x19\x00\xf8\xbb\x92)\xc2\x84\x86 z<\xc0’
decompressed message: ‘Adam is a bad boy’
34. Використання бази даних SQLite з Python
SQLite швидко стає дуже популярною вбудованою базою даних через свою нульову необхідність конфігурації і чудові рівні продуктивності. Можете використати модуль ‘sqlite3’, щоб працювати з базами даних SQLite.
Приклад:
>>> import sqlite3
>>> connection = sqlite.connect(‘test.db’)
>>> curs = connection.cursor()
>>> curs.execute(‘’’create table item
… (id integer primary key, itemno text unique, … scancode text, descr text, price real)’’’)
<sqlite3.Cursor object at 0x1004a2b30>
35. Робота з zip-файлами
Можете використати модуль ‘zipfile’ для роботи з zip файлами.
zipfile.ZipFile(filename [, mode [, compression [,allowZip64]]])
Відкрийте свій zip-файл, де файл може бути вказаний з шляхом до файлу (рядок) або файло-подібний об’єкт.
zipfile.close()¶
Закрийте файл архіву. Ви повинні викликати ‘close()’ перед виходом зі своєї програми або записи не будуть збережені.
zipfile.extract(member[, path[, pwd]])
Витягування елемента з архіву в поточний робочий каталог; ‘member’ має бути з повним ім’ям (або об’єкт zipinfo). Інформаційний файл витягується якомога точніше. ‘path’ вказує інший каталог для вилучення архіву. ‘member’ може бути ім’ям файлу або об’єктом zipinfo. ‘pwd’ є паролем, який використовується для зашифрованих файлів.
36. Використання спеціальних символів в UNIX-стилі для пошуку за іменами файлів
Можете використати модуль ‘glob’, щоб знайти всі шляхи до файлу, які збігаються з шаблоном відповідно до правил, що використовуються оболонкою UNIX. *,? і діапазони символів, вказані за допомогою [ ], будуть їм відповідати.
Приклад:
>> import glob
>>> glob.glob(‘./[0-9].*’)
[‘./1.gif’, ‘./2.txt’]>>> glob.glob(‘*.gif’)
[‘1.gif’, ‘card.gif’]>>> glob.glob(‘?.gif’)
[‘1.gif’]