Показаны различия между двумя версиями страницы.
Следующая версия | Предыдущая версия | ||
develop:pyton:digit [2022/01/23 05:33] admin создано |
develop:pyton:digit [2022/12/01 06:42] (текущий) admin |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
====== Числа, Cтроки, | ====== Числа, Cтроки, | ||
- | |||
- | |||
===== Числа ===== | ===== Числа ===== | ||
- | + | Операции над числами разных типов возвращают **число в более сложном типе**\\ | |
- | + | Числа можно записывать в **двоичном**, | |
- | ==== Функции и методы ==== | + | * **Двоичное** - начинаются с символов **0b (0B)** |
+ | * **Восьмеричное** - начинаются с символов **0о (0О)** | ||
+ | * **Шестнадцатеричное** - начинаются с символов **0x (0X)** | ||
+ | * **Вещественное** - содержит точку либо символ **Е (е)**, есть модуль/ | ||
+ | * **Дробное** - модуль/ | ||
+ | * **Комплексное** - < | ||
<code python> | <code python> | ||
- | </ | + | 0b101101 # 45 |
+ | 0o12 # 10 | ||
+ | 0xA # 10 | ||
+ | .14 # 0.14 | ||
+ | Fraction(1, | ||
- | < | + | # в python |
+ | 0b1111_1111 # 255 | ||
</ | </ | ||
- | ==== Модуль | + | ==== Функции и методы ==== |
+ | * **int(), float(), bin(), oct(), hex()** - преобразование (целое, | ||
+ | * **round(< | ||
+ | * **abs()** - абсолютное число | ||
+ | * **pow(< | ||
+ | * **max(), min()** - принимает список чисел через запятую | ||
+ | * **sum(< | ||
+ | * **divmod(x, | ||
+ | Float так же поддерживает | ||
+ | * **is_integer()** - если нет дробной части | ||
+ | * **as_integer_ration()** - вернет два числа, целую и дробную части | ||
- | <code python> | ||
- | </ | ||
- | + | ==== Модуль math ==== | |
- | <code python> | + | Содержит константы типа **pi**, **e** и т.д.\\ |
- | </ | + | Функции типа **sin(), cos(), tan(), exp(), log(), pow(), fmod(), fsum(), factorials**и т.д.\\ |
==== Модуль random ==== | ==== Модуль random ==== | ||
+ | * **random()** - псевдослучайное число от 0.0 до 1.0 | ||
+ | * **seed(< | ||
+ | * **choice(< | ||
+ | * **suffle()** - перемешивает заданную последовательность, | ||
+ | * **uniform(< | ||
+ | * **randrange(< | ||
<code python> | <code python> | ||
+ | random.random() | ||
+ | random.seed(10) | ||
+ | random.choice(" | ||
+ | random.randrange(100, | ||
</ | </ | ||
- | <code python> | + | ===== Строки |
- | </ | + | Длинна строки ограничивается лишь объемом ОЗУ\\ |
- | + | Как и все последовательности поддерживает обращение по индексу, | |
- | ===== Строки ===== | + | **Неизменяемый** тип данных т.е. методы **возвращают новую строку**, |
+ | **Нулевой символ не является концом строки**\\ | ||
+ | * **str** - Unicode строка, | ||
+ | * **bytes** - неизменяемая последовательность байт, элементы хранят значения 0..255, поддерживает большинство методов строк, доступ по индексу возвращает целое число, а не символ. Может содержать как однобайтовые так и многобайтовые символы | ||
+ | * **bytearray** - изменяемая последовательность байт | ||
==== Создание строки ==== | ==== Создание строки ==== | ||
- | + | Если преобразовывать из bytes/ | |
- | + | **Разницы между двойными кавычками и апострофами нет**\\ | |
- | <code python> | + | Спец символы экранируются слешем либо символом **r** перед строкой\\ |
- | </ | + | **Тройные кавычки** (апострофы) сохраняют все форматирование, |
- | + | **Конкатенация** может происходить слешем, | |
- | <code python> | + | |
- | </ | + | |
==== Спец символы ==== | ==== Спец символы ==== | ||
+ | Типа: n, | ||
+ | Пишутся после слеша с-но\\ | ||
- | <code python> | + | ==== Операции над строками ==== |
- | </ | + | Обращение по индексу, |
+ | В индексе можно указать **отрицательное значение**, | ||
+ | Полезен метод **извлечения среза**, | ||
<code python> | <code python> | ||
+ | [< | ||
+ | s= Python | ||
+ | s[:] # вся строка | ||
+ | s[::-1] # в обратном порядке | ||
+ | " | ||
+ | s[:-1] # удалить последний символ | ||
+ | s[0:1]; s[-1:] # получить первый (последний) | ||
+ | s[2:5] # часть строки | ||
</ | </ | ||
- | ==== Операции над строками ==== | + | ==== Форматирование строк ==== |
+ | <code python> | ||
+ | < | ||
+ | %[(< | ||
+ | "%s - %s - %s" % (10,20,30) # '10 - 20 - 30' | ||
- | <code python> | + | # <Ключ> - ключ словаря, |
- | </ | + | " |
- | <code python> | + | # <Флаг> - флаг преобразования (пробелы, |
+ | # < | ||
</ | </ | ||
- | ==== Форматирование строк ==== | ||
+ | === Метод format() === | ||
+ | В последующих версиях python знак **%** перестанет использоваться, | ||
<code python> | <code python> | ||
- | </code> | + | <Строка> = < |
+ | {[< | ||
- | <code python> | + | "{0} - {1} - {2}" |
</ | </ | ||
- | === Форматируемые строки === | ||
+ | ==== Форматируемые строки ==== | ||
+ | В python 3.6 есть альтернатива методу **format()**, | ||
<code python> | <code python> | ||
- | </code> | + | {[<Переменная>] [!< |
- | <code python> | + | a= 10; b= 12.3; s= " |
+ | f"{a} - {b} - {s}" | ||
+ | |||
+ | # Еще вариант вставки переменных в строку | ||
+ | print(" | ||
</ | </ | ||
+ | |||
==== Функции и методы строк ==== | ==== Функции и методы строк ==== | ||
+ | * **strip()** - удаляет указанные символы в начале и конце строки (если не указано то пробелы удаляет) | ||
+ | * **l[r]strip()** - тоже самое только вначале (в конце) строки | ||
+ | * **split(< | ||
+ | * **rsplit()** - справа на лево | ||
+ | * **splitlines(< | ||
+ | * **join()** - собирает строку "< | ||
<code python> | <code python> | ||
+ | " => " | ||
</ | </ | ||
- | <code python> | ||
- | </ | ||
==== Локаль ==== | ==== Локаль ==== | ||
+ | **locate(< | ||
+ | Модуль **locale**, устанавливать несколько раз.\\ | ||
+ | Установить можно командой **locate.setlocate(< | ||
+ | * **locate.LC_ALL** - для всех режимов | ||
+ | * **locate.LC_COLLATE** - для сравнения строк | ||
+ | * **locate.LC_CTYPE** - для перевода регистра | ||
+ | * **locate.LC_MONETARY** - для денежных единиц | ||
+ | * **locate.LC_NUMERIC** - для чисел | ||
+ | * **locate.LC_TIME** - для даты/ | ||
- | |||
- | <code python> | ||
- | </ | ||
- | |||
- | <code python> | ||
- | </ | ||
==== Регистр символов ==== | ==== Регистр символов ==== | ||
+ | **upper(), lower(), swapcase(), capitalize(), | ||
- | |||
- | <code python> | ||
- | </ | ||
- | |||
- | <code python> | ||
- | </ | ||
==== Функции и методы символов ==== | ==== Функции и методы символов ==== | ||
+ | **chr(), ord()**- возвращает символ указанного кода, и код указанного символа\\ | ||
- | <code python> | ||
- | </ | ||
- | <code python> | + | ==== Поиск и замена ==== |
- | </code> | + | * **find()** - возвращает номер позиции с которой начинается подстрока или -1 если ее нет, **чувствителен к регистру**. |
+ | * **index()** - аналогично, | ||
+ | * **rfind()/rindex()** - аналогично но возвращает номер последнего вхождения | ||
+ | * **count()** - кол-во вхождений | ||
+ | * **startswith()/ | ||
+ | * **replace()** - возвращает новую строку. < | ||
+ | * **translate(< | ||
- | ==== Поиск и замена ==== | ||
+ | ==== Проверка типа содержимого строки ==== | ||
+ | Есть рад функций типа **isalnum()**, | ||
- | <code python> | ||
- | </ | ||
- | <code python> | ||
- | </ | ||
+ | ==== bytes ==== | ||
+ | Хранит в себе неизменяемую последовательность байт, от 0..255, можно хранить бинарные данные, | ||
- | ==== Проверка типа ==== | + | **bytearray**- впринципе тоже самое, но последовательность |
- | <code python> | ||
- | </ | ||
- | <code python> | + | ==== Преобразование ==== |
- | </code> | + | Преобразовать объект в последовательность байтов (т.е. выполнить сериализацию/ |
+ | * **dump(<Объект>, < | ||
+ | * **load(<последовательность байт>, | ||
- | ==== bytes ==== | ||
+ | ==== Шифрование ==== | ||
+ | Модуль **hashlib**\\ | ||
+ | Функции типа **md5()**, **sha1, | ||
- | <code python> | ||
- | </ | ||
- | <code python> | ||
- | </ | ||
+ | ===== Регулярные выражения ===== | ||
+ | **import re**\\ | ||
+ | [[https:// | ||
- | ==== bytearray ==== | ||
+ | ==== Синтаксис ==== | ||
+ | Шаблон нужно компилировать ф-ей **compile()**\\ | ||
+ | :!: Символ **r** перед строкой позволяет не экранировать спец символы\\ | ||
<code python> | <code python> | ||
- | </code> | + | <Шаблон>= re.compile(< |
- | <code python> | + | p= re.compile(r" |
- | </ | + | if p.search(" |
+ | # Либо | ||
+ | if re.search(" | ||
- | ==== Преобразование ==== | + | </ |
+ | Модификаторы: | ||
+ | * **I (IGNORECASE)** - регистр | ||
+ | * **M (MULTILINE)** - текст с подстроками, | ||
+ | * **S (DOTALL)** - если указать, | ||
+ | * **X (VERBOSE)** - пробелы и перевод строки игнорируется | ||
+ | Экранирование слешем (\) или в квадратных скобках | ||
<code python> | <code python> | ||
+ | re.compile(r" | ||
+ | re.compile(r" | ||
</ | </ | ||
+ | Символы ^ и $ зависят от модификаторов (M или S), \A и \Z- аналогичные, | ||
<code python> | <code python> | ||
- | </ | + | p= re.compile(r" |
+ | p.findall(" | ||
+ | p= re.compile(r" | ||
+ | p.findall(" | ||
- | ==== Шифрование | + | p= re.compile(r" |
+ | p.findall(" | ||
- | <code python> | + | p= re.compile(r" |
- | </ | + | p.search(" |
- | <code python> | + | # Позиция для поиска |
+ | p= re.compile(r" | ||
+ | p.search(" | ||
+ | |||
+ | p= re.compile(r" | ||
+ | p.search(" | ||
</ | </ | ||
+ | Вместо символов можно использовать классы: | ||
+ | * **\d** - цифры | ||
+ | * **\w** - цифры и буква | ||
+ | * **\s** - любой пробельный символ | ||
+ | * **\D, \W, \S** - тоже самое, ток отрицание | ||
+ | * **\b** - начало слова | ||
+ | * **\B** - не начало слова | ||
- | ===== Регулярные выражения ===== | + | Число вхождений, |
+ | * **{n}, {n,}, {n,m}** - ровно **n**, **n** и более, от **n** до **m** | ||
+ | * ***** - ноль | ||
+ | * **+** - одно или более | ||
+ | * **?** - ни одного | ||
+ | Ищется самая длинная строка, | ||
+ | Получить содержимое тегов '< | ||
+ | <code python> | ||
+ | s= '< | ||
+ | p= re.compile(r"< | ||
+ | p.findall(s) | ||
+ | >> ['< | ||
- | ==== Синтаксис ==== | + | p= re.compile(r"< |
+ | p.findall(s) | ||
+ | >> ['< | ||
- | + | p= re.compile(r" | |
- | <code python> | + | p.findall(s) |
+ | >> [' | ||
</ | </ | ||
- | <code python> | ||
- | </ | ||
- | + | Скобки **группируют фрагменты**, чтобы отбросить из результата сами фрагменты, нужно указать **?:** внутри | |
- | ==== Поиск первого совпадения ==== | + | Например (?:tx) найдет и " |
+ | К найденному фрагменту можно обратится, | ||
+ | Например получим текст между одинаковыми тегами: | ||
<code python> | <code python> | ||
- | </code> | + | s= '< |
+ | p= re.compile(r"< | ||
+ | p.findall(s) | ||
+ | >> [(' | ||
- | <code python> | + | # ?P<name> - для задания имени фрагменту |
+ | s= 'eed 34 dc 3455' | ||
+ | p= re.compile(r" | ||
+ | p.search(s) | ||
+ | p.group(' | ||
+ | >> ' | ||
</ | </ | ||
- | ==== Поиск всех | + | ==== Поиск |
+ | Для этого есть следующе методы (и функции их аналоги): | ||
+ | * **match()** - соответствие с началом строки | ||
+ | * **search()** - соответствие с любой частью строки | ||
+ | * **fullmatch()** - соответствие со всей строкой | ||
+ | |||
+ | Объект **Match** содержит следующие свойства и методы: | ||
+ | * **re** - ссылка на скомпилированный шаблон, | ||
+ | * **groups (groupindex)** - кол-во групп в шаблоне (перечисление в словаре) | ||
+ | * **pattern** - строка с рег выражением | ||
+ | * **flags** - комбинация флагов | ||
+ | * **string** - строка .. оО | ||
+ | * **pos (endpos)** - начальная/ | ||
+ | * **lastindex (lastgroup)** - пар-ры последней группы | ||
+ | * **group (groups, groupdict)** - фрагменты, | ||
+ | * **start (end)** - начало/ | ||
+ | * **span** - кортеж с начальным и конечным индексами фрагмента | ||
+ | * **expand** - замена в строке | ||
- | <code python> | + | ==== Поиск всех совпадений ==== |
- | </ | + | Это так же функции и методы: |
- | + | * **findall()** - возвращает список (строк или кортежей), | |
- | <code python> | + | * **finditer()** - возвращает итератор, |
- | </ | + | |
==== Замена в строке ==== | ==== Замена в строке ==== | ||
+ | Метод **sub()** ищет все совпадения и заменяет указанным значением\\ | ||
+ | sub[< | ||
+ | Внутри нового фрагмента можно использовать **обратные ссылки** типа (\номер элемента \g название группы \g номер группы)\\ | ||
<code python> | <code python> | ||
- | </code> | + | # Поменяем два тега местами |
+ | p= re.compile(r" | ||
+ | print(p.sub(r"< | ||
+ | print(p.sub(r"< | ||
+ | print(p.sub(r"< | ||
- | <code python> | + | # Функция для замены |
- | </ | + | def repl(match): |
+ | x= int(match.group(0)) | ||
+ | x += 10 | ||
+ | return " | ||
- | + | p= re.compile(r" | |
- | ==== Функции и методы ==== | + | print(p.sub(repl, |
- | + | ||
- | + | ||
- | <code python> | + | |
</ | </ | ||
- | <code python> | ||
- | </ | ||
+ | ==== Прочие функции и методы ==== | ||
+ | * **split()** - разбивка строки | ||
+ | * **escape()** - экранирует все символы (re.escape(r" | ||
+ | * **purge()** - очистка кэша рег выражений | ||