Тип данных - это множество значений и операций над ними.
int
- целые числа произвольной точности. Можно задавать в программе с помощью следующих литералов: 12
, 5
, 1000000
, 1_000_000
, 0x10
(шестнадцатеричное число).
float
- вещественные числа, двойной точности, хранят примерно 18 значащих цифр.
Примеры литералов: 147856.187234
, 1.0
, 1.
, 1E9
это миллиард, 1.23e2
это эквивалентно 123.
. Вычисления с такими числами не очень точные, но лучше, чем никакие вычисления:
0.1 + 0.2
0.30000000000000004
bool
- логические значения, они бывают только True
, False
. Это единственные два литерала, которые задают логические значения.
str
- тип данных для хранения строк, т.е. последовательностей символов.
Названия типов можно использовать (почти всегда) для преобразования типов:
# "123" это строковое значение, функция int() превращает его в число:
x = int("123")
# убедимся, что в x число:
print(x, x + 1)
# 321 это значение типа int, но функция str() превращает его в строку:
y = str(321)
# убедимся, что y это строка:
# для строк + работает как конкатенация
print(y, y + y)
# int() часто ломается, если не может преобразовать значение в число.
# str() работает всегда, он способен превратить в текст вообще всё что угодно
print(int("123A"))
123 124 321 321321
---------------------------------------------------------------------------
Traceback (most recent call last)
at line 14 in <module>
ValueError: invalid literal for int() with base 10: '123A'
В Python всё что угодно можно превратить в bool
, обычно пустые или нулевые значения превращаются в False
, остальное в True
:
print(bool("abc"))
print(bool(42))
print(bool(0)) # ноль
print(bool("")) # пустая строка
print(bool("True"))
print(bool("False")) # истина, потому что строка не пустая
#Часто пишут что-то такое
s = "abc"
if s: # строчка в качестве условия в if!! Она превратится в bool
print("строка не пустая")
else:
print("строка пустая")
# моя рекомендация, вместо этого писать
if s != "":
print("строка не пустая")
else:
print("строка пустая")
True True False False True True
str
¶Строки - последовательности символов. В современном python 3 это символы из стандарта Unicode. Он содержит в себе все (почти) письменные символы: буквы, цифры, знаки препинания, математические символы, управляющие символы (например, неразрывные пробелы, символ смены направления текста), смайлики и другие бесполезные символы.
Еще пример, символ рубля, имеет код: 20BD.
Литералы строк - это последовательности символов внутри двойных или одинарных кавычек:
s1 = "asdf"
s2 = " ,msd 7*(^&683704 "
s3 = "123₽" # пример строки с необычным символом
s4 = '123₽'
s5 = 'asdf' # полностью эквивалентно "asdf"
Символ \
в литералах строк - особенный. Это символ экранирования, он изменяет смысл следующего за ним символа. Например n
означает букву эн, а \n
обзначает символ перевода строки.
s1 = "Hello n World!"
s2 = "Hello \n World!" # символ перевода строки
print(s1)
print(s2)
Hello n World! Hello World!
Количество символов в строках можно с помощью функции len()
:
print(len("abc")) # 3 символа
print(len("abcn")) # 4 символа
print(len("abc\n")) # 4 символа
print(len("\n\n\n\n")) # 4 символа
3 4 4 4
Какие еще бывают символы с экранированием: \t
табуляция, \0
символ с кодом 0, много другого бесполезного, \\
символ слеша, \u20BD
- символ с кодом 20BD
:
print("a\tbc\td")
print("ax\tb\td")
print("a\\b") # строка из 3 символов
print("123\u20BD")
print("\u20BD\u20BD") # два символа в строке
a bc d ax b d a\b 123₽ ₽₽
Еще строки можно писать так:
# это строка (string), занимающая несколько строк (line)
s1 = """Hello World
the second line
one more line
"""
s2 = '''Hello World
the second line
one more line
''' # аналогично
# если перед литералом строки указана буква r (raw), значит в строке не действуют
# экранирования:
s3 = "abc\nd" # строка из 5 символов с переводом строки
s4 = r"abc\nd" # это просто 6 символов, ровно тех, что написаны
print(s3)
print(s4)
s5 = r"c:\windows\a.txt"
s6 = r"""asdf\n\n\n"""
#см. прошлый раз, f позволяет подставлять значения внутрь строк
#(интерполяция строк)
x = 42
s7 = f"x = {x}"
print(s7)
# Все возможности можно комбинировать
s8 = rf"""x = \n {x} \n"""
print(s8)
abc d abc\nd x = 42 x = \n 42 \n
Определение функции:
def ИМЯ(аргумент1, аргумент2):
ТЕЛО ФУНКЦИИ
return указывает, какой результат вернуть
def f(x, y): # получает на вход два значения
return x + y # указываем, что результат вычисления функции x + y
def g(x, y): # пример каких-то вычислений
if x > 0:
return y
else:
return y + 1
def h(x):
if x > 100:
return "много"
elif x > 10:
return "несколько"
return "мало"
Вызов функции - указывается имя и в скобках фактические значения аргументов:
z = f(10, 20)
print(z)
print(f(10, 20) + f(0, 0) / 5)
print(g(10, 20)) # 20
print(g(-10, 20)) # 21
s = h(123)
print(s)
print(h(100)) # если вернулось "много", дальше функция сразу заканчивается
print(h(0))
30 30.0 20 21 много
Пример функции с побочным эффектом, которая не возвращает результат:
def hello(name):
print(f"Hello, {name}!")
hello("Ilya")
print(hello("Masha")) # если return не сработал, возвращается значение None
Hello, Ilya! Hello, Masha! None