Типы данных. переменные

Нововведения Python 3.9.0

Начиная с недавно вышедшей версии Python 3.9, у разработчиков больше нет необходимости импортировать абстрактные коллекции для описания типов. Теперь вместо можно использовать , то же самое происходит с , , и т.д. Полное описание этого нововведения можно прочитать тут: PEP-585.

Также добавили аннотации типов, которые в дальнейшем могут быть использованы инструментами статического анализа. где — тип переменной , а — некоторые метаданные для переменной. По оценкам некоторых авторов, эти метаданные могут быть использованы также и во время выполнения (подробности смотрите в PEP-593).

А как сделать резервное копирование всех моих настроек?

Вызов функции

Рассмотрим полную версию программы с функцией:

def countFood():
    a = int(input())
    b = int(input())
    print("Всего", a+b, "шт.")

print("Сколько бананов и ананасов для обезьян?")
countFood()

print("Сколько жуков и червей для ежей?")
countFood()

print("Сколько рыб и моллюсков для выдр?")
countFood()

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

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

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

print("Сколько бананов и ананасов для обезьян?")
countFood()

print("Сколько жуков и червей для ежей?")
countFood()

print("Сколько рыб и моллюсков для выдр?")
countFood()

def countFood():
    a = int(input())
    b = int(input())
    print("Всего", a+b, "шт.")

Результат:

Сколько бананов и ананасов для обезьян?
Traceback (most recent call last):
  File "test.py", line 2, in <module>
    countFood()
NameError: name 'countFood' is not defined

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

How to read and write in Python

Every program is eventually a data processor, so we should know how to input and output data within it. There exists a function, , to output data from any Python program.
To use it, pass a comma separated list of arguments
that you want to print to the function.
Let’s see an example. Press «run» and then «next» to see how the program
is being executed line by line:

None
print(5 + 10)
print(3 * 7, (17 - 2) * 8)
print(2 ** 16)  # two stars are used for exponentiation (2 to the power of 16)
print(37 / 3)  # single forward slash is a division
print(37 // 3)  # double forward slash is an integer division
        # it returns only the quotient of the division (i.e. no remainder)
print(37 % 3)  # percent sign is a modulus operator
        # it gives the remainder of the left value divided by the right value

To input data into a program, we use . This function reads a single line of text, as a String.

Here’s a program that reads the user’s name and greets them:

John
    
print('What is your name?')
name = input()  # read a single line and store it in the variable "name"
print('Hi ' + name + '!')
    

Sum of numbers and strings

Let’s try to write a program that inputs two numbers and prints their sum. We read the two numbers
and store them in the variables and using the assignment operator .
On the left side of an assignment operator we put the name of the variable. The name could be a string of latin characters (, , , )
but must start with a letter in the range or .
On the right side of an assignment operator we put any expression that Python can evaluate.
The name starts pointing to the result of the evaluation.
Read this example, run it and look at the output:

5
7
    
a = input()
b = input()
s = a + b
print(s)
    

After running the example we can see that it prints . As we were taught in school,
gives . So, the program is wrong, and it’s important to understand why.
The thing is, in the third line Python has «summed» two strings, rather than two numbers.
The sum of two strings in Python works as follows: they are just glued one after another. It’s also sometimes
called «string concatenation».

Do you see in the variable inspector, on the right hand side, that the values bound to variables  and 
are wrapped in quotes? That means that the values there are string, not numbers. Strings and numbers
are represented in Python differently.

All the values in Python are called «objects». Every object has a certain type. The number 2 corresponds to an object «number 2» of type «int»
(i.e., an integer number). The string corresponds to an object «string ‘hello'» of type «str».
Every floating-point number is represented as an object of type «float». The type
of an object specifies what kind of operations may be applied to it.
For instance, if the two variables and are pointing to the objects of type , Python can multiply them. However, if they are pointing to the objects of type , Python can’t do that:

None
first = 5
second = 7
print(first * second)

# you can use single or double quotes to define a string
first = '5'
second = "7"
print(first * second)
    

To cast (convert) the string of digits into an integer number, we can use the function . For example,  gives an int object with value .

Given the information above, we can now fix the incorrect output and output the sum of the two numbers correctly:

5
7
    
a = int(input())
b = int(input())
s = a + b
print(s)
    

Практическая работа

Напишите программу, в которой определены следующие четыре функции:

  1. Функция getInput() не имеет параметров, запрашивает ввод с клавиатуры и возвращает в основную программу полученную строку.

  2. Функция testInput() имеет один параметр. В теле она проверяет, можно ли переданное ей значение преобразовать к целому числу. Если можно, возвращает логическое True. Если нельзя – False.

  3. Функция strToInt() имеет один параметр. В теле преобразовывает переданное значение к целочисленному типу. Возвращает полученное число.

  4. Функция printInt() имеет один параметр. Она выводит переданное значение на экран и ничего не возвращает.

В основной ветке программы вызовите первую функцию. То, что она вернула, передайте во вторую функцию. Если вторая функция вернула True, то те же данные (из первой функции) передайте в третью функцию, а возвращенное третьей функцией значение – в четвертую.

Known Issues

Чтение, запись и обработка файлов в Python.

При доступе к файлу в операционной системе требуется правильно указать путь к файлу. Путь к файлу — это строка, которая представляет местоположение файла.

# Unix
/path/to/file/text.txt

# Windows
c:\path\to\file\text.txt

Он разбит на три основные части:

  1. Путь к файлу : расположение директории в файловой системе, где папки разделены прямой косой чертой в Unix подобных системах или обратной косой чертой в Windows.
  2. Имя файла : фактическое имя файла.
  3. Расширение : используется для указания типа файла.

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

>>> full_path = '/path/to/file/text.txt'
>>> print(full_path)
# /path/to/file/text.txt

В системе Windows путь включает в себя обратную косую черту . Этот символ в строках на Python используется для экранирования escape-последовательностей, таких как новая строка .

>>> full_path = 'c:\path\to\file\text.txt'
>>> print(full_path)
# c:\path o
#          ile    ext.txt

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

# экранируем обратную косую черту
>>> full_path = 'c:\\path\\to\\file\\text.txt'
>>> print(full_path)
# c:\path\to\file\text.txt

# строковой литерал raw строки
>>> full_path = r'c:\path\to\file\text.txt'
>>> print(full_path)
# c:\path\to\file\text.txt

Открытие/закрытие файла для чтения/записи в Python.
Прежде чем начать работать с файлом, первое, что нужно сделать, это открыть его. Это делается путем вызова встроенной функции open(). Она имеет единственный обязательный аргумент, который представляет путь к файлу filename

Типы обрабатываемых данных и файлов в Python.
Существуют три типа файлов которые чаще всего обрабатываются на практике. Текстовые файлы. Буферизованные двоичные типы файлов. Необработанный тип файлов Raw.

Способы чтения открытого файла в Python.
Существует несколько методов, которые могут быть вызваны для чтения открытого файла. read(size=-1), readline(size=-1), readlines()

Способы записи в открытый файл в Python.
Как и при чтении файлов, файловые объекты имеют несколько методов, которые полезны для записи в файл. fp.write(string), fp.writelines(sequence)

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

Добавление данных в открытый файл в Python..
Иногда может понадобиться добавить данные в файл или начать запись в конце уже заполненного файла. Это легко сделать, используя символ ‘a’ для аргумента mode функции open():

Управление указателем чтения/записи в файле в Python.
Краткий обзор методов управления указателем чтения/записи в файле.

Создание менеджера для обработки файла в Python.
У менеджера контекста есть два «магических метода». __enter__() — вызывается при вызове оператора with. __exit__() вызывается при выходе из блока оператора with.

Сохранение словарей в формат JSON в Python.
Для сохранения сложных типов данных в файлы, Python позволяет использовать популярный формат обмена данными, называемый JSON. pickle — это протокол, который позволяет сериализовать произвольно сложные объекты Python.

Встроенные модули для работы с разными форматами в Python.
Есть общие ситуации, с которыми вы можете столкнуться при работе с файлами. Большинство из этих случаев могут быть обработаны с помощью других модулей и библиотек.

Функции придают программе структуру

Польза функций не только в возможности многократного вызова одного и того же кода из разных мест программы

Не менее важно, что благодаря им программа обретает истинную структуру. Функции как бы разделяют ее на обособленные части, каждая из которых выполняет свою конкретную задачу

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

figure = input("1-прямоугольник, 
2-треугольник, 3-круг: ")

if figure == '1':
  a = float(input("Ширина: "))
  b = float(input("Высота: "))
  print("Площадь: %.2f" % (a*b))
elif figure == '2':
  a = float(input("Основание: "))
  h = float(input("Высота: "))
  print("Площадь: %.2f" % (0.5 * a * h))
elif figure == '3':
  r = float(input("Радиус: "))
  print("Площадь: %.2f" % (3.14 * r**2))
else:
  print("Ошибка ввода")

Здесь нет никаких функций, и все прекрасно. Но напишем вариант с функциями:

def rectangle():
    a = float(input("Ширина: "))
    b = float(input("Высота: "))
    print("Площадь: %.2f" % (a*b))

def triangle():
    a = float(input("Основание: "))
    h = float(input("Высота: "))
    print("Площадь: %.2f" % (0.5 * a * h))

def circle():
    r = float(input("Радиус: "))
    print("Площадь: %.2f" % (3.14 * r**2))

figure = input("1-прямоугольник, 
2-треугольник, 3-круг: ")
if figure == '1':
  rectangle()
elif figure == '2':
  triangle()
elif figure == '3':
  circle()
else:
  print("Ошибка ввода")

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

Если нам когда-нибудь захочется вычислять площадь треугольника по формуле Герона, а не через высоту, то не придется искать код во всей программе (представьте, что она состоит из тысяч строк кода как реальные программы). Мы пойдем к месту определения функций и изменим тело одной из них.

Если понадобиться использовать эти функции в какой-нибудь другой программе, то мы сможем импортировать их туда, сославшись на данный файл с кодом (как это делается в Python, будет рассмотрено позже).

Определение функции. Оператор def

В языке программирования Python функции определяются с помощью оператора def. Рассмотрим код:

def countFood():
    a = int(input())
    b = int(input())
    print("Всего", a+b, "шт.")

Это пример определения функции. Как и другие сложные инструкции вроде условного оператора и циклов функция состоит из заголовка и тела. Заголовок оканчивается двоеточием и переходом на новую строку. Тело имеет отступ.

Ключевое слово def сообщает интерпретатору, что перед ним определение функции. За def следует имя функции. Оно может быть любым, также как и всякий идентификатор, например, переменная. В программировании весьма желательно давать всему осмысленные имена. Так в данном случае функция названа «посчитатьЕду» в переводе на русский.

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

После двоеточия следует тело, содержащее инструкции, которые выполняются при вызове функции. Следует различать определение функции и ее вызов. В программном коде они не рядом и не вместе. Можно определить функцию, но ни разу ее не вызвать. Нельзя вызвать функцию, которая не была определена. Определив функцию, но ни разу не вызвав ее, вы никогда не выполните ее тела.

Практическая работа

  1. Вводится строка, включающая строчные и прописные буквы. Требуется вывести ту же строку в одном регистре, который зависит от того, каких букв больше. При равном количестве преобразовать в нижний регистр. Например, вводится строка «HeLLo World», она должна быть преобразована в «hello world», потому что в исходной строке малых букв больше. В коде используйте цикл for, строковые методы upper() (преобразование к верхнему регистру) и lower() (преобразование к нижнему регистру), а также методы isupper() и islower(), проверяющие регистр строки или символа.

  2. Строковый метод isdigit() проверяет, состоит ли строка только из цифр. Напишите программу, которая запрашивает с ввода два целых числа и выводит их сумму. В случае некорректного ввода программа не должна завершаться с ошибкой, а должна продолжать запрашивать числа. Обработчик исключений try-except использовать нельзя.

Python SciPy

Почему Вам нужно обратиться именно к нам?

Практическая работа

  1. Переменной var_int присвойте значение 10, var_float — значение 8.4, var_str — «No».

  2. Значение, хранимое в переменной var_int, увеличьте в 3.5 раза. Полученный результат свяжите с переменной var_big.

  3. Измените значение, хранимое в переменной var_float, уменьшив его на единицу, результат свяжите с той же переменной.

  4. Разделите var_int на var_float, а затем var_big на var_float. Результат данных выражений не привязывайте ни к каким переменным.

  5. Измените значение переменной var_str на «NoNoYesYesYes». При формировании нового значения используйте операции конкатенации (+) и повторения строки (*).

  6. Выведите значения всех переменных.

Решение задач

1. Поэкспериментируйте с переводом в различные типы данных

2. Пользователь вводит свое имя и фамилию. Выведите:

Hello, имя фамилия
# На месте слов с % должны быть введенные данные

3. Посчитайте сумму трех введенных целых чисел

4. Посчитайте сумму трех введенных дробных чисел. Подумайте в какой тип данных нужно преобразовать значение, возвращенное функцией input

5. Дано число, выведите предыдущее и следущее за ним числа в таком формате:

# Число равно 10

Число предшествующее числу 10 равно 9

Число следующее за числом 10 равно 11

6. Вводятся имя и возраст. Выведите, где введенное имя = Максим, а возраст = 20

Привет, Максим! Ваш возраст равен 20!

Переменные, объекты и ссылки

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

В данном примере происходит следующее:

  1. создается объект типа со значение ;
  2. создается переменная ;
  3. в переменной сохранится адрес (ссылка) на объект;

a = 100, создается новый объект, а переменная «a» получает его адрес.Важно: переменная в Python не хранит значение напрямую – она хранит лишь ссылку на объект

Теперь посмотрим что произойдет, если одной переменой присвоить другую переменную:

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

b = a, переменная «b» ссылается на тот же объект, что и переменная «a».

Предположим, что в какой-то момент вы захотели поменять значение переменной

В данном примере Python создал новый объект типа int, и теперь переменная b ссылается на новый объект.

b = 500, переменная «b» ссылается на новый объект с другим адресом.

Рассмотрим еще один пример:

В этом примере создается новый объект типа , и переменная ссылается на новый объект.

b = «tree», переменная b теперь ссылается на новый объект строкового типа

На объект типа со значением больше никто не ссылается. Следовательно, он больше не доступен и будет удален сборщиком мусора (тем самым освободим немного памяти).

Операции в программировании

Операция – это выполнение каких-либо действий над данными, которые в данном случае именуют операндами. Само действие выполняет оператор – специальный инструмент. Если бы вы выполняли операцию постройки стола, то вашими операндами были бы доска и гвоздь, а оператором – молоток.

Так в математике и программировании символ плюса является оператором операции сложения по отношению к числам. В случае строк этот же оператор выполняет операцию конкатенации, т. е. соединения.

>>> 10.25 + 98.36
108.61
>>> 'Hello' + 'World'
'HelloWorld'

Здесь следует для себя отметить, что то, что делает оператор в операции, зависит не только от него, но и от типов данных, которыми он оперирует. Молоток в случае нападения на вас крокодила перестанет играть роль строительного инструмента. Однако в большинстве случаев операторы не универсальны. Например, знак плюса неприменим, если операндами являются, с одной стороны, число, а с другой – строка.

>>> 1 + 'a'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 
'int' and 'str'

Здесь в строке интерпретатор сообщает, что произошла ошибка типа – неподдерживаемый операнд для типов int и str.

Краткая историческая справка

Язык программирования Python был создан к 1991 году голландцем Гвидо ван Россумом.

Свое имя – Пайтон (или Питон) – получил от названия телесериала, а не пресмыкающегося.

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

Python активно развивается в настоящее время. Часто выходят новые версии. Существуют две поддерживаемые ветки: Python 2.x и Python 3.x. Здесь английской буквой «x» обозначается конкретный релиз. Между вторым и третьим Питоном есть небольшая разница. В данном курсе за основу берется Python 3.x.

Типы данных и преобразование типов

Перечислим основные типы данных в Python, которые понадобятся на ближайших уроках:

  • int – целочисленные значения;float – вещественные (дробные) значения;bool – логические значения — истина (True) или ложь (False);str – символьная строка или единичный символ.

Рассмотрим примеры использования основных типов в Python:Целые числа (int):

num = 13
print(num)  # 13
 
num = 
print(num)  # 0
 
num = -10
print(num)  # -10
 
num = 500_000_000  # для удобства чтения
print(num) # 500000000

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

num = 13.4
print(num) # 13.4
 
num = 0.0
print(num) # 0.0
 
num = -15.2
print(num) # -15.2
 
num = 100_000.000_002 # для удобства чтения
print(num) # 100000.000002
 
num = 1.7e2 # 1.7 умножить на 10 в степени 2
print(num) # 170

Логический тип (bool):

print(15 == 15) # True
 
print(1 != 3) # True
 
print(3 > 4) # False
 
print(3 <= 3) # True
 
print(6 >= 6) # True
 
print(6 < 5) # False
 
x = 2
print(1 < x < 3) # True

Строки (str):

example_string = "Очень интересно"
print(example_string) # Очень интересно
 
example_string = 'Пьеса "На дне"'
print(example_string) # Пьеса "На дне"
 
example_string = "Пьеса \"На дне\"
print(example_string) # Пьеса "На дне"
 
example_string = "Как " \
                 "разбить " \
                 "объявление длинной строки"
print(example_string) # Как разбить объявление длинной строки
 
example_string = """
                 Как  
                 оставить сроку
                 в несколько строк
                 """
print(example_string) 
# Как  
# оставить сроку
# в несколько строк
# Как объединить две строки в одну
print("Можно их" + " сложить") # Можно их сложить 
 
print("Можно и так!" * 3) # Можно и так!Можно и так!Можно и так!

Рассмотрим примеры того, как используется преобразование типов в Питон:

  • преобразование в символьную строку:
1
2
3
a = 1.7
a=str(a)
print(a) # '1.7'

преобразование в целое:

1
2
3
x = 1.7
x=int(x)
print(x) # 1

преобразование в вещественное:

1
2
3
y=1
y=float(y)
print(y) # 1.0

Методы строк

В Python для строк есть множество методов. Посмотреть их можно по команде dir(str), получить информацию по каждому – help(str.имя_метода). Рассмотрим наиболее интересные из них.

Методы split() и join()

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

>>> s = input()
red blue orange white
>>> s
'red blue orange white'
>>> sl = s.split()
>>> sl

>>> s
'red blue orange white'

Список, возвращенный методом split(), мы могли бы присвоить той же переменной , т. е. . Тогда исходная строка была бы потеряна. Если она не нужна, то лучше не вводить дополнительную переменную.

Метод split() может принимать необязательный аргумент-строку, указывающей по какому символу или подстроке следует выполнить разделение:

>>> s.split('e')

>>> '40030023'.split('00')

Метод строк join() выполняет обратное действие. Он формирует из списка строку. Поскольку это метод строки, то впереди ставится строка-разделитель, а в скобках — передается список:

>>> '-'.join(sl)
'red-blue-orange-white'

Если разделитель не нужен, то метод применяется к пустой строке:

>>> ''.join(sl)
'redblueorangewhite'

Методы find() и replace()

Данные методы строк работают с подстроками. Методы find() ищет подстроку в строке и возвращает индекс первого элемента найденной подстроки. Если подстрока не найдена, то возвращает -1.

>>> s
'red blue orange white'
>>> s.find('blue')
4
>>> s.find('green')
-1

Поиск может производиться не во всей строке, а лишь на каком-то ее отрезке. В этом случае указывается первый и последний индексы отрезка. Если последний не указан, то ищется до конца строки:

>>> letters = 'ABCDACFDA'
>>> letters.find('A', 3)
4
>>> letters.find('DA', 0, 6)
3

Здесь мы ищем с третьего индекса и до конца, а также с первого и до шестого. Обратите внимания, что метод find() возвращает только первое вхождение. Так выражение последнюю букву ‘A’ не находит, так как ‘A’ ему уже встретилась под индексом 4.

Метод replace() заменяет одну подстроку на другую:

>>> letters.replace('DA', 'NET')
'ABCNETCFNET'

Исходная строка, конечно, не меняется:

>>> letters
'ABCDACFDA'

Так что если результат надо сохранить, то его надо присвоить переменной:

>>> new_letters = letters.replace('DA', 'NET')
>>> new_letters
'ABCNETCFNET'

Метод format()

Строковый метод format() уже упоминался при рассмотрении вывода на экран с помощью функции print():

>>> print("This is a {0}. It's {1}."
... .format("ball", "red"))
This is a ball. It's red.

Однако к print() он никакого отношения не имеет, а применяется к строкам. Лишь потом заново сформированная строка передается в функцию вывода.

Возможности format() широкие, рассмотрим основные.

>>> size1 = "length - {}, width - {}, height - {}"
>>> size1.format(3, 6, 2.3)
'length - 3, width - 6, height — 2.3'

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

>>> size2 = "height - {2}, length - {0}, width - {1}"
>>> size2.format(3, 6, 2.3)
'height - 2.3, length - 3, width - 6'

Кроме того, аргументы могут передаваться по слову-ключу:

>>> info = "This is a {subj}. It's {prop}."
>>> info.format(subj="table", prop="small")
"This is a table. It's small."

Пример форматирования вещественных чисел:

>>> "{1:.2f} {0:.3f}".format(3.33333, 10/6)
'1.67 3.333'

#2 Форматирование строк “По новому” (str.format)

Python 3 предоставил новый способ форматирования, который также был внесен в раннюю версию Python 2.7. Этот “новый стиль” форматирования строк избавляется от специального синтаксиса оператора % и делает синтаксис для форматирования строк более регулярным. Теперь форматирование обрабатывается вызовом .format() в объекте строки.

Вы можете использовать format(), чтобы выполнить простое позиционное форматирование, также, как мы делали это по старинке:

Python

print(‘Hello, {}’.format(name))
# Вывод: ‘Hello, Bob’

1
2

print(‘Hello, {}’.format(name))

# Вывод: ‘Hello, Bob’

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

Python

print(
‘Hey {name}, there is a 0x{errno:x} error!’.format(
name=name, errno=errno
)
)

# Вывод: ‘Hey Bob, there is a 0xbadc0ffee error!’

1
2
3
4
5
6
7

print(

‘Hey {name}, there is a 0x{errno:x} error!’.format(

name=name,errno=errno

)

)
 
# Вывод: ‘Hey Bob, there is a 0xbadc0ffee error!’

Однако, официальная документация Python 3 не делает явных рекомендаций по использованию старого форматирования:

По этому я лично пытаюсь работать str.format при продвижении нового кода. Начав с Python 3.6, есть еще один способ форматирования ваших строк. Рассмотрим его в следующем разделе!

Новый способ форматирования — метод format()

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

Аргументов в format() может быть больше, чем идентификаторов в строке. В таком случае оставшиеся игнорируются.

Идентификаторы могут быть либо индексами аргументов, либо ключами:

>>> "{}, {} and {}".format('one', 1, 'I')
'one, 1 and I'
>>> "{1}, {2} and {0}".format('one', 1, 'I')
'1, I and one'
>>> nums = 3, 4, 5, 6, 2, 
>>> "{}{}{}".format(*nums)
'345'
>>> "{0}{2}{4}".format(*nums)
'352'
>>> u = {'name':'bob','age':35}
>>> '{name}-{age}'.format(**u)
'bob-35'
>>> '{name}'.format(**u)
'bob'
>>> '{name}-{age}'.format(name="pi",age=3.14)
'pi-3.14'
>>> '{0}-{age}'.format("sin",**u)
'sin-35'

Вывод атрибутов объекта:

>>> class house:
	size = "big"
	street = "main"
 
>>> h = house()
>>> '{0.size}, {0.street}'.format(h)
'big, main'

Можно задавать ширину поля и выравнивание:

>>> '{name:10}-{age:3}'.format(**u)
'bob       - 35'
>>> '{name:>10}-{age:>3}'.format(**u)
'       bob- 35'
>>> '{name:^10}-{age:^3}'.format(**u)
'   bob    -35 '

Вывод вещественных чисел:

>>> '{0}'.format(4/3)
'1.3333333333333333'
>>> '{0:f}'.format(4/3)
'1.333333'
>>> '{0:.2f}'.format(4/3)
'1.33'
>>> '{0:10.2f}'.format(4/3)
'      1.33'
>>> '{0:10e}'.format(4/3)
'1.333333e+00'

Функции, которые когда-нибудь можно выучить

Следующие встроенные функции Python определённо не бесполезны, но они более специализированы.

Эти функции вам, возможно, будут нужны, но также есть шанс, что вы никогда не прибегнете к ним в своём коде.

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

Вывод данных print

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

Для вывода данных в Python используется функция print(). С её помощью можно выводить строки, числа, последовательности. Её синтаксис выглядит так:

print("Строка")

print(5)

Интерпретатор Python также позволяет передавать в print() другую функцию:

def sum(a, b):
    return a + b
print(sum(5, 2)) # Выведет 7

В этом случае функция sum посчитает сумму аргументов и вернёт результат. Этот результат будет выведен с помощью print в консоль.

В print() можно передать несколько аргументов:

print("один", "два", 5) # Выведет "один два 5"

Кроме того, строки можно складывать с помощью оператора “+”:

print("один" + "два", 5) # Выведет "одиндва 5"

Однако не всегда нужно выводить что-то на экран. Программисты могут перенаправить вывод программы в файл. Функцию print() имеет необязательный параметр “file”, который по умолчанию равен “sys.stdout”, то есть выводу на экран. Если программист хочет перенаправить вывод в файл, он должен написать код:

f = open("file.txt", "w") # Открываем файл в режиме запись
print("Строка", file = f) # Выводим "Строка" в файл

Кроме того, если нужно сделать красивое оформление вывода разными цветами, то можно воспользоваться библиотекой colorama или termcolor. Подробно про цветной вывод описано в отдельной статье на сайте.

Вывод данных. Функция print()

Что такое функция в программировании, узнаем позже. Пока будем считать, что print() – это такая команда языка Python, которая выводит то, что в ее скобках на экран.

>>> print(1032)
1032
>>> print(2.34)
2.34
>>> print("Hello")
Hello

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

>>> print("a:", 1)
a: 1
>>> one = 1
>>> two = 2
>>> three = 3
>>> print(one, two, three)
1 2 3

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

Если в скобках стоит выражение, то сначала оно выполняется, после чего print() уже выводит результат данного выражения:

>>> print("hello" + " " + "world")
hello world
>>> print(10 - 2.5/2)
8.75

В print() предусмотрены дополнительные параметры. Например, через параметр sep можно указать отличный от пробела разделитель строк:

>>> print("Mon", "Tue", "Wed", "Thu",
... "Fri", "Sat", "Sun", sep="-")
Mon-Tue-Wed-Thu-Fri-Sat-Sun
>>> print(1, 2, 3, sep="//")
1//2//3

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

>>> print(10, end="")
10>>>

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

>>> print(10, end='\n')
10
>>>

Однако, если надо отступить на одну дополнительную строку после вывода, то можно сделать так:

>>> print(10, end='\n\n')
10

>>>

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

Форматирование может выполняться в так называемом старом стиле или с помощью строкового метода format. Старый стиль также называют Си-стилем, так как он схож с тем, как происходит вывод на экран в языке C. Рассмотрим пример:

>>> pupil = "Ben"
>>> old = 16
>>> grade = 9.2
>>> print("It's %s, %d. Level: %f" %
... (pupil, old, grade))
It's Ben, 16. Level: 9.200000

Здесь вместо трех комбинаций символов , , подставляются значения переменных pupil, old, grade. Буквы s, d, f обозначают типы данных – строку, целое число, вещественное число. Если бы требовалось подставить три строки, то во всех случаях использовалось бы сочетание %s.

Хотя в качестве значения переменной grade было указано число 9.2, на экран оно вывелось с дополнительными нулями. Однако мы можем указать, сколько требуется знаков после запятой, записав перед буквой f точку с желаемым числом знаков в дробной части:

>>> print("It's %s, %d. Level: %.1f"
...  % (pupil, old, grade))
It's Ben, 16. Level: 9.2

Теперь посмотрим на метод format():

>>> print("This is a {0}. It's {1}."
... .format("ball", "red"))
This is a ball. It's red.
>>> print("This is a {0}. It's {1}."
... .format("cat", "white"))
This is a cat. It's white.
>>> print("This is a {0}. It's {1} {2}."
... .format(1, "a", "number"))
This is a 1. It's a number.

В строке в фигурных скобках указаны номера данных, которые будут сюда подставлены. Далее к строке применяется метод format(). В его скобках указываются сами данные (можно использовать переменные). На нулевое место подставится первый аргумент метода format(), на место с номером 1 – второй и т. д.

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

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

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

Adblock
detector