Лекция 12. Быстрее, Python, ещё быстрее.Roman Brovko
Измерение времени работы кода на Python с помощью модулей timeit, cProfile и line_profiler. Немного о NumPy. JIT и AOT компиляция кода на Python на примере Numba и Cython.
Лекция 8. Итераторы, генераторы и модуль itertools.Roman Brovko
Два протокола итераторов: __next__ + __iter__ и __getitem__. Итераторы и цикл for, а также операторы in и not in. Генераторы, оператор-выражение yield. Генераторы как: итераторы, сопрограммы, менеджеры контекста. Модуль itertools.
Синтаксис объявления классов. Атрибуты, связанные и несвязанные методы, __dict__, __slots__. Статические методы и методы класса. Свойства, декоратор @property. Наследование, перегрузка методов и функция super. Декораторы классов. Магические методы.
Модули threading, queue и concurrent.futures. Использование потоков для параллельных вычислений на Python. GIL. Параллельность и конкурентность. Модуль asyncio. Модуль multiprocessing.
Зачем тестировать? Тестирование в интерпретаторе и доктесты. Модуль unittest. Пакет py.test - на порядок лучше. Тестирование свойств и пакет hypothesis.
Модули threading, queue и concurrent.futures. Использование потоков для параллельных вычислений на Python. GIL. Параллельность и конкурентность. Модуль asyncio. Модуль multiprocessing.
Зачем тестировать? Тестирование в интерпретаторе и доктесты. Модуль unittest. Пакет py.test - на порядок лучше. Тестирование свойств и пакет hypothesis.
Developers want to make very few errors in their code and to spot them as early as possible: with the help of unit tests, or earlier, during compilation, or best of all, immediately after they typed something wrong in their IDE. This is what static code analyzers are for. Some of them are built-in, others need to be run separately, some check just about any code, the others require it to be annotated first, and there are tools that are a little bit of all. Do the ends justify the means? Is it even worth trying? What kind of errors can be spotted by static code analysis? How sure can we be if what an analyzer gives us is a real error or a false positive? This talk hopefully helps you answer these questions.
8 встреча Smolensk Computer Science Club
Презентация Владислава Ананьева про язык программирования Python
ВКонтакте: http://vk.com/scsc8
1. Библиотека классов Java
Класс Object
Класс Object – вершина
иерархии классов библиотеки Java
•
Object clone() – создает новый объект, являющийся копией
вызывающего
•
boolean equals(Object object) – определяет, является ли
один объект равным другому
•
int hashCode() – вычисляет хэш-код объекта
•
void finalize() – завершающие действия перед вызовом gc
•
String toString() – возвращает строку, содержащую описание
вызывающего объекта. Этот метод вызывается
автоматически, когда объект выводится методом print() или
println().
1
2. Библиотека классов Java
Переопределение equals() и
hashCode()
1. При переопределении метода equals() надо соблюдать
следующие правила (general contract):
- obj.equals(null) == false
- obj.equals(obj) == true
- если obj1.equals(obj2) == true, то obj2.equals(obj1) == true
- если ob1.equals(obj2) == true & ob2.equals(obj3) == true, то
obj1.equals(obj3) == true
2. Если класс переопределяет метод equals(), он должен также
переопределять hashCode()
2
3. Библиотека классов Java
Пример переопределения
equals() и hashCode()
public final class PhoneNumber {
private final short areaCode;
public int hashCode() {
int result = 17;
private final short exchange;
result = 31 * result + areaCode;
private final short extension;
result = 31 * result + prefix;
public boolean equals(Object o) {
result = 31 * result + lineNumber;
if (o==this) return true;
return result;
if (!(o instanceof PhoneNumber))
}
return false;
PhoneNumber pn = (PhoneNumber)o;
}
return pn.extensions == extension &&
pn.exchange == exchange &&
pn.areaCode == areaCode;
}
3
4. Библиотека классов Java
Метод finalize()
Метод finalize() не переопределять!!!
Причины:
1)Невозможно предсказать, когда он будет вызван
2)Внутри finalize() не обрабатываются исключения
3)Если в finalize() есть «медленный» код, то он будет
препятствовать своевременному освобождению
памяти сборщиком мусора -> OutOfMemory
4
5. Библиотека классов Java
Классы оболочки
Для чего необходимы оболочки:
1. Использование в методах, сигнатура которых требует объекта
2. Использование специальных констант, имеющихся в классахоболочках (MIN_VALUE, MAX_VALUE)
3. Использование специальных методов преобразования типов
(например, преобразование в строки и из строк)
5
6. Библиотека классов Java
Классы оболочки
Переход от простого типа к классу-оболочке
(boxing) и обратный переход (unboxing) часто
выполняется компилятором автоматически
Integer x, y;
Integer x, y;
x = new Integer(12);
y = new Integer(15);
x = 12;
auto-boxing y = 15;
System.out.println(
System.out.println(x+y);
auto-unboxing
x.intValue()+y.intValue());
6
7. Библиотека классов Java
Классы оболочки
byte byteValue()
short shortValue()
int intValue()
long longValue()
float floatValue()
double doubleValue()
int compareTo(Byte anotherByte)
int compareTo(Double anotherDouble)
int compareTo(Float anotherFloat)
int compareTo(Integer anotherInteger)
int compareTo(Long anotherLong)
int compareTo(Short anotherShort)
7
8. Библиотека классов Java
Классы оболочки
Метод
Описание
static Integer decode(String s)
String –> Integer (может принимать
строковое представление в 10-й, 8-й,
16-й системах счисления)
static int parseInt(String s)
String -> int (только десятичный)
static int parseInt(String s, int radix)
String -> int (radix = 2, 8, 10, 16)
String toString()
Integer -> String
static String toString(int i)
int -> String
static Integer valueOf(int i)
int -> Integer
static Integer valueOf(String s)
String -> Integer
static Integer valueOf(String s, int
radix)
String -> Integer (radix = 2, 8, 10, 16)
8
9. Библиотека классов Java
Класс Math
Класс Math содержит 2 статические константы:
Math.E, Math.PI
и статические методы для выполнения
математических функций (sin, cos, max, min,
ceil, floor, exp, log, pow и др.)
double x = 11.635;
System.out.println("The value of e is” + Math.E);
System.out.println("exp” + x + “is” + Math.exp(x));
System.out.println("log” + x + “is” + Math.log(x));
9
10. Библиотека классов Java
Класс Math
При необходимости можно импортировать
статические константы и методы с помощью
директивы import static
import static java.lang.Math.*;
double x = 11.635;
System.out.println("The value of e is” + E);
System.out.println("exp” + x + “is” + exp(x));
System.out.println("log” + x + “is” + log(x));
10
12. Библиотека классов Java
Класс String
Два способа создания объекта String:
1) String greeting = "Hello world!";
2) char[ ] helloArray = { ‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ‘ ’, ‘w’, ‘o’, ‘r’, ‘l’, ‘d’,’!’ };
String greeting = new String(helloArray);
System.out.println(greeting);
Внимание! Класс String работает с неизменяемыми строками
12
13. Библиотека классов Java
Класс String
Конструкторы класса String
String()
String(String source)
String(StringBuffer buffer)
String(char charArray[ ])
String(char charArray[ ], int offset, int count)
String(byte byteArray[ ])
String(byte byteArray[ ], int offset, int count)
String(byte byteArray[ ], String enc)
String(byte byteArray[ ], int offset, int count, String enc)
13
14. Библиотека классов Java
Класс String
Длина строки:
String s = "Dot saw I was Tod";
int len = s.length();
Конкатенация:
String s3 = s1 + s2;
String s3 = s1.concat(s2);
“2” + 2 + 2 = 222
2 + 2 + “2” = 42
“2” + (2 + 2) = 24
14
15. Библиотека классов Java
Класс String
Форматированный вывод:
public PrintStream format(String format, Object... args)
public PrintStream format(Locale l, String format,
Object... args)
public PrintStream printf(String format, Object... args)
public PrintStream printf(Locale l, String format, Object...
args)
System.out.printf("The value of the float variable is %f, while the
value of the " + “integer variable is %d, and the string is %s",
floatVar, intVar, stringVar);
15
16. Библиотека классов Java
Класс String
Метод
Описание
char charAt(int index)
Возвращает символ строки с индексом index.
void getChars(int srcBegin,
int srcEnd, char[ ] dest, int
destBegin)
Включает в массив символов dest[ ], начиная с
индекса dstBegin, часть строки от индекса srcBegin
вкл. до индекса srcEnd искл.
byte[ ] getBytes()
Содержимое строки записывается в массив
байтов.
char[ ] toCharArray()
Преобразует строку в массив символов типа char.
boolean equals
(Object obj)
boolean equalsIgnoreCase
(String s)
Возвращают true, если аргумент obj не равен null,
является объектом класса String, и строка,
содержащаяся в нем, полностью идентична данной
строке с учетом (без учета) регистра символов.
16
17. Библиотека классов Java
Класс String
Метод
Описание
int compareTo (String str)
int compareToIgnoreCase
(String str)
Возвращают целое число типа int, вычисленное по
следующим правилам:
1. Сравниваются символы данной строки и строки
str с одинаковыми индексами, пока не встретятся
различные символы (с учетом регистра) или одна
из строк не закончится.
2. Пусть разные символы встретились в позиции k.
Тогда метод возвращает значение
this.charAt(k)-str.charAt(k)
3. Пусть символы в строках были одинаковыми,
пока не за-кончилась одна из строк. Тогда метод
вернет значение: this.length()-str.length()
4. Если строки совпадают, метод вернет 0.
17
18. Библиотека классов Java
Класс String
Метод
Описание
boolean regionMatches (int
toffset, String other, int ooffset,
int len)
Сравнивает подстроку данной строки с
подстрокой той же длины len строки, заданной
аргументом str. Сравнение начинается с
позиции toffset данной строки и c позиции
ooffset строки, заданной аргументом str. Метод
возвращает false, если в сравниваемых
участках строк встретилась хотя бы одна пара
несовпадающих (с учетом регистра) символов.
boolean startsWith (String str)
boolean startsWith (String str,
int toffset)
Возвращает true, если данная строка
начинается с подстроки str (начиная с позиции
toffset)
boolean endsWith (String
suffix)
Возвращает true, если данная строка
заканчивается подстрокой str
18
19. Библиотека классов Java
Класс String
Метод
Описание
String substring (int
beginIndex, int endIndex)
Возвращает подстроку данной строки, начиная
с индекса beginIndex до индекса endIndex.
String replace (char oldChar,
char newChar)
Заменяет в данной строке все вхождения
символа oldChar символом newChar
String toUpperCase()
Преобразует все символы строки к верхнему
регистру.
String toLowerCase()
Преобразует все символы строки к нижнему
регистру.
String trim()
Удаляет пробельные символы в начале и конце
строки
static String valueOf (<type> b)
Преобразует аргумент в его строковое
представление.
19
20. Библиотека классов Java
Класс StringBuffer
StringBuffer – это строковый буфер переменной длины.
Создать объект класса StringBuffer можно только с помощью
конструкторов:
StringBuffer() - пустой строковый буфер с емкостью 16
символов.
StringBuffer(int length) - пустой строковой буфер с емкостью
length
StringBuffer(String str) - строковый буфер емкостью str.length()
+16, содержащий строку str.
Если строковый буфер начинает переполняться, его емкость
автоматически увеличивается.
20
21. Библиотека классов Java
Класс StringBuffer
Увеличение емкости буфера:
ensureCapacity(int minCapacity)
Установка емкости буфера:
setLength(int newLength)
Длина строки в буфере:
length()
Емкость буфера:
capacity()
21
22. Библиотека классов Java
Класс StringBuffer
Метод
Описание
append (<type> elem)
Добавление аргумента к буферу
append (String str)
Добавление строки к буферу
append (Object obj)
Добавление объекта к буферу
(выполняется метод toString() )
insert (int ind, <type>
elem)
Вставка элемента в буфер в позицию
ind
insert (int ind, String str)
Вставка строки в буфер в позицию ind
insert (int ind, Object obj)
Вставка объекта в буфер в позицию
ind
22
23. Библиотека классов Java
Класс StringBuffer
Метод
Описание
delete(int begin, int end)
Удаление подстроки
deleteCharAt(int ind)
Удаление символа
replace(int begin, int end,
String str)
Замена подстроки
reverse()
Обращение строки
23
24. Библиотека классов Java
Класс StringTokenizer
Выполняет синтаксический разбор (парсинг)
строки.
Конструкторы:
StringTokenizer(String str)
StringTokenizer(String str, String delim)
Методы:
String nextToken()
boolean hasMoreTokens()
int countTokens()
24
25. Библиотека классов Java
Класс StringTokenizer
String s = “Строка, предназначенная для разбора”;
StringTokenizer st = new StringTokenizer(s,” tnr,.”);
while (st.hasMoreTokens())
{
System.out.println(st.nextToken());
}
25
26. Библиотека классов Java
Класс Runtime
Класс Runtime инкапсулирует JVM.
Метод
Описание
static Runtime getRuntime()
получить ссылку на текущий Runtime-объект
Process exec(String progname)
Передает строку progname командному
процессору. Возвращает объект типа
Process.
void exit(int exitCode)
Останавливает выполнение JVM.
Возвращает код завершения родительскому
процессу (0 – нормальное завершение).
long freeMemory()
Возвращает приблизительное количество
свободной памяти (в байтах), доступное
JVM.
void gc()
Инициирует процесс сборки мусора
long totalMemory()
Возвращает общее количество памяти (в
байтах), доступное JVM.
26
27. Библиотека классов Java
Класс Runtime
class MemoryDemo
{public static void main(String args[ ])
{Runtime r = Runtime.getRuntime();
long mem1, mem2;
System.out.println(“Полный объем памяти: “ + r.totalMemory());
System.out.println(“Свободная память: “ + r.freeMemory());
{
Integer massiv[ ] = new Integer[1000];
System.out.println(“Свободная память: “ + r.freeMemory());
}
r.gc();
System.out.println(“Свободная память после gc:” + r.freeMemory());
27
28. Библиотека классов Java
Класс Process
Класс Process инкапсулирует процесс.
void destroy()
Завершает процесс.
int waitFor()
Приостанавливает выполнение текущего
потока до завершения вызывающего процесса
28
29. Библиотека классов Java
Класс Process
class ExecDemo
{public static void main(String args[ ])
{Runtime r = Runtime.getRuntime();
Process p = null;
try
{p = r.ехес("notepad"); p.waitFor () ; }
catch (Exception e)
{System.out.println("Ошибка выполнения notepad.");}
System.out.println("Notepad завершился " + p.exitValue());
}
}
29
30. Библиотека классов Java
Класс System
Класс System выполняет функции, аналогичные
классу Runtime, т.е. взаимодействие с системой в
ходе выполнения программы. В этом классе
продублировано большинство методов класса
Runtime (loadLibrary(), exit(), gc()) но, в отличие от
Runtime, в классе System эти методы являются
статическими.
30
31. Библиотека классов Java
Класс System
Для любой среды Java 2 доступны переменные
среды, приведенные в табл. Часть из этих
переменных в целях безопасности доступны
только для приложений (не для апплетов).
Чтобы получать значения переменных среды либо
изменять их, в классе System существуют методы
String getProperty(String variable)
String setProperty(String variable, String value)
31
32. Библиотека классов Java
Класс System
Имя
java.version
java.vendor
java.vendor.url
java.class.version
java.class.path
java.home
Значение
Доступ для апплета
да
да
да
да
нет
нет
Версия интерпретатора Java
Строка идентификатора, заданная разработчиком
URL разработчика
Версия Java API
Значение переменной CLASSPATH
Каталог, в котором инсталлирована среда Java
java.compiler
os.name
os.arch
os.version
file.separator
path.separator
line.separator
user.name
user.home
user.dir
user.language
user.region
user.timezone
Компилятор JIT
Название операционной системы
Архитектура компьютера, на котором выполняется программа
Версия операционной системы Web-узла
Зависящие от платформы разделители файлов (/ или )
Зависящие от платформы разделители пути (: или ;)
Зависящие от платформы разделители строк (n или rn)
Имя текущего пользователя
Домашний каталог пользователя
Текущий рабочий каталог
2-символьный код языка для местности по умолчанию
2-символьный код страны для местности по умолчанию
Временной пояс по умолчанию
нет
да
да
да
да
да
да
нет
нет
нет
нет
нет
нет
user.encoding
user.encoding.pkg
Кодировка сиволов для местности по умолчанию
Пакет, содержащий конверторы для преобразования символов
из местной кодировки в Unicode
нет
нет
32
33. Библиотека классов Java
Класс System
//отображаем путь к текущему каталогу пользователя
System.out.println(System.getProperty(“user.dir”));
//устанавливаем текущим каталогом пользователя c:java
System.setProperty(“user.dir”,”c:java”);
33