Часть 2. более сложные темы

Collection Types¶

The module defines several abstract base classes
related to container (and containable) types.

General container classes:

  • Container
  • Sized

Iterator and Sequence classes:

  • Iterable
  • Iterator
  • Sequence
  • MutableSequence

Unique values:

  • Hashable
  • Set
  • MutableSet

Mappings:

  • Mapping
  • MutableMapping
  • MappingView
  • KeysView
  • ItemsView
  • ValuesView

Miscelaneous:

Callable

In addition to serving as detailed real-world examples of abstract
base classes, Python’s built-in types are automatically registered to
these classes when you import . This means you can
safely use isinstance() to check parameters in your code to ensure
that they support the API you need. The base classes can also be used
to define your own collection types, since many of them provide
concrete implementations of the internals and only need a few methods
overridden. Refer to the standard library docs for collections for
more details.

See also

abc
The standard library documentation for this module.
PEP 3119
Introducing Abstract Base Classes
The collections module includes abstract base classes for several collection types.
collections
The standard library documentation for collections.
PEP 3141
A Type Hierarchy for Numbers
Wikipedia: Strategy Pattern
Description and examples of the strategy pattern.
Plugins and monkeypatching
PyCon 2009 presentation by Dr. André Roberge

Понятие оператора

Чтобы без труда найти в Python остаток от деления, нужно разобраться с некоторыми определениями. Оператор – знак или строка, позволяющие произвести математическое, побитовое, логическое и другое вычисление. Выражения или числа, вводимые пользователем, чтобы найти в Python 3 остаток от деления, тождественность сочетания или сравнения, называются операндами.

Разделяют следующие виды операторов:

  • арифметические;
  • побитовые;
  • логические;
  • операторы присваивания;
  • сравнения;
  • членства;
  • тождественности.

Проще говоря, в примере «15 – 5» оператором является знак «–», операндами – 15 и 5. Это арифметическая операция с целыми числами. Если взять к рассмотрению выражение «True and True», то оператором здесь выступает «and», а операндами – «True» и «True». Этот пример можно отнести к логическому типу.

Вещественные числа (float)

Вещественные числа поддерживают те же операции, что и целые. Однако (из-за представления чисел в компьютере) вещественные числа неточны, и это может привести к ошибкам:

Для высокой точности используют другие объекты (например Decimal и Fraction)).

Также вещественные числа не поддерживают длинную арифметику:

Простенькие примеры работы с числами:

Дополнительные методы

float.as_integer_ratio() – пара целых чисел, чьё отношение равно этому числу.

float.is_integer() – является ли значение целым числом.

float.hex() – переводит float в hex (шестнадцатеричную систему счисления).

classmethod float.fromhex(s) – float из шестнадцатеричной строки.

Помимо стандартных выражений для работы с числами (а в Python их не так уж и много), в составе Python есть несколько полезных модулей.

Модуль math предоставляет более сложные математические функции.

Модуль random реализует генератор случайных чисел и функции случайного выбора.

Модуль: Вещественные числа

Вещественные числа

В языке Python можно определить тип переменной. Для этого используется встроенная функция :

name = "Ivan"
print(type(name))  #на экране будет <class 'str'>
n = 5
print(type(n))  # <class 'int'>
r = 5.0
print(type(r))  # <class 'float'>

Значение 5.0 — число, представленное в виде десятичной дроби (имеет целую и дробную часть). В информатике такие числа называются вещественнымиВещественное число — это число, в котором есть целая и дробная части. Целая и дробная части отделяются друг от друга точкой, а не запятой как в математике.
Даже если дробная часть числа равна нулю, как в переменной r в примере, все равно транслятор создаст в памяти вещественную переменную. Точка, как бы сигнал для транслятора, что необходимо создать именно вещественную переменную. 
Очень большие и очень маленькие числа  записываются с помощью «плавающей точки» (в так называемом научном формате).  
В научном формате число представляется в виде мантиссы (значащей части числа) и порядка. При записи мантисса и порядок отделяются друг от друга буквой e (обозначает 10 в какой-то степени). 
Например, можно сохранить в переменной значение заряда электрона ( \(1,60217662 \times 10^{-19}\) Кл), записав в следующем виде

El = 1.60217662e-19 #для положительного порядка знак + можно не записывать

Практически все вещественные числа не могут храниться в памяти компьютера с идеальной точностью, так как под их хранение выделяется ограниченное число бит. Поэтому при вычислениях с вещественными числами ошибки, связанные с неточностью представления, накапливаются. Причем чем меньше места выделено, тем больше будет эта ошибка.

Ввод

Для того, чтобы ввести вещественное число с помощью функции — необходимо преобразовать символьную строку (которая является результатом работы функции \(input()\)) в вещественное число с помощью функции \(float()\):

x = float(input())

Если необходимо ввести сразу несколько значений из одной строке, то используем тот же способ, что и для целых чисел:

x, y = map(float, input().split())

Вывод

При выводе вещественных чисел, по умолчанию выводится 16 знаков после запятой. Не всегда такой формат необходим. Если нужно сократить формат вывода, то используется форматный вывод. Для этого применяется метод к строке, которую мы хотим вывести. А внутри строки записываются форматы в фигурных скобках после двоеточия
Пример:

x=1/6
print("{:f}".format(x))  #формат f выводит по умолчанию 6 цифр в дробной части
print("{:.3f}".format(x)) # .3 обозначает, что необходимо вывести 3 знака после точки
print("{:12.4e}".format(x)) #12.4 - первое число (12) задает общее количество позиций на вывод числа, второе (4) - количество цифр в дробной части. Формат e - выводит число в научном формате

На экране выведется

0.166667
0.167
  1.6667e-01

Операции с вещественными числами. Модуль math

При работе с вещественными числами можно использовать уже знакомый нам модуль , который содержит большое число встроенных функций. 
При решении задач часто приходится округлять вещественные числа до ближайших целых значений. Для этого имеются две функции.ЗАПОМИНАЕМ
1 функция — отбрасывает дробную часть вещественного числа x2 функция — округляет вещественное число x до ближайшего целого (если дробная часть числа равна 0.5, то число округляется до ближайшего четного числа)
Приведем наиболее полезные функции, содержащиеся в модуле .

Функция Описание
Округление
Округляет число в сторону нуля. Это стандартная функция, для ее использования не нужно подключать модуль .
Округляет число до ближайшего целого. Если дробная часть числа равна 0.5, то число округляется до ближайшего четного числа.
Округляет число  до  знаков после точки. Это стандартная функция, для ее использования не нужно подключать модуль .
Округляет число вниз («пол»), при этом , 
Округляет число вверх («потолок»), при этом , 
Модуль (абсолютная величина). Это — стандартная функция.
Корни, логарифмы
Квадратный корень. Использование: .
Например, строка 
выведет 2.0
Натуральный логарифм. При вызове в виде  возвращает логарифм по основанию .
Основание натуральных логарифмов e = 2,71828…
Тригонометрия
Синус угла, задаваемого в радианах
Косинус угла, задаваемого в радианах
Тангенс угла, задаваемого в радианах
Арксинус, возвращает значение в радианах
Арккосинус, возвращает значение в радианах
Арктангенс, возвращает значение в радианах
Полярный угол (в радианах) точки с координатами (x, y).
Преобразует угол, заданный в радианах, в градусы.
Преобразует угол, заданный в градусах, в радианы.
Константа π = 3.1415…

Целые числа (int)

Числа в Python 3 ничем не отличаются от обычных чисел. Они поддерживают набор самых обычных математических операций:

x + y Сложение
x – y Вычитание
x * y Умножение
x / y Деление
x // y Получение целой части от деления
x % y Остаток от деления
-x Смена знака числа
abs(x) Модуль числа
divmod(x, y) Пара (x // y, x % y)
x ** y Возведение в степень
pow(x, y) x y по модулю (если модуль задан)

Также нужно отметить, что целые числа в python 3, в отличие от многих других языков, поддерживают длинную арифметику (однако, это требует больше памяти).

Битовые операции

Над целыми числами также можно производить битовые операции

x | y Побитовое или
x ^ y Побитовое исключающее или
x & y Побитовое и
x > y Битовый сдвиг вправо

x

Инверсия битов

Дополнительные методы

int.bit_length() – количество бит, необходимых для представления числа в двоичном виде, без учёта знака и лидирующих нулей.

int.to_bytes(length, byteorder, *, signed=False) – возвращает строку байтов, представляющих это число.

Системы счисления

Те, у кого в школе была информатика, знают, что числа могут быть представлены не только в десятичной системе счисления. К примеру, в компьютере используется двоичный код, и, к примеру, число 19 в двоичной системе счисления будет выглядеть как 10011. Также иногда нужно переводить числа из одной системы счисления в другую. Python для этого предоставляет несколько функций:

  • int(, ) – преобразование к целому числу в десятичной системе счисления. По умолчанию система счисления десятичная, но можно задать любое основание от 2 до 36 включительно.
  • bin(x) – преобразование целого числа в двоичную строку.
  • hex(х) – преобразование целого числа в шестнадцатеричную строку.
  • oct(х) – преобразование целого числа в восьмеричную строку.

Restricting the Use of Available Methods and Variables in eval()

More often than not, all the available methods and variables used in the expression (first parameter to ) may not be needed, or even may have a security hole. You may need to restrict the use of these methods and variables for . You can do so by passing optional globals and locals parameters (dictionaries) to the function.

1. When both globals and locals parameters omitted

If both parameters are omitted (as in our earlier examples), the expression is executed in the current scope. You can check the available variables and methods using following code:

2. Passing globals parameter; locals parameter is omitted

The globals and locals parameters (dictionaries) are used for global and local variables respectively. If the locals dictionary is omitted, it defaults to globals dictionary. Meaning, globals will be used for both global and local variables.

Note: You can check the current global and local dictionary in Python using globals() and locals() built-in methods respectively.

Example 3: Passing empty dictionary as globals parameter

Output


Traceback (most recent call last):
  File "<string>", line 5, in <module>
    print(eval('sqrt(25)', {}))
  File "<string>", line 1, in <module>
NameError: name 'sqrt' is not defined

If you pass an empty dictionary as globals, only the are available to (first parameter to the ).

Even though we have imported the module in the above program, expression can’t access any functions provided by the math module.

Example 4: Making Certain Methods available

Output

Here, the expression can only use the and the methods along with .

It is also possible to change the name of the method available for the expression as to your wish:

Output


3.0

In the above program, calculates the square root using . However, trying to use directly will raise an error.

3. Passing both globals and locals dictionary

You can make needed functions and variables available for use by passing the locals dictionary. For example:

Output

13.0

In this program, expression can have method and variable a only. All other methods and variables are unavailable.

Restricting the use of by passing globals and locals dictionaries will make your code secure particularly when you are using input provided by the user to the method.

Note: Sometimes, is not secure even with limited names. When an object and its methods are made accessible, almost anything can be done. The only secure way is by validating the user input.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *