Операции над числами разных типов возвращают число в более сложном типе
Числа можно записывать в двоичном, восьмеричном и шестнадцатеричном виде, они автоматом будут приведены к десятичной форме
0b101101 # 45 0o12 # 10 0xA # 10 .14 # 0.14 Fraction(1,2); Fraction("0.5") # дробь, одна вторая # в python 3.6, для удобства, можно добавлять подчеркивание 0b1111_1111 # 255
Float так же поддерживает
Содержит константы типа pi, e и т.д.
Функции типа sin(), cos(), tan(), exp(), log(), pow(), fmod(), fsum(), factorialsи т.д.
random.random() random.seed(10) random.choice("String") random.randrange(100,2)
Длинна строки ограничивается лишь объемом ОЗУ
Как и все последовательности поддерживает обращение по индексу, конкатенацию, срез, проверка на вхождение и т.д.
Неизменяемый тип данных т.е. методы возвращают новую строку, а не сам элемент, который можно изменить.
Нулевой символ не является концом строки
Если преобразовывать из bytes/bytearray, то необходимо указывать кодировку в функции str(), так же, она принимает параметры исключений, третьим параметром
Разницы между двойными кавычками и апострофами нет
Спец символы экранируются слешем либо символом r перед строкой
Тройные кавычки (апострофы) сохраняют все форматирование, добавляются в документацию (func.doc), печатают все спец символы
Конкатенация может происходить слешем, плюсом, внутри скобок
Типа: n,r,t,v,a,b,f - перевод строки/каретки, табуляция/вертикальная, звонок/забой оО ?, перевод формата и т.д.
Пишутся после слеша с-но
Обращение по индексу, если индекс отсутствует - исключение IndexError
В индексе можно указать отрицательное значение, тогда отсчет идет с конца (значение отнимается от длинны строки)
Полезен метод извлечения среза, все параметры необязательны, возвращается копия строки
[<Начало>:<Конец>:<Шаг>] s= Python s[:] # вся строка s[::-1] # в обратном порядке "J"+ s[1:] # замена первого символа s[:-1] # удалить последний символ s[0:1]; s[-1:] # получить первый (последний) s[2:5] # часть строки
<Строка специального формата> % <Значение> %[(<Ключ>)] [<Флаг>] [<Ширина>] [.<Точность>] <Тип преобразования> "%s - %s - %s" % (10,20,30) # '10 - 20 - 30' # <Ключ> - ключ словаря, в этом случае должен быть указан словарь "%(name)s - %(year)s" % {"year": 1978, "name": "Nil"} # <Флаг> - флаг преобразования (пробелы, нули, системы счисления) # <Ширина> - мин ширина поля
В последующих версиях python знак % перестанет использоваться, рекомендуется использовать этот метод
<Строка> = <Строка спец формата>.format(*args, **kwargs) {[<Поле>] [!<Функция>] [:<Формат>]} "{0} - {1} - {2}".format(10, 12.3, "String") # '10 - 12.3 String'
В python 3.6 есть альтернатива методу format(), т.н. «Форматируемая строка», она обязательно предваряется символом f (F), и вставляет переменные у казанные места.. типа того
{[<Переменная>] [!<Функция>] [:<Формат>]} a= 10; b= 12.3; s= "string" f"{a} - {b} - {s}" # Еще вариант вставки переменных в строку print("{0} - {1}".format(1, 2))
" => ".join(["one", "two", "three"]) # 'one => two => three'
locate(<категория>, <локаль>= )
Модуль locale, устанавливать несколько раз.
Установить можно командой locate.setlocate(<Категория>), получить текущую locate.getlocate(<Категория>), получить настройки локали можно locate.localeconv()
upper(), lower(), swapcase(), capitalize(), title(), casefold()- верхний/нижний/противоположный регистры, первая буква заглавная, тоже но для каждого слова, заменяет расширенные символы буквами, полезно при сравнении строк.
chr(), ord()- возвращает символ указанного кода, и код указанного символа
Есть рад функций типа isalnum(), isalpha(), isdigit(), isdecimal(), isnumeric(), isupper(), istitle() и т.д., для проверки содержимого
Хранит в себе неизменяемую последовательность байт, от 0..255, можно хранить бинарные данные, поддерживает множество строковых методов
bytearray- впринципе тоже самое, но последовательность изменяемая
Преобразовать объект в последовательность байтов (т.е. выполнить сериализацию/десериализацию) можно с помощью модуля pickle
Модуль hashlib
Функции типа md5(), sha1,224,256,384(), в 3.6 появились еще sha3_224,256,512() и т.д.
import re
Дока
Шаблон нужно компилировать ф-ей compile()
Символ r перед строкой позволяет не экранировать спец символы
<Шаблон>= re.compile(<Рег выражение>, <Модификатор>=) p= re.compile(r"^[а-я]+$") if p.search("Input string"): # Либо if re.search("^[а-я]+$", "Input string"):
Модификаторы:
Экранирование слешем (\) или в квадратных скобках
re.compile(r"^[0-3][0-9]\.[01][0-9]\.[12]$") re.compile(r"^[0-3][0-9][.][01][0-9][.][12]$")
Символы ^ и $ зависят от модификаторов (M или S), \A и \Z- аналогичные, но не зависят от модификаторов
p= re.compile(r"^.+$") Точка не соответствует \n p.findall("Str1\nStr2\nStr3") # Ничего не найдено p= re.compile(r"^.+$", re.S) # Теперь соответствует p.findall("Str1\nStr2\nStr3") # Найдена все строка, целиком p= re.compile(r"^.+$", re.M) # Многострочный режим p.findall("Str1\nStr2\nStr3") # list из трех подстрок p= re.compile(r"Красн((ая)|(ое))") p.search("Красное") # Позиция для поиска p= re.compile(r"\bPython\b") p.search("Python") p= re.compile(r"\Bthon\b") p.search("Python")
Вместо символов можно использовать классы:
Число вхождений, типа:
Ищется самая длинная строка, пропуская более короткие соответствия, чтобы ограничить, нужно указать ?
Получить содержимое тегов '<br>' вместе с тегами:
s= '<br>Text1</br>Text2<br>Text3</br>' p= re.compile(r"<br>.*</br>", re.S) p.findall(s) >> ['<br>Text1</br>Text2<br>Text3</br>'] # Получили всю строку p= re.compile(r"<br>.*?</br>", re.S) # Ограничили "Жадность" p.findall(s) >> ['<br>Text1</br>', '<br>Text3</br>'] p= re.compile(r"<br>(.*?)</br>", re.S) # Добавили скобки p.findall(s) >> ['Text1', 'Text3'] # Результат без тегов !!!
Скобки группируют фрагменты, чтобы отбросить из результата сами фрагменты, нужно указать ?: внутри скобок
Например (?:tx) найдет и «Text» и «tx», чтобы второго не было, нужно указать ?:
К найденному фрагменту можно обратится, по порядковому номеру или по имени, номера есть по умолчанию- \№
Например получим текст между одинаковыми тегами:
s= '<b>Text1</b> Text4 <I>Text2</I> <b>Text3</b>' p= re.compile(r"<([a-z]+)>(.*?)</\1>", re.S | re.I) p.findall(s) >> [('b', 'Text1'), ('I', 'Text2'), ('b', 'Text3')] # ?P<name> - для задания имени фрагменту s= 'eed 34 dc 3455' p= re.compile(r"(?P<digits>[0-9]+) (?P<simb>[a-z]+)", re.I) p.search(s) p.group('digit') >> '34' # Пока точно не уверен на чет результата, нужно больше углубления
Для этого есть следующе методы (и функции их аналоги):
Объект Match содержит следующие свойства и методы:
Это так же функции и методы:
Метод sub() ищет все совпадения и заменяет указанным значением
sub[<Новый фрагмент или ссылка на функцию>, <Строка для замены>, <Мах кол-во замен>=]
Внутри нового фрагмента можно использовать обратные ссылки типа (\номер элемента \g название группы \g номер группы)
# Поменяем два тега местами p= re.compile(r"<(?P<tag1>[a-z]+)><(?P<tag2>[a-z]+)>") print(p.sub(r"<\2><\1>", "<br><hr>")) print(p.sub(r"<\g<2>><\g<1>>", "<br><hr>")) print(p.sub(r"<\g<tag2>><\g<tag1>>", "<br><hr>")) # Функция для замены def repl(match): x= int(match.group(0)) x += 10 return "{0}".format(x) p= re.compile(r"[0-9]+") print(p.sub(repl, "2008, 2009, 2010, 2011"))