Встроенные функции Python для ввода и вывода (print, input)

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)

Печатает объекты в текстовый поток.

Именованный параметр sep задаёт разделитель между элементами. Если параметр не установлен или равен None используется пробел.

Именованный параметр end задаёт текст печатаемый к конце. Если параметр не установлен или равен None используется перевод строки.

Все не именованные аргументы преобразуются в строки функцией str():

print() без аргументов печатает end — перевод строки.

Аргумент file должен быть объектом с методом write(string). Если аргумент не задан или равен None то используется sys.stdout.

Обычно выходной поток, указанный в file, буферизуется. Если аргумент flush установлен в True, то после каждой записи данные записываются принудительно.

input([prompt])

Если задан аргумент prompt, он будет выведен в стандартный поток вывода без перевода на новую строку. Затем функция читает строку из входного потока, преобразовывает её в строку, удаляет завершающий перевод строки и возвращает результат. Если достигнут конц потока (EOF) выбрасывается исключение EOFError.

Ссылки

Встроенные функции Python для работы с коллекциями (sorted, filter, zip, reversed, len)

sorted()

Возвращает новый сортированный список (list) из элементов iterable.

Порядок элементов изменяется аргументом key. Переданная в key функция применяется к каждому элементу. Результат функции используется для определения порядка элементов:

Логический аргумент reverse задаёт обратную сортировку:

Читать далее Встроенные функции Python для работы с коллекциями (sorted, filter, zip, reversed, len)

Встроенные функции Python для работы с коллекциями (min, max, sum, all, any, enumerate)

max

  • max(iterable, *[, key, default])
  • max(arg1, arg2, *args[, key])

Функция возвращает максимальный элемент. Две версии функции отличаются аргументами: с итерируемым объектом и со списком аргументов.

Если коллекция пустая возникнет исключение

Именованный аргумент default используется чтобы избежать исключения. Функция max возвращает default только если коллекция пустая:

Порядок элементов изменяется аргументом key. Переданная в key функция применяется к каждому элементу. Результат функции используется для определения порядка элементов:

Читать далее Встроенные функции Python для работы с коллекциями (min, max, sum, all, any, enumerate)

Встроенные математические функции Python

Стандартные функции доступные без подключения модулей.

abs(x)

Возвращает модуль числа. Аргумент x может быть целым (int) или вещественным (float) числом.

Для комплексных чисел возвращает длину вектора изображающего комплексное число:

Если x определяет метод __abs__(), то abs(x) вернёт x.__abs__().

pow(base, exp[, mod])

Возвращает base в степени exp:

Допустима отрицательная и вещественная степень:

Если указан третий аргумент mod, функция вернёт остаток по модулю:

Читать далее Встроенные математические функции Python

Python. Наследование

Перевод параграфа 6.4 Inheritance из книги Intermediate Python.

Наследование — это механизм создания новых классов. Наследники специализируют или изменяют базовые классы добавляя в них новую функциональность. Python поддерживает множественное наследование как C++. Пример одиночного наследования в Python:

Читать далее Python. Наследование

Python. Абстрактные базовые классы

Перевод параграфа 6.7 Abstract Base Classes из книги Intermediate Python.

Чтобы классы реализовывали заданный набор методов в статически типизированных языках, таких как Java, используются интерфейсы и абстрактные классы.

Простая реализация такого контракта в Python — добавить в базовый класс методы по умолчанию, выбрасывающие исключение NotImplementedError. Такое решение неполное: наследники могут не переопределить все методы базового класса, а проблема обнаружится только во время выполнения программы.

Рассмотрим другую ситуацию — использование одного объекта для замещения другого. Заместитель перехватывает все вызовы и передаёт их в скрываемый объект. Заместитель реализует все нужные методы, но проверку типа через isinstance он не проходит, так как имеет тип отличный от замещаемого объекта.

В Python такие задачи решаются через абстрактные базовые классы, реализуемые модулем abc. Этот модуль определяет мета-класс и набор декораторов. Для определения абстрактного базового класса мы устанавливаем ABCMeta как мета-класс абстрактного класса и помечаем декораторами @abstractmethod и @abstractproperty методы и свойства которые должны быть реализованы в неабстрактных потомках.

Читать далее Python. Абстрактные базовые классы

Python. Статические и классовые методы

Перевод параграфа 6.5 Static and Class Methods из книги Intermediate Python.

По умолчанию методы определённые в классе работают с экземплярами класса. Для определения статических и классовых методов применяются декораторы @staticmethod и @classmethod.

Статичные методы

Статичные методы это обычные функции внутри пространства имён класса. Ссылка на статичный метод из класса возвращает функцию вместо несвязанного метода:

Декоратор @staticmethod используется для определения статического метода. Такой метод не требует аргумента self.

Читать далее Python. Статические и классовые методы

Triangle Quest

Разберём две математические задачи с Hackerrank: Triangle Quest и Triangle Quest 2.

Дано число от 1 до 9 и нужно вывести треугольники из чисел заданного вида. Для числа 4 в первой задаче:

а во второй:

Для вывода допустимо использовать только один цикл, процедуру print и математические операции:

Читать далее Triangle Quest

Сходство информационного стиля и программного кода

Правила информационного стиля из книги Пиши-сокращай похожи на принципы написания хорошего кода. Источник сходства в единой основе кода, статей и книг — в тексте предназначенном в первую очередь для чтения.

Стоп-слова

Тексты в информационном стиле не содержат лишних слов. Редактор целенаправленно ищет и удаляет лишние слова и конструкции.

Существуют конструкции нежелательные на любом языке программирования, такие как сравнение с логической переменной и присвоение True и False:

Опытный разработчик заменяет такую конструкцию одной строкой:

Структура

Писатель делит текст на абзацы. Абзацы структурируют текст. Структурированный текст проще читать.

Разработчики разделяют команды на логические блоки пустыми строками:

Для выделения уровня вложенности используют отступы:

Модуль

Писатель делит статью на части. Каждая часть обозначается информативным заголовком. Каждая часть описывает отдельную тему, законченную сложную мысль. Внутри части абзацы связаны друг с другом, но снаружи отдельная часть не имеет жёстких связей с другими частями. Части можно перемещать относительно друг друга, а в некоторых случаях даже вырезать в другие статьи.

Разработчик делит программу на функции и модули. Функциям и модулям даются информативные названия. Функции и модули имеют определённое назначение. Модули имеют высокую связность внутри и низкую снаружи — с другими модулями. Как модули так и функции подразумевают возможность повторного использования.

Oracle. Как не нужно генерировать первичный ключ

Идея поста возникал при прочтении Получение в программе значения первичного ключа после INSERT.

В Oracle младше 12 версии нет автоинкрементного поля. Стандратный способ генерации первичных ключей — последовательности. Но иногда разработчики генерируют первичный ключ таким способом:

Это приводит к проблемам при многопользовательской работе. Типичная ситуация — пользователи одновременно получают новое значение для ПК, а потом вставляют записи:

Пользователь1Пользователь2
select max(rid) + 1 from table
select max(rid) + 1 from table
insert
insert

В результате второй пользователь зависает из-за блокировки. Если же первый пользователь зафиксирует данные, то у второго сработает ограничение по первичному ключу:

Пользователь1Пользователь2
select max(rid) + 1 from table
select max(rid) + 1 from table
insert
insert
commit
ORA-00001: нарушено ограничение уникальности

Для генерации ПК следует использовать последовательности или специальные механизмы вроде GUID. Иначе будут возникать ошибки.