Возможности python 3, достойные того, чтобы ими пользовались

Многострочные строки документации в Python

Многострочные строки документации состоят из резюмирующей однострочной строки документации, за которой следует пустая строка, а затем более подробное описание.

Документ PEP 257 предоставляет стандартные соглашения для написания многострочных строк документации для различных объектов.

Некоторые из них перечислены ниже:

1. Строки документации для модулей Python

  • Строки документации для модулей Python должны содержать список всех доступных классов, функций, объектов и исключений, которые импортируются при импорте модуля.
  • Они также должны содержать краткое пояснение (в одну строку) для каждого элемента из этого списка.

Строки документации пишутся в начале файла Python.

Давайте посмотрим на строки документации для встроенного модуля .

Пример 4: строки документации модуля Python.

import pickle
print(pickle.__doc__)

Результат:

Мы убедились, что строка документации, записанная в начале файла модуля pickle.py, может быть получена при помощи атрибута .

2. Строки документации для функций Python

  • Строки документации для функции или метода должны обобщать их поведение и документировать их аргументы и возвращаемые значения.
  • Следует также перечислить все исключения, которые могут быть возбуждены методом/функцией и другие необязательные аргументы.

Пример 5: строки документации для функций Python.

def add_binary(a, b):
    '''
    Возвращает сумму двух десятичных чисел в двоичном формате.

            Параметры:
                    a (int): первое десятичное целое число
                    b (int): второе десятичное целое число

            Возвращаемое значение:
                    binary_sum (str): двоичная строка суммы a и b
    '''
    binary_sum = bin(a+b)
    return binary_sum


print(add_binary.__doc__)

Результат:

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

3. Строки документации для классов Python

  • Строки документации для класса должны обобщать его поведение и перечислять открытые (public) методы и переменные экземпляра.
  • Подклассы, конструкторы и методы должны иметь свои собственные строки документации.

Пример 6: строки документации для класса Python.

Предположим, у нас есть файл Person.py со следующим кодом:

class Person:
    """
    Класс для представления человека.

    ...

    Атрибуты
    --------
    name : str
        имя человека
    surname : str
        фамилия человека
    age : int
        возраст человека

    Методы
    ------
    info(additional=""):
        Печатает имя и возраст человека.
    """

    def __init__(self, name, surname, age):
        """
        Устанавливает все необходимые атрибуты для объекта person.

        Параметры
        ---------
        name : str
                имя человека
        surname : str
                фамилия человека
        age : int
                возраст человека
        """

        self.name = name
        self.surname = surname
        self.age = age

    def info(self, additional=""):
        """
        Печатает имя и возраст человека.

        Если аргумент 'additional' передан, то он добавляется после основной информации.

        Параметры
        ---------
        additional : str, optional
            Дополнительная информация для отображения (по умолчанию None)

        Возвращаемое значение
        ---------------------
        None
        """

        print(f'My name is {self.name} {self.surname}. I am {self.age} years old.' + additional)

Мы можем использовать следующий код для доступа только к строкам документации класса :

print(Person.__doc__)

Результат:

Использование функции help() для строк документации

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

Пример 7: чтение строк документации с помощью функции help().

Мы можем использовать функцию  для класса Person из Примера 6:

help(Person)

Результат:

Здесь мы видим, что функция  получает строки документации класса Person вместе с методами, связанными с этим классом.

4. Строки документации для скриптов Python

  • Строки документации для скрипта Python должны документировать функции скрипта и синтаксис командной строки, переменные среды и файлы.
  • Строки документации скрипта должны использоваться в качестве «сообщения по использованию», которое выводится, когда скрипт вызывается с некорректными или отсутствующими аргументами (или, возможно, с опцией «-h», для «help»).
  • Они должны служить краткой ссылкой на все функции и аргументы.

5. Строки документации для пакетов Python

Строки документации для пакета Python записываются в файл  __init__.py пакета. Они должны содержать все доступные модули и подпакеты, экспортируемые пакетом.

Python Indentation

Indentation refers to the spaces at the beginning of a code line.

Where in other programming languages the indentation in code is for readability
only, the indentation in Python is very important.

Python uses indentation to indicate a block of code.

if 5 > 2: 
print(«Five is greater than two!»)

Python will give you an error if you skip the indentation:

Syntax Error:

if 5 > 2:
print(«Five is greater than two!»)

The number of spaces is up to you as a programmer, but it has
to be at least one.

if 5 > 2: print(«Five is greater than two!») 
if 5 > 2:        print(«Five is greater than two!») 

You have to use the same number of spaces in the same block of code,
otherwise Python will give you an error:

Интерактивный учебник языка Python

1. Целочисленная арифметика

Для целых чисел определены операции
, , и . Операция
деления для целых чисел возвращает вещественное число (значение типа ).
Также функция возведения в степень возвращает значение типа ,
если показатель степени — отрицательное число.

Но есть и специальная операция целочисленного деления, выполняющегося с отбрасыванием
дробной части, которая обозначается (она соответствует операции в Паскале).
Она возвращает целое число: целую часть частного. Другая близкая ей операция − это операция взятия остатка от деления,
обозначаемая (она соответствует операции в Паскале).
Например:

print(17 / 3)   # выведет 5.66666666667
print(17 // 3)  # выведет 5
print(17 % 3)   # выведет 2

2. Действительные числа

В этом разделе речь пойдет о действительных числах, имеющих тип .

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

1.492
x = float(input())
print(x)

Действительные (вещественные) числа представляются в виде чисел с десятичной точкой (а не запятой, как принято
при записи десятичных дробей в русских текстах). Для записи очень больших или очень маленьких
по модулю чисел используется так называемая запись «с плавающей точкой»
(также называемая «научная» запись). В этом случае число представляется в виде
некоторой десятичной дроби, называемой мантиссой, умноженной на целочисленную степень десяти
(порядок). Например, расстояние от Земли
до Солнца равно 1.496·1011, а масса молекулы воды 2.99·10-23.

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

Напомним, что результатом операции деления всегда является действительное число (),
в то время как результатом операции является целое число ().

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

3. Библиотека math

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

Для использования этих функций в начале программы необходимо подключить математическую
библиотеку, что делается командой

import math

Например, пусть мы хотим округлять вещественные числа до ближайшего целого числа вверх.
Соответствующая функция от одного аргумента вызывается, например, так:
(то есть явно указывается, что из модуля используется функция ).
Вместо числа может быть любое число, переменная или выражение.
Функция возращает значение, которое можно вывести на экран, присвоить
другой переменной или использовать в выражении:

import math

x = math.ceil(4.2)
y = math.ceil(4.8)
print(x)
print(y)

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

from math import ceil
 
x = 7 / 2
y = ceil(x)
print(y)
from math import *
 
x = 7 / 2
y = ceil(x)
print(y)

Ниже приведен список основных функций модуля . Более подробное описание
этих функций можно найти на сайте с документацией языка Питон.

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

Функция Описание
Округление
Округляет число в сторону нуля. Это стандартная функция, для ее использования не нужно подключать
модуль .
Округляет число до ближайшего целого. Если дробная часть числа равна 0.5, то число округляется
до ближайшего четного числа.

Pathlib (Python 3.4+)

F-строки — это отличное решение, но некоторые строки, такие как пути файлов, имеют свои собственные библиотеки, которые заметно упрощают работу. Python 3 предоставляет pathlib в качестве удобной абстракции для работы с путями файлов.

Python

from pathlib import Path

root = Path(‘post_sub_folder’)
print(root)
# post_sub_folder

path = root / ‘happy_user’
# Делаем путь абсолютным

print(path.resolve())
# /home/weenkus/post_sub_folder/happy_user

1
2
3
4
5
6
7
8
9
10
11

frompathlib importPath

root=Path(‘post_sub_folder’)

print(root)

# post_sub_folder
 

path=root’happy_user’

# Делаем путь абсолютным
 

print(path.resolve())

# /home/weenkus/post_sub_folder/happy_user

Игра в кости с использованием модуля random в Python

Далее представлен код простой игры в кости, которая поможет понять принцип работы функций модуля random. В игре два участника и два кубика.

  • Участники по очереди бросают кубики, предварительно встряхнув их;
  • Алгоритм высчитывает сумму значений кубиков каждого участника и добавляет полученный результат на доску с результатами;
  • Участник, у которого в результате большее количество очков, выигрывает.

Код программы для игры в кости Python:

Python

import random

PlayerOne = «Анна»
PlayerTwo = «Алекс»

AnnaScore = 0
AlexScore = 0

# У каждого кубика шесть возможных значений
diceOne =
diceTwo =

def playDiceGame():
«»»Оба участника, Анна и Алекс, бросают кубик, используя метод shuffle»»»

for i in range(5):
#оба кубика встряхиваются 5 раз
random.shuffle(diceOne)
random.shuffle(diceTwo)
firstNumber = random.choice(diceOne) # использование метода choice для выбора случайного значения
SecondNumber = random.choice(diceTwo)
return firstNumber + SecondNumber

print(«Игра в кости использует модуль random\n»)

#Давайте сыграем в кости три раза
for i in range(3):
# определим, кто будет бросать кости первым
AlexTossNumber = random.randint(1, 100) # генерация случайного числа от 1 до 100, включая 100
AnnaTossNumber = random.randrange(1, 101, 1) # генерация случайного числа от 1 до 100, не включая 101

if( AlexTossNumber > AnnaTossNumber):
print(«Алекс выиграл жеребьевку.»)
AlexScore = playDiceGame()
AnnaScore = playDiceGame()
else:
print(«Анна выиграла жеребьевку.»)
AnnaScore = playDiceGame()
AlexScore = playDiceGame()

if(AlexScore > AnnaScore):
print («Алекс выиграл игру в кости. Финальный счет Алекса:», AlexScore, «Финальный счет Анны:», AnnaScore, «\n»)
else:
print(«Анна выиграла игру в кости. Финальный счет Анны:», AnnaScore, «Финальный счет Алекса:», AlexScore, «\n»)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

importrandom

PlayerOne=»Анна»

PlayerTwo=»Алекс»

AnnaScore=

AlexScore=

 
# У каждого кубика шесть возможных значений

diceOne=1,2,3,4,5,6

diceTwo=1,2,3,4,5,6

defplayDiceGame()

«»»Оба участника, Анна и Алекс, бросают кубик, используя метод shuffle»»»

foriinrange(5)

#оба кубика встряхиваются 5 раз

random.shuffle(diceOne)

random.shuffle(diceTwo)

firstNumber=random.choice(diceOne)# использование метода choice для выбора случайного значения

SecondNumber=random.choice(diceTwo)

returnfirstNumber+SecondNumber

print(«Игра в кости использует модуль random\n»)

 
#Давайте сыграем в кости три раза

foriinrange(3)

# определим, кто будет бросать кости первым

AlexTossNumber=random.randint(1,100)# генерация случайного числа от 1 до 100, включая 100

AnnaTossNumber=random.randrange(1,101,1)# генерация случайного числа от 1 до 100, не включая 101

if(AlexTossNumber>AnnaTossNumber)

print(«Алекс выиграл жеребьевку.»)

AlexScore=playDiceGame()

AnnaScore=playDiceGame()

else

print(«Анна выиграла жеребьевку.»)

AnnaScore=playDiceGame()

AlexScore=playDiceGame()

if(AlexScore>AnnaScore)

print(«Алекс выиграл игру в кости. Финальный счет Алекса:»,AlexScore,»Финальный счет Анны:»,AnnaScore,»\n»)

else

print(«Анна выиграла игру в кости. Финальный счет Анны:»,AnnaScore,»Финальный счет Алекса:»,AlexScore,»\n»)

Вывод:

Shell

Игра в кости использует модуль random

Анна выиграла жеребьевку.
Анна выиграла игру в кости. Финальный счет Анны: 5 Финальный счет Алекса: 2

Анна выиграла жеребьевку.
Анна выиграла игру в кости. Финальный счет Анны: 10 Финальный счет Алекса: 2

Алекс выиграл жеребьевку.
Анна выиграла игру в кости. Финальный счет Анны: 10 Финальный счет Алекса: 8

1
2
3
4
5
6
7
8
9
10

Игравкостииспользуетмодульrandom

 
Аннавыигралажеребьевку.

Аннавыигралаигрувкости.ФинальныйсчетАнны5ФинальныйсчетАлекса2

 
Аннавыигралажеребьевку.

Аннавыигралаигрувкости.ФинальныйсчетАнны10ФинальныйсчетАлекса2

 
Алексвыигралжеребьевку.

Аннавыигралаигрувкости.ФинальныйсчетАнны10ФинальныйсчетАлекса8

Вот и все. Оставить комментарии можете в секции ниже.

Python NumPy

NumPy IntroNumPy Getting StartedNumPy Creating ArraysNumPy Array IndexingNumPy Array SlicingNumPy Data TypesNumPy Copy vs ViewNumPy Array ShapeNumPy Array ReshapeNumPy Array IteratingNumPy Array JoinNumPy Array SplitNumPy Array SearchNumPy Array SortNumPy Array FilterNumPy Random
Random Intro
Data Distribution
Random Permutation
Seaborn Module
Normal Distribution
Binomial Distribution
Poisson Distribution
Uniform Distribution
Logistic Distribution
Multinomial Distribution
Exponential Distribution
Chi Square Distribution
Rayleigh Distribution
Pareto Distribution
Zipf Distribution

NumPy ufunc
ufunc Intro
ufunc Create Function
ufunc Simple Arithmetic
ufunc Rounding Decimals
ufunc Logs
ufunc Summations
ufunc Products
ufunc Differences
ufunc Finding LCM
ufunc Finding GCD
ufunc Trigonometric
ufunc Hyperbolic
ufunc Set Operations

Комментарии vs строки документации Python

Комментарии Python

Комментарии — это описания, которые помогают программистам лучше понять назначение и функциональность программы. Они полностью игнорируются интерпретатором Python.

В Python мы используем символ  для написания однострочного комментария. Например,

# Программа для вывода на экран строки "Hello World"
print("Hello World")

Комментарии Python с использованием строк

Если мы не присваиваем строки какой-либо переменной, они ведут себя как комментарии. Например,

"Я однострочный комментарий"
'''
Я
многострочный
комментарий!
'''
print("Hello World")

Примечание. Мы используем тройные кавычки для многострочных строк.

Строки документации Python

Как упоминалось выше, строки документации в Python — это строки, которые пишутся сразу после определения функции, метода, класса или модуля (как в примере 1). Они используются для документирования нашего кода.

Мы можем получить доступ к этим строкам документации, используя атрибут .

Зачем нужны функции getstate() и setstate() ?

Если вы получили предыдущее состояние и восстановили его, тогда вы сможете оперировать одними и теми же случайными данными раз за разом. Помните, что использовать другую функцию random в данном случае нельзя. Также нельзя изменить значения заданных параметров. Сделав это, вы измените значение состояния .

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

Python

import random

number_list =

print(«Первая выборка «, random.sample(number_list,k=5))

# хранит текущее состояние в объекте state
state = random.getstate()

print(«Вторая выборка «, random.sample(number_list,k=5))

# Восстанавливает состояние state, используя setstate
random.setstate(state)

#Теперь будет выведен тот же список второй выборки
print(«Третья выборка «, random.sample(number_list,k=5))

# Восстанавливает текущее состояние state
random.setstate(state)

# Вновь будет выведен тот же список второй выборки
print(«Четвертая выборка «, random.sample(number_list,k=5))

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

importrandom

number_list=3,6,9,12,15,18,21,24,27,30

print(«Первая выборка «,random.sample(number_list,k=5))

 
# хранит текущее состояние в объекте state

state=random.getstate()

print(«Вторая выборка «,random.sample(number_list,k=5))

 
# Восстанавливает состояние state, используя setstate

random.setstate(state)

 
#Теперь будет выведен тот же список второй выборки

print(«Третья выборка «,random.sample(number_list,k=5))

 
# Восстанавливает текущее состояние state

random.setstate(state)

 
# Вновь будет выведен тот же список второй выборки

print(«Четвертая выборка «,random.sample(number_list,k=5))

Вывод:

Shell

Первая выборка
Вторая выборка
Третья выборка
Четвертая выборка

1
2
3
4

Перваявыборка18,15,30,9,6

Втораявыборка27,15,12,9,6

Третьявыборка27,15,12,9,6

Четвертаявыборка27,15,12,9,6

Как можно заметить в результате вывода — мы получили одинаковые наборы данных. Это произошло из-за сброса генератора случайных данных.

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

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