Возможности 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 |
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 |
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 |
Игравкостииспользуетмодуль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 |
importrandom number_list=3,6,9,12,15,18,21,24,27,30 print(«Первая выборка «,random.sample(number_list,k=5)) state=random.getstate() print(«Вторая выборка «,random.sample(number_list,k=5)) random.setstate(state) print(«Третья выборка «,random.sample(number_list,k=5)) random.setstate(state) print(«Четвертая выборка «,random.sample(number_list,k=5)) |
Вывод:
Shell
Первая выборка
Вторая выборка
Третья выборка
Четвертая выборка
1 |
Перваявыборка18,15,30,9,6 Втораявыборка27,15,12,9,6 Третьявыборка27,15,12,9,6 Четвертаявыборка27,15,12,9,6 |
Как можно заметить в результате вывода — мы получили одинаковые наборы данных. Это произошло из-за сброса генератора случайных данных.