пʼятниця, 1 березня 2013 р.

Основи мови програмування Python за 10 хвилин

Python не вимагає явного оголошення змінних, є регістро-залежною (змінна var не еквівалентна змінній Var або VAR — це три різні змінні) об'єктно-орієнтованою мовою.

Синтаксис

По перше варто відзначити цікаву особливість Python. Він не містить операторних дужок (begin.. End в pascal або {..} в Сі), замість цього блоки виділяються відступами: пробілами або табуляцією, а вхід в блок з операторів здійснюється двокрапкою. Однорядкові коментарі починаються зі знака фунта «#», багаторядкові — починаються і закінчуються трьома подвійними лапками «"""». Щоб привласнити значення змінній використовується знак «=», а для порівняння — «==». Для збільшення значення змінної, або додавання до рядка використовується оператор «+=», а для зменшення — «-=». ​​Всі ці операції можуть взаємодіяти з більшістю типів, у тому числі з рядками. Наприклад:

>>> myvar = 3 
>>> myvar += 2 
>>> myvar -= 1 

"""Це багаторядковий коментар
Рядки між трьома подвійними лапками ігноруються"""

>>> mystring = "Hello" 
>>> mystring += " world." 
>>> print mystring
Hello world.

# Наступний рядок міняє значення змінних місцями. (Всього один рядок!)
>>> myvar, mystring = mystring, myvar

Структури даних

Python містить такі структури даних як списки (lists), кортежі (tuples) і словники (dictionaries). Списки — схожі на одновимірні масиви (але ви можете використовувати список який включає списки — багатовимірний масив), кортежі — незмінні списки, словники — теж списки, але індекси можуть бути будь-якого типу, а не тільки числовими.

«Масиви» в Python можуть містити дані будь-якого типу, тобто в одному масиві можуть знаходитися числові, рядкові й інші типи даних. Масиви починаються з індексу 0, а останній елемент можна отримати за індексом -1, ви можете привласнювати змінним функції і використовувати їх відповідно.

# Список складається з цілого числа, іншого списку і кортежу
>>> sample = [1, ["another", "list"], ("a", "tuple")]

# Цей список містить рядок, ціле і дробове число 
>>> mylist = ["List item 1", 2, 3.14]
# Змінюємо перший (нульовий) елемент списку mylist
>>> mylist[0] = "List item 1 again"
# Змінюємо останній елемент списку
>>> mylist[-1] = 3.14

# Створюємо словник, з числовими і цілочисловим індексами
>>> mydict = {"Key 1": "Value 1", 2: 3, "pi": 3.14}
# Змінюємо елемент словника під індексом "pi"
>>> mydict["pi"] = 3.15

# Задаємо кортеж
>>> mytuple = (1, 2, 3)

# Python дозволяє таким чином оголошувати синоніми функцій
>>> myfunction = len
>>> print myfunction(list) 
3

Ви можете використовувати частину масиву, задаючи перший і останній індекс через двокрапку «:». У такому випадку ви отримаєте частину масиву, від першого індексу до другого не включно. Якщо не зазначений перший елемент, то відлік починається з початку масиву, а якщо не вказано останній — то масив зчитується до останнього елемента. Негативні значення визначають положення елемента з кінця. Наприклад:

>>> Mylist = ["List item 1", 2, 3.14]

# Зчитуються всі елементи масиву
>>> Print mylist [:]
['List item 1', 2, 3.1400000000000001]

# Зчитуються нульовий і перший елемент масиву
>>> Print mylist [0:2]
['List item 1', 2]

# Зчитуються елементи від нульового (-3) до другого (-1) (не включно)
>>> Print mylist [-3: -1]
['List item 1', 2]

# Зчитуються елементи від першого, до останнього
>>> Print mylist [1:]
[2, 3.14]

Рядки

Рядки в Python відокремлюються лапками подвійними «"» або одинарними «'». Всередині подвійних лапок можуть бути присутніми одинарні або навпаки. До прикладу рядок "Він сказав 'привіт'!", буде виведена на екран як «Він сказав 'привіт'!». Якщо потрібно вивести текст використовувати декілька рядків, то ці рядки потрібно починати і закінчувати трьома подвійними лапками «"""». Ви можете підставити в шаблон рядка елементи з кортежу або словника. Знак відсотка «%» між рядком і кортежем, замінює в рядку символи «%s» на елемент кортежу. Словники дозволяють вставляти в рядок елемент під заданим індексом. Для цього треба використовувати в рядку конструкцію «%(індекс)s». У цьому випадку замість «%(індекс)s» буде підставлено значення словника під заданим індексом.

>>> print "Name: %s\
Number: %s\
String: %s" % (myclass.name, 3, 3 * "-")
Name: Poromenos
Number: 3
String: ---

strString = """Цей текст розташований
на декількох рядках"""

>>> print "This %(verb)s a %(noun)s." % {"noun": "test", "verb": "is"}
This is a test.

Оператори

Оператори while, if, for — оператори переміщення. Тут немає аналога оператора select, так що доведеться обходитися if. В операторі for відбувається порівняння змінної і списку. Щоб отримати список цифр до числа — використовуйте функцію range (). Ось приклад використання операторів:


# Отримуємо список з десяти цифр (від 0 до 9)
rangelist = range(10)
>>> print rangelist
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# Цикл виконується поки змінна number (яка щоразу збільшується на одиницю)
# входить до списку...
for number in rangelist:
    # Перевіряємо чи входить змінна number
    # в кортеж чисел (3, 4, 7, 9)
    if number in (3, 4, 7, 9):
        # Якщо змінна number входить в кортеж (3, 4, 7, 9)
        # Операція «break» забезпечує вихід з циклу в будь-який момент
        break
    else:
        # «continue» здійснює «прокручування» циклу.
        # Тут це не потрібно, так як після цієї операції
        # в будь-якому випадку програма переходить знову до обробки циклу
        continue
else:
    # «else» вказувати необов'язково, умова виконується
    # якщо цикл не був перерваний за допомогою «break».
    pass # Нічого не робити

if rangelist[1] == 2:
    print "The second item (lists are 0-based) is 2"
elif rangelist[1] == 3:
    print "The second item (lists are 0-based) is 3"
else:
    print "Dunno"

while rangelist[1] == 1:
    pass

Функції

Для оголошення функції використовується ключове слово «def». Аргументи функції задаються в дужках після назви функції. Можна задавати необов'язкові аргументи, привласнюючи їм значення за замовчуванням. Функції можуть повертати кортежі, в такому випадку треба писати значення, що повертаються, через кому. Ключове слово «lambda» служить для оголошення елементарних функцій.

# Same as def funcvar(x): return x + 1
funcvar = lambda x: x + 1
>>> print funcvar(1)
2

# an_int і a_string необов'язкові аргументи, які приймають значення
# оголошені за замовчуванням
# if one is not passed (2 and "A default string", respectively).
def passing_example(a_list, an_int=2, a_string="A default string"):
    a_list.append("A new item")
    an_int = 4
    return a_list, an_int, a_string

>>> my_list = [1, 2, 3]
>>> my_int = 10
>>> print passing_example(my_list, my_int)
([1, 2, 3, 'A new item'], 4, "A default string")
>>> my_list
[1, 2, 3, 'A new item']
>>> my_int
10

Класи

Мова Python обмежена у множинному спадкуванні в класах. Внутрішні змінні та внутрішні методи класів починаються з двох знаків нижнього підкреслення «__» (наприклад «__myprivatevar»). Ми можемо також присвоювати значення змінної класу ззовні. Приклад:

class MyClass(object):
    common = 10
    def __init__(self):
        self.myvariable = 3
    def myfunction(self, arg1, arg2):
        return self.myvariable
    # Тут ми оголосили клас Myclass.
    # Функція __ init__ викликається автоматично
    # при ініціалізації класів.

# Ініціалізуємо клас, змінна myvariable набуває значення 3
# як заявлено в методі ініціалізації
>>> classinstance = MyClass()
# Метод myfunction класу Myclass повертає значення змінної myvariable 3
>>> classinstance.myfunction(1, 2)
3

# Змінна common оголошена в усіх класах
>>> classinstance2 = MyClass()
>>> classinstance.common
10
>>> classinstance2.common
10

# Тому, якщо ми змінимо її значення в класі Myclass зміняться 
# її значення в усіх об'єктах, ініціалізованих класом Myclass
>>> MyClass.common = 30
>>> classinstance.common
30
>>> classinstance2.common
30

# А тут ми не змінюємо змінну класу. Замість цього
# ми оголошуємо її в об'єкті і присвоюємо їй нове значення
>>> classinstance.common = 10
>>> classinstance.common
10
>>> classinstance2.common
30
>>> MyClass.common = 50
# Тепер зміна змінної класу не торкнеться 
# змінних об'єктів цього класу
10
>>> classinstance2.common
50

# Наступний клас є спадкоємцем класу Myclass
# наслідуючи його властивості та методи, до того ж клас може
# успадковуватися з декількох класів, в цьому випадку запис
# такий: class Otherclass(Myclass1, Myclass2, MyclassN)
class OtherClass(MyClass):
    def __init__(self, arg1):
        self.myvariable = 3
        print arg1

>>> classinstance = OtherClass("hello")
hello
>>> classinstance.myfunction(1, 2)
3

# Цей клас не має властивість test, але ми можемо
# оголосити таку змінну для об'єкта. Причому
# змінна tеsт буде членом тільки classinstance.
>>> classinstance.test = 10
>>> classinstance.test
10

Винятки

Винятки в Python мають структуру try-except [exceptionname]:

def some_function():
    try:
        # Ділення на нуль викликає помилку
        10 / 0
    except ZeroDivisionError:
        # Але програма не виконує неприпустиму операцію
        # а обробляє блок виключення відповідний
        # помилці «ZeroDivisionError»
        print "Oops, invalid."
    else:
        # Exception didn't occur, we're good.
        pass
    finally:
        # This is executed after the code block is run
        # and all exceptions have been handled, even
        # if a new exception is raised while handling.
        print "We're done with that."

>>> some_function()
Oops, invalid.
We're done with that.

Імпорт

Зовнішні бібліотеки можна підключити процедурою «import [libname]», де [libname] — назва бібліотеки, що підключається. Ви так само можете використовувати команду «from [libname] import [funcname]», щоб ви могли використовувати функцію [funcname] з бібліотеки [libname]:

import random # Імпортуємо бібліотеку «random»
from time import clock # Імпортуємо функцію «clock» з бібліотеки «time»

randomint = random.randint(1, 100)
>>> print randomint
64

Робота з файловою системою

Python має багато вбудованих бібліотек. У цьому прикладі ми спробуємо зберегти в бінарному файлі структуру списку, прочитати її і збережемо рядок в текстовому файлі. Для перетворення структури даних ми будемо використовувати стандартну бібліотеку «pickle»:

import pickle
mylist = ["This", "is", 4, 13327]

# Відкриємо бінарний файл C:\\binary.dat для запису. Символ «r»
# запобігає заміні спеціальних сиволів (таких як n, t, b та ін.)
myfile = open(r"C:\\binary.dat", "w")
pickle.dump(mylist, myfile)
myfile.close()

# Відкриємо текстовий файл text.txt для запису
myfile = open(r"C:\\text.txt", "w")
myfile.write("This is a sample string")
myfile.close()

# Відкриємо текстовий файл text.txt для читання
myfile = open(r"C:\\text.txt")
>>> print myfile.read()
'This is a sample string'
myfile.close()

# Відкриємо бінарний файл C:\\binary.dat для читання
myfile = open(r"C:\\binary.dat")
loadedlist = pickle.load(myfile)
myfile.close()
>>> print loadedlist
['This', 'is', 4, 13327]

Особливості

>>> lst1 = [1, 2, 3]
>>> lst2 = [3, 4, 5]
>>> print [x * y for x in lst1 for y in lst2]
[3, 4, 5, 6, 8, 10, 9, 12, 15]
>>> print [x for x in lst1 if 4 > x > 1]
[2, 3]

# Оператор «any» повертає true, якщо хоча б одна з умов, виконується.
>>> any([i % 3 for i in [3, 3, 4, 4, 3]])
True
# This is because 4 % 3 = 1, and 1 is true, so any()
# returns True.

# Наступна процедура підраховує кількість
# підходящих елементів у списку
>>> sum(1 for i in [3, 3, 4, 4, 3] if i == 4)
2
>>> del lst1[0]
>>> print lst1
[2, 3]
>>> del lst1

Глобальні змінні оголошуються поза функціями і можуть бути прочитані без оголошень. Але якщо вам необхідно змінити значення глобальної змінної з функції, то вам необхідно оголосити її на початку функції ключовим словом «global», якщо ви цього не зробите, то Python оголосить змінну, доступну тільки для цієї функції.

number = 5

def myfunc():
    # Виводить 5
    print number

def anotherfunc():
    # Це викликає виключення, оскільки глобальна змінна
    # не була викликана з функції. Python в цьому випадку створює
    # однойменну змінну всередині цієї функції, доступну
    # тільки для операторів цієї функції.
    print number
    number = 3

def yetanotherfunc():
    global number
    # І тільки з цієї функції значення змінної змінюється
    number = 3

Переваги Python
  • Швидкість виконання програм написаних на Python дуже висока. Це пов'язано з тим, що основні бібліотеки Python написані на C++ і виконання завдань займає менше часу, ніж на інших мовах високого рівня.
  • У зв'язку з цим ви можете писати свої власні модулі для Python на C або C++.
  • У стандартних бібліотеках Python ви можете знайти засоби для роботи з електронною поштою, протоколами Інтернету, FTP, HTTP, базами даних та багато іншого.
  • Скрипти, написані за допомогою Python виконуються на більшості сучасних операційних систем.
  • Python підходить для будь-яких рішень в області програмування, будь то офісні програми, веб-додатки, GUI-додатки і т.д.
  • Над розробкою Python трудилися тисячі ентузіастів зі всього світу. Підтримкою сучасних технологій в стандартних бібліотеках ми можемо бути зобов'язані саме тому, що Python був відкритий для всіх, хто забажає.

1 коментар:

  1. мені потрібно вивести масив так щоб він виглядав як звичайний рядок. Ніхто незнає як допомогти???

    ВідповістиВидалити