Основы языка Python

advertisement
Концепции языков
программирования
Лекции 6-7. Язык Python (основы)
Глухих Михаил Игоревич, к.т.н., доц.
mailto: glukhikh@mail.ru
Беляев Михаил Анатольевич, асп.
Литература
Изучаем Python – М. Лутц
3-е издание, Символ-Плюс, 2009
Python 2.5
Dive Into Python – М. Пилгрим
http://diveinto.python.ru/toc.html
Официальный сайт
http://python.org
http://docs.python.org (документация)
Концепции языков
программирования
2
Основные свойства
открытый исходный код
развивающийся
язык сценариев
интерпретируемый
динамическая типизация
строгая типизация (???)
стиль
чистый объектно-ориентированный
все есть объекты
функциональный
Концепции языков
программирования
3
Строгая типизация
любой объект имеет строго определенный,
неизменный тип
допускается присваивание переменной
только значения строго того же типа, что и
переменная
операция (функция) требует параметров
строго определенного типа
не допускаются неявные преобразования
типов
Концепции языков
программирования
4
Особенности
Достоинства
кроссплатформенность
высокая скорость разработки
удобный синтаксис
мощная библиотека
Недостатки
низкое быстродействие
сравнительно низкая скорость отладки
Концепции языков
программирования
5
Философия (Дзэн)
Красивое лучше, чем уродливое.
Явное лучше, чем неявное.
Простое лучше, чем сложное.
Сложное лучше, чем запутанное.
Плоское лучше, чем вложенное.
Разреженное лучше, чем плотное.
Читаемость имеет значение.
Особые случаи не настолько особые, чтобы нарушать
правила.
При этом практичность важнее безупречности.
Ошибки никогда не должны замалчиваться.
Если не замалчиваются явно.
Концепции языков
программирования
6
Философия (Дзэн)
Встретив двусмысленность, отбрось искушение
угадать.
Должен существовать один — и, желательно, только
один — очевидный способ сделать это.
Хотя он поначалу может быть и не очевиден, если вы
не голландец.
Сейчас лучше, чем никогда.
Хотя никогда зачастую лучше, чем прямо сейчас.
Если реализацию сложно объяснить — идея плоха.
Если реализацию легко объяснить — идея, возможно,
хороша.
Пространства имён — отличная штука! Будем делать
их побольше!
Концепции языков
программирования
7
История развития
Версия 0.9 – 1991 (Гвидо ван Россум)
Python 1.0 – 1994
Python 1.4 – 1997
именованные параметры
комплексные числа
Python 1.6/2.0 – 2000
генераторы списков (Haskell)
сборка мусора
Python 2.1 – 2001
Python Software Foundation
вложенные пространства имен
Концепции языков
программирования
8
История развития
Python 2.2 – 2001
общая иерархия типов
функции-генераторы
Python 2.3 – 2003
множества, логический тип
кодировка для исходного кода
Python 2.4 – 2005
встроенный тип для множеств
выражения-генераторы
механизм подстановки строк
Концепции языков
программирования
9
История развития
Python 2.5 – 2006
условные выражения
комбинация try/except/finally
Python 2.6 – 2008
конструкция with
улучшенное форматирование строк
Python 2.7 – 2010
Python 3.0 – 2008
нет обратной совместимости (например, убрали
оператор print)
все строки в Unicode
Концепции языков
программирования
10
Установка
Язык + библиотеки + интерпретатор: с
официального сайта
python.exe – командная оболочка python
скрипты *.py – запускаются из терминала
Среда разработки
IDLE
NetBeans и плагин Python
Концепции языков
программирования
11
"Hello, world" на Python
# -*- coding: utf-8 -*if __name__ == "__main__":
print "Hello, world!"
# __name__ – имя модуля при использовании
# или __main__ при запуске
# print – оператор вывода
Концепции языков
программирования
12
Отступление о синтаксисе
if (c1) {
st1;
} else if (c2) {
st2;
} else {
st3;
}
if c1
st1;
elif c2
st2;
else
st3;
fi
Концепции языков
программирования
if c1:
st1
elif c2:
st2
else:
st3
13
Комментарии
# -*- coding: utf-8 -*# это была первая строка файла
# это просто комментарий
def func(x, y):
'''
Это документирующая строка
x – первый, y - второй
'''
pass
Концепции языков
программирования
14
Имена
первый символ – латинская буква или знак
подчеркивания
остальные символы – латинские буквы,
цифры или знаки подчеркивания
строчные и прописные буквы различаются
общепринятые соглашения
ClassName
method_name
variable_name
CONSTANT_NAME
Концепции языков
программирования
15
Система типов
Все является объектами!
в том числе примитивные значения
в том числе функции
в том числе описания типов
Свойства объектов
identity, тип, значение
атрибуты (поля, члены-данные)
методы (члены-функции)
наследование
Концепции языков
программирования
16
Объекты и переменные
Объекты
после создания имеют строго определенный и
неизменный тип (type(obj))
также имеют определенный identity
(id(obj), o1 is o2, o1 is not o2)
значение: mutable, immutable (зависит от типа)
Переменные
не имеют специального определения
определяются в ходе выполнения
работают как ссылочные (по факту примитивные
типы реализованы как значения)
тип и значения могут изменяться
Концепции языков
программирования
17
Численные типы
int: 23, -34 (>=32 бита, sys.maxint, C long)
long: 345L неограниченный размер
float: 1.4e+40 (>=64 бита, C double)
complex: 1+2j (z.real, z.imag, abs(z), два float)
bool: True, False
n = 23 # Никаких int n !!!
val = 3456789L
x = 1.4e+40
c = 1+2j
flag = True
Концепции языков
программирования
18
Числовые операции
+ - * / стандартная арифметика
% взятие остатка
// деление нацело
** возведение в степень
<< >> сдвиги
| & ^ ~ побитовые операции
== >= <= < > != <> сравнения
a < b < c эквивалентно a < b and b < c
a < b != c эквивалентно a < b and b != c
Концепции языков
программирования
19
Условия
Любой объект python имеет связанное
логическое значение
False: 0, None, "", (), [], {}
True: все остальные
Поэтому любой объект может быть
использован в условии
if a + b: # если сумма не равна 0
pass
Концепции языков
программирования
20
"Логические" операции
# Если a ложно, то a, иначе b
a and b
# Если a истинно, то a, иначе b
a or b
# Настоящее НЕ
not a
# Условная конструкция
a if cond else b
Концепции языков
программирования
21
"Логические" операции
a
#
#
#
and b or c
(a and b) or c
если a ложно, то a or c, то есть c
если a истинно, то b or c
#
#
#
#
#
a
Если a истинно, то a, иначе
если b ложно, то b, иначе
если c истинно, то c, иначе d
Справедливо при a or (b and (c or d))
На самом деле (a or (b and c)) or d
or b and c or d
Концепции языков
программирования
22
Последовательности
Индексированные списки
len(seq) – длина последовательности
seq[i] – элемент с индексом i
0 первый индекс, 1 второй...
-1 это последний индекс, -2 предпоследний...
seq[i:j] – подпоследовательность от i до j-1
seq[i:] – подпоследовательность от i до конца
seq[:j] – подпоследовательность от начала до j-1
s1 + s2 – сумма последовательностей
s1 * n – повторение последовательности
not in seq, in seq – проверка вхождения
for elem in seq: # перебор элементов
Концепции языков
программирования
23
Последовательности
Immutable
str: 'Hello' или "Hello" или '''Hello'''
s.split(str), s.join(strseq), s.find(str), s.replace(sa, sb)
unicode: u'Hello' или u"Hello"
tuple: (23, 'Hello', 4.5, 1+2j) пустая ()
t.index(elem)
Mutable
bytearray: bytearray((25, 36))
list: [23, 'Hello', 4.5, 1+2j] range(4) range(5, 9)
l.append(elem), l.extend(list), l.insert(pos, elem)
l.remove(elem), l.pop(), l.pop(pos)
l.sort(), l.reverse()
Концепции языков
программирования
24
Форматированные строки
# Похоже на printf/fprintf/sprintf
# В отличие от C,
# контролирует типы аргументов
"hello %s" % w
# w --> %s
"%d + %d = %d" % (a, b, a+b)
"%6.3f" % x
# Вывод полей объекта name и type
"%s(name) %s(type)" % obj
Концепции языков
программирования
25
Словари и множества
Словарь diсt: { k1: v1, k2: v2, k3: v3 }
d[k1], d.get(k1, default), d.has_key(k1)
d.keys(), d.values(), d.items(), len(d)
d.pop_key(k1), d.update(d2)
Множество set: {k1, k2, k3}
итерируемо
in s, len(s)
s.add(elem), s.remove(elem)
union(s1, s2), intersection(s1, s2), difference(s1, s2)
>= > <= <
Ключи – immutable
Концепции языков
программирования
26
Файлы
Встроенный тип, обеспечивающий ввод-вывод
f=open(name, mode)
s=read(), s=read(num)
s=readline()
list=readlines()
for s in f:
write(s)
writelines(list)
close()
flush()
seek(pos), tell()
name, mode
#
#
#
#
#
#
#
#
#
#
#
Концепции языков
программирования
аналог fopen
чтение символов
чтение строки
чтение списка
перебор строк
запись строки
запись списка
закрытие
сброс буфера
навигация
атрибуты
27
Конструкции Python
if – elif – else # каскадный if
# switch отсутствует
while – else
# цикл с предусловием
# do-while отсутствует
for – in – else
# цикл for-each
# блок обработки исключений
try – except – else – finally
with – as
# короткие имена
def
# определение функции
class
# определение класса
Концепции языков
программирования
28
while – else
while condition: #
statements
if condition2:
break
#
if condition3:
continue #
statements
else:
#
statements
пока условие верно
выйти из while-else
следующая итерация
если условие неверно
Концепции языков
программирования
29
for – in – else
for elem in seq: #
statements
if condition2:
break
#
if condition3:
continue #
statements
else:
#
statements
пока условие верно
выйти из for-in-else
следующая итерация
если условие неверно
Концепции языков
программирования
30
Типовые заголовки for
for
for
for
for
for
i in
i in
i in
elem
k, v
range(10):
range(2,100):
range(3,101,2):
in list:
in dict.items():
# Пример для цикла for
Концепции языков
программирования
31
Функции
def sumfunc(arg1, arg2):
return arg1+arg2
# Примеры вызова
c=sumfunc(a, b)
x=sumfunc(arg2=2.6, arg1=1.3)
list=[a, b]
c=sumfunc(*list)
dict={"arg1": 2.6, "arg2": 1.3}
x=sumfunc(**dict)
Концепции языков
программирования
32
Пример (из dive into python)
def buildConnectionString(params):
"""Build a connection string
from a dictionary of parameters.
Returns string."""
return ";".join(["%s=%s" % (k, v) for k, v
in params.items()])
if __name__ == "__main__":
myParams = {"server":"mpilgrim", \
"database":"master", \
"uid":"sa", \
"pwd":"secret"}
print buildConnectionString(myParams)
Концепции языков
программирования
33
Лямбда-функции и ФП
f = lambda a, b: a+b
f(2.6, 1.3) # Вызов
# Применить к каждому элементу списка
list=map(lambda x: x**2, range(10))
# Оставить в списке элементы,
# удовлетворяющие условию
list=filter(lambda x: x%2, list)
# Свернуть список
n=reduce(lambda a, b: a+b, list)
Концепции языков
программирования
34
Генераторы списков
[expr for elem in list if cond]
# Новый список состоит из
# заданного выражения expr
# для каждого элемента elem
# из заданного списка list,
# для которого верно условие cond
# Пример генератора
Концепции языков
программирования
35
Генератор
последовательности
def simplegen(n):
for m in range(2, n):
for d in range(2, m):
if not m % d:
break
else:
yield m
if __name__ == "__main__":
for simp in simplegen(1000):
print simp
Концепции языков
программирования
36
Обработка исключений
try:
f = open("/notthere")
try: # Комбинировать все вместе можно в Python >= 2.5
g = open("/here")
except IOError as err:
print "No such file, %s" % err
else:
print "File is here"
close(g)
finally:
close(f)
except IOError:
print "The file does not exist, exiting"
Концепции языков
программирования
37
Формирование исключений
raise expr # сформировать исключение
raise expr, data # доп. данные
# AssertionError при неверном условии
assert cond, expr
Концепции языков
программирования
38
Классы Python
class Value:
"Очень полезный класс"
def __init__(self, val=0):
self.val=val
def get(self):
return self.val
if __name__ == "__main__":
v1 = Value()
v2 = Value(3)
print v1.get() + v2.val
Концепции языков
программирования
39
Наследование
class SqrValue(Value):
"Не менее полезный класс"
def __init__(self, val=0):
Value.__init__(self, val ** 2)
Концепции языков
программирования
40
Важные особенности
В нестатических функциях self всегда
должно быть первым аргументом
хотя не является ключевым словом
Нет определения полей (атрибутов)
все получившее значение через self.field считается
полями
Все поля и методы открыты
Явный вызов конструктора базового класса
Сборка мусора
Концепции языков
программирования
41
Специальные методы
Перегрузка операторов
__add__
__sub__
__mul__
__div__
Строковое представление __repr__
Сравнение __cmp__
Длина __len__
Доступ к атрибутам
__getitem__
__setitem__
Концепции языков
программирования
42
Пример fileinfo.py
Концепции языков
программирования
43
Далее
Особенности языка Python
интроспекция
пространства имен и области
видимости
стандартная библиотека
...
Концепции языков
программирования
44
Download