Что такое f строки и как их использовать ~ PythonRu
В этом руководстве вы узнаете и увидите на примерах, какие преимущества для форматирования дает использование f-строк в Python.
Вступление
Что такое форматирование строк?
Форматирование строк — это оформление строк с помощью методов форматирования, предложенных конкретным языком программирования. В Python таких несколько, но речь пойдет только об одном: f-строках.
f-строки исполняются при исполнении самой программы. Это работает быстрее других методов.
У f-строк более простой синтаксис в сравнении с другими техниками форматирования Python. Эта особенность будет рассмотрена на примерах.
Синтаксис
Каждая инструкция f-строки состоит из двух частей: символа f
(или F
) и строки, которую нужно форматировать. Строка должна быть в одинарных, двойных или тройных кавычках.
Синтаксис следующий.
f"string"
На месте string
нужно написать предложение, которое требуется отформатировать.
Отображение переменных
Раньше для форматирования использовался метод str.format()
. Новый подход делает все вдвое быстрее.
Переменные в фигурных {}
скобках отображаются в выводе как обычно в print
. Стоит посмотреть на примере.
name = "Pythonru"
type_of_site = "Блог"
print(f"{name} это {type_of_site}.")
Pythonru это Блог.
Все значения переменных отобразились в выводе. С этим все понятно. Вместо f
можно написать F
.
name = "Pythonru"
type_of_site = "Блог"
print(F"{name} это {type_of_site}?")
Pythonru это Блог?
Выражения
Что, если можно было бы выполнять арифметические выражения или вызовы функций в строке? Это удобно. И f-строки позволяют делать это.
Просто вставьте выражение в {}
для исполнения. Оно выполнится при запуске программы. Экономит время и код.
Вот примеры отдельных выражений.
print(f"{2 * 2}")
Также в {}
можно вызвать функцию. Определим функцию greet()
и вызовем ее в f-строке.
def greet(name):
return "Привет, " + name
name = "Олег"
print(f"{greet(name)}")
Привет, Олег
Также можно вызвать определенные заранее методы.
string = "pythonru это блог."
print(f"{string.title()}")
Pythonru Это Блог.
Что еще умеет f-строка? Отображать объект? Да. Работает это так же, как и при выводе переменных.
class Sample: def __init__(self, name, age): self.name = name self.age = age def __str__(self): return f'Имя: {self.name}. Возвраст: {self.age}.'
user= Sample("Игорь", 19)
print(f"{user}")
Имя: Игорь. Возвраст: 19.
Специальные символы
Что делать, если нужно отобразить специальные символы, такие как {}
, \'
, \"
? Они ведь используются в Python для определенных целей. Можно ли использовать экранирование внутри f-строки? Вот ответы на все вопросы.
Кавычки
Можно использовать любые кавычки (одинарные, двойные или тройные) в f-строке. Для их вывода потребуется использовать экранирование. Выражение f-строки не позволяет использовать обратную косую черту. Ее нужно размещать вне {}
.
Рассмотрим на примерах.
name = "Pythonru"
print(f"Привет, \'{name}\'")
print()
print(f"Привет, \"{name}\"")
Привет, 'Pythonru'
Привет, "Pythonru"
Другие кавычки в f-строках.
f'{"Привет, Pythonru"}'
f"{'Привет, Pythonru'}"
f"""Привет, Pythonru"""
f'''Привет, Pythonru'''
{}
также можно включать в тройные кавычки.
В f-строках нельзя использовать обратную косую черту в {}
. Если попробовать, то будет ошибка.
print(f"{\"Pythonru\"}")
Скобки
Двойные скобки нужны, чтобы вывести одни фигурные скобки в f-строке.
print(f"{{Pythonru}}")
{Pythonru}
Если нужно вывести две пары скобок, то в выражении потребуется указать по четыре.
print(f"{{{{Pythonru}}}}")
{{Pythonru}}
Словари
Нужно быть осторожным, работая с ключами словаря в f-строке. Необходимо использовать другие кавычки по отношению к ключам. Они не должны быть теми же, которыми окружена f-строка.
person = {"name": "Игорь", "age": 19} print(f"{person['name']}, {person['age']} лет. SyntaxError: invalid syntax
Строки в Python — Программирование с нуля
В этом уроке вы научитесь создавать, форматировать, изменять и удалять строки в Python. Также вы познакомитесь с различными строковыми операциями и функциями.
Что такое строка в Python?
Строка в Python — это обычная последовательность символов (букв, цифр, знаков препинания).
Компьютеры не имеют дело с символами, они имеют дело с числами (в двоичной системе). Даже если вы видите символы на вашем экране, внутри памяти компьютера он хранится и обрабатываются как последовательность нулей и единиц.
Преобразование символа в число называется кодированием, а обратный процесс — декодированием. ASCII и Unicode — наиболее популярные из кодировок, которые используются для кодирования и декодирования данных.
В Python, строка — это последовательность символов Unicode. Юникод был введен для включения каждого символа на всех языках и обеспечения единообразия в кодировании.
Как создать строку в Python?
блок 1
Строки можно создавать, заключая символы в одинарные или двойные кавычки. Даже тройные кавычки могут использоваться в Python, но они обычно используются для представления многострочных строк и строк документации (docsrting).
# Все способы ниже создают строку my_string = 'Hello' print(my_string) my_string = "Hello" print(my_string) my_string = '''Hello''' print(my_string) # Содержимое внутри тройных кавычек может переноситься на новые строки my_string = """Hello, Python""" print(my_string)
Как получить доступ к символам в строке?
Мы можем получить доступ к отдельным символам, используя индексирование, и диапазон символов, используя срезы. Индекс начинается с 0. Попытка получить доступ к символу вне диапазона индекса вызовет ошибку IndexError. Индекс должен быть целым числом. Мы не можем использовать float или другие типы, это приведет к ошибке TypeError.
Python допускает отрицательную индексацию для своих последовательностей.
Индекс -1 относится к последнему элементу, -2 — ко второму с конца элементу и т.д. Мы можем получить доступ к ряду элементов в строке, используя оператор среза (двоеточие).
str = 'programfiles' print('str = ', str) # Первый символ print('str[0] = ', str[0]) # Последний символ print('str[-1] = ', str[-1]) # Срез, символы со второго по пятый print('str[1:5] = ', str[1:5]) # Срез, символы с шестого по второй с конца print('str[5:-2] = ', str[5:-2])
Как изменить или удалить строку?
Строки относятся к неизменяемым типам данных (immutable type). Это означает, что элементы строки не могут быть изменены после того, как она была создана. Мы можем просто переназначить разные строки одному и тому же имени.
>>> my_string = 'programfiles' >>> my_string[5] = 'a' ... TypeError: 'str' object does not support item assignment >>> my_string = 'Python' >>> my_string ‘Python'
Мы не можем удалять символы из строки. Но полностью удалить строку можно с помощью ключевого слова del.
>>> del my_string[1] ... TypeError: 'str' object doesn't support item deletion >>> del my_string >>> my_string ... NameError: name 'my_string' is not defined
Операции со строками в Python
Есть много операций, которые могут быть выполнены со строкой, что делает ее одним из наиболее часто используемых типов данных в Python.
Конкатенация двух или более строк
Объединение двух или более строк в одну называется конкатенацией. В Python конкатенация выполняется оператором +.
Оператор * может использоваться для повторения строки в течение заданного числа раз.
str1 = 'Hello' str2 ='World!' # Конкатенация (объединение) строк print('str1 + str2 = ', str1 + str2) # Повторение строк print('str1 * 3 =', str1 * 3)
Перебор строк
Пример для подсчета количества символа ‘l’ в строке.
count = 0 for letter in 'Hello World': if(letter == 'l'): count += 1 print(count)
Проверка на наличие символа в строке
Мы можем проверить, существует ли подстрока в строке или нет, используя ключевое слово in.
>>> 'a' in 'programfiles' True >>> 'at' not in 'programfiles' False
Встроенные функции для работы со строками в Python
Различные встроенные функции, которые работают с последовательностью, работают также со строкой.
Некоторые из наиболее часто используемых — это enumerate() и len(). Функция enumerate() возвращает объект перечисления. Он содержит индекс и значение всех элементов в строке в виде пар.
Аналогично, len() возвращает длину (количество символов) строки.
str = 'program' # enumerate() list_enumerate = list(enumerate(str)) print('list(enumerate(str) = ', list_enumerate) # Подсчет кол-ва символов print('len(str) = ', len(str))
Форматирование строк в Python
Экранирование символов
Если внутри строки содержатся символы одинарной и двойной кавычки, то вне зависимости от того, какие кавычки мы использовали для создания строки — мы получим ошибку SyntaxError.
>>> print("She said, "What's there?"") ... SyntaxError: invalid syntax >>> print('She said, "What's there?"') ... SyntaxError: invalid syntax
Один из способов обойти эту проблему — использовать тройные кавычки. В качестве альтернативы мы можем использовать escape-последовательности или так называемое «экранирование символов».
Экранирующая последовательность начинается с обратной косой черты. Если мы используем одинарную кавычку для представления строки, все одинарные кавычки внутри строки должны быть экранированы. Аналогично обстоит дело с двойными кавычками. Вот как это можно сделать для представления приведенного выше текста.
# Тройные кавычки print('''He said, "What's there?"''') # Экранирование одинарных кавычек print('He said, "What\'s there?"') # Экранирование двойных кавычек print("He said, \"What's there?\"")
Использование метода format() для форматирования строк
Метод format(), доступный для строкового объекта, очень универсален и мощен в форматировании строк.10}|{:>10}|».format(‘butter’,’bread’,’ham’) ‘|butter | bread | ham|’
Другие методы для работы со строками в Python
В языке Пайтон имеется большое кол-во различных методов для работы со строками. Если рассматривать их все в этой статье, то она может увеличить раза в три, а то и больше. Подробное описание работы всех методов можно найти в официальной документации к языку на сайте https://python.org/
блок 3
Приемы работы со строками в Python.
Использование текстовых строк str в Python.
Содержание:
Использование одинарных и двойных кавычек в строке.
Язык программирования Python может манипулировать строками, которые могут быть записаны несколькими способами. Текстовые строки могут быть заключены в одинарные кавычки ('...'
) или двойные кавычки ("..."
), что в результате будет одно и то же. Знак обратной косой черты '\'
может использоваться для экранирования кавычек:
# одинарные кавычки >>> 'spam eggs' # 'spam eggs' # используем \' для экранирования кавычки >>> 'doesn\'t' # "doesn't" # или вместо этого, используйте двойные кавычки >>> "doesn't" "doesn't" >>> '"Yes," they said.' # '"Yes," they said.' >>> "\"Yes,\" they said." # '"Yes," they said.' >>> '"Isn\'t," they said.' # '"Isn\'t," they said.'
Правило. Если строка содержит одинарную кавычку и не содержит двойных кавычек, то строка обрамлена двойными кавычками, в противном случае она заключена в одинарные кавычки.
Функция print()
создает более читаемый вывод, опуская заключающие кавычки и печатая экранированные и специальные символы:
>>> '"Isn\'t," they said.' # '"Isn\'t," they said.' >>> print('"Isn\'t," they said.') # "Isn't," they said. # \n означает новую строку >>> s = 'First line.\nSecond line.' # без print(), \n включается в вывод >>> s # 'First line.\nSecond line.' # с помощью print(), \n создает новую строку >>> print(s) # First line. # Second line.
Вывод специальных символов в строке «как есть».
Если необходимо, чтобы символы перед обратной косой чертой '\'
интерпретировались как специальные символы, вы можете использовать необработанные (сырые) строки, добавив 'r'
перед первой кавычкой:
# здесь \n (специальный символ новой строки) # создаст новую строку >>> print('C:\some\name') # C:\some # ame # обратите внимание на букву 'r' перед кавычкой >>> print(r'C:\some\name') # C:\some\name
Использование тройных кавычек в строке.
Строковые литералы могут занимать несколько строк. Одним из способов является использование тройных кавычек: """..."""
или '''...'''
. Конец строк автоматически включается в строку, но это можно предотвратить, добавив \в конец строки. Следующий пример:
print(""" Usage: thingy [OPTIONS] -h Display this usage message -H hostname Hostname to connect to """)
Производит следующий вывод, обратите внимание, что начальный перевод строки не включен:
Usage: thingy [OPTIONS] -h Display this usage message -H hostname Hostname to connect to
Объединение и повторение строк.
Строки могут быть объединены (склеены) оператором '+'
и повторены с помощью '*'
:
# 3 раза "un", затем "ium" >>> 3 * 'un' + 'ium' # 'unununium'
Два или более строковых литерала, те, которые заключены в кавычки рядом друг с другом, автоматически объединяются. # SyntaxError: invalid syntax
Если необходимо объединить переменные или переменную и литерал, используйте знак '+'
:
>>> prefix + 'thon' # 'Python'
Индексация строк, извлечение символа строки по индексу.
Строки могут быть индексированы, причем первый символ имеет индекс 0
. В Python не существует отдельного типа «символ» (char
), символ — это просто строка размером один:
>>> word = 'Python' >>> word[0] # 'P' # символ в позиции 5 >>> word[5] # 'n'
Индексы могут быть отрицательными числами, в этом случае отсчет символов в строке начинается справа, при чем первый символ с права будет будет иметь индекс -1
:
# последний символ >>> word[-1] # 'n' # предпоследний символ >>> word[-2] # 'o' >>> word[-6] # 'P'
Обратите внимание, что, поскольку -0 совпадает с 0, отрицательные индексы начинаются с -1.
Строки Python не могут быть изменены — они принадлежат к неизменяемым типам данных Python. Следовательно, присвоение элемента по индексу позиции в строке приводит к ошибке:
>>> word[0] = 'J' # Traceback (most recent call last): # File "<stdin>", line 1, in <module> # TypeError: 'str' object does not support item assignment >>> word[2:] = 'py' # Traceback (most recent call last): # File "<stdin>", line 1, in <module> # TypeError: 'str' object does not support item assignment
Использование срезов в строках.
В дополнение к индексации, строки поддерживают срезы. Индексирование используется для получения отдельных символов, взятие среза позволяет получить подстроку:
# символы от позиции 0 (включен) до позиции 2 (исключен) >>> word[0:2] # 'Py' # символы от позиции 2 (включен) до позиции 5 (исключен) >>> word[2:5] # 'tho'
Обратите внимание, что начало среза всегда включено, а конец среза всегда исключен. Это гарантирует, что str[:i] + str[i:]
всегда равно str
:
>>> word[:2] + word[2:] # 'Python' >>> word[:4] + word[4:] # 'Python'
Индексы срезов имеют полезные значения по умолчанию. Пропущенный первый индекс по умолчанию равен нулю, пропущенный второй индекс по умолчанию равен размеру/длине разрезаемой строки.
# символы от начала до позиции 2, который исключен >>> word[:2] # 'Py' # символы от позиции 4 - включен, до конца строки >>> word[4:] # 'on' # символы от предпоследнего (включенного) до конца >>> word[-2:] # 'on'
Один из способов запомнить, как работают срезы, состоит в том, чтобы думать об индексах как указатели на промежутки между символами, с левым краем, равным 0
. Тогда правый край последнего символа строки из n
символов имеет индекс n
, например:
+---+---+---+---+---+---+ | P | y | t | h | o | n | +---+---+---+---+---+---+ 0 1 2 3 4 5 6 -6 -5 -4 -3 -2 -1
Первая строка чисел дает положение индексов 0… 6
, второй ряд дает соответствующие отрицательные показатели. Срез от i
до j
состоит из всех символов между ребрами, обозначенными i
и j
соответственно.
Для неотрицательных индексов длина среза является разностью индексов, если оба находятся в пределах границ. Например, длина word[1:3]
составляет 2
.
Попытка использовать индекс, который больше длины строки приведет к ошибке:
# в слове всего 6 символов >>> word[42] # Traceback (most recent call last): # File "<stdin>", line 1, in <module> # IndexError: string index out of range
Однако индексы срезов вне диапазона обрабатываются изящно и не дают ошибок:
>>> word[4:42] # 'on' >>> word[42:] # ''
Если вам нужна другая строка, вы должны создать новую:
>>> 'J' + word[1:] # 'Jython' >>> word[:2] + 'py' # 'Pypy'
Замена символов или подстрок в исходной строке.
Если вам нужно заменить несколько символов в исходной строке, используйте метод str.replace()
. При этом будет все равно создана новая строка, а исходная останется неизменной:
>>> word.replace('P', 'J').replace('thon', 'py') # 'Pypy'
Встроенная функция len()
возвращает длину строки:
>>> s = 'Строковые Методы' >>> len(s) # 16
Смотрите также:
Преобразование строки в число в Python.
В Python нельзя смешивать строковые и числовые типы в таких операторах, как ‘+’, но можно вручную выполнить необходимые преобразования перед выполнением.
Способы изменений и преобразований строк в Python.
Преобразования строки в список или кортеж символов, в множество символов. Преобразование строки в код ASCII и обратно. Преобразование строки в список слов, удаление повторов слов или слов по фрагменту или шаблону.
Создание макета для печати базовыми методами строк в Python.
Когда вам нужно быстрое отображение некоторых переменных для отладки, вы можете преобразовать любое значение в строку с помощью функций repr() или str()
Способы форматирования текстовых строк в Python.
Форматирование строковыми литералами, форматирование методом str.format(), форматирование оператором ‘%’ в стиле языка C.
Строковый тип данных в Python: string
Строка — это некоторая последовательность символов. В языке Python строковые данные имеют формат str.
Строка в Python
Создадим первую текстовую переменную. Для создания строки можно использовать как одинарные, так и двойные кавычки:
>>> s = 'Hello world'
>>> s
'Hello world'
>>> s = "Hello world"
>>> s
'Hello world'
Вывод в Python всегда будет в одинарных кавычках, так как производится перевод двойных кавычек в одинарные.
Проверим тип этой переменной:
>>> type(s)
<class 'str'>
Если необходимо задать большой фрагмент текста, то используются тройные кавычки:
>>> s='''Hello
World!!'''
>>> s
'Hello\nWorld!!'
В данном примере сохранился знак перехода на новую строку (‘\n’).
Преобразование чисел в строки и обратно
Любое число можно преобразовать в строку. Для этого используется функция str() давайте попробуем:
>>> str(1232)
'1232'
>>> str(-0.5)
'-0.5'
Теперь попробуем выполнить обратное действие
>>> s = '123'
>>> int(s)
123
>>> float(s)
123.0
>>> s = '1.23'
>>> float(s)
1.23
>>> int(s)
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
int(s)
ValueError: invalid literal for int() with base 10: '1.23'
Если вид числа не удовлетворяет типу данных, то преобразование не выполняется. Компилятор выдает ошибку вида invalid literal, что в переводе означает недопустимый литерал (символ), из-за наличия точки, то есть данное число является числом с плавающей точкой (float).
Чтобы избежать данной ошибки, в первую очередь необходимо выполнить преобразование в тип float. Если нужно, то затем преобразовываем полученный float в int.
>>> s='0.23'
>>> int(float(s))
0
Основные операции со строками в Python
Длина строки
В Python строка представляет собой массив символов, расположенных в определенной последовательности. Когда мы пишем:
Компьютер представляет это следующим образом:
Воспользуемся функцией len(), чтобы узнать длину строки.
Как и было указано выше, длина данной строки — 11 символов (нумерация начинается с нуля).
Строка является массивом, поэтому мы можем обратиться к каждому отдельному элементу строки, давайте попробуем:
>>> s[2]
'l'
>>> s[4]
'o'
Также можно получить, так называемый срез слова, то есть фрагмент из общей последовательности символов. Для этого нужно указать диапазон:
>>> s='Hello world'
>>> s[2:5]
'llo'
Сложение строк
Давайте попробуем сложить 2 строки:
>>> s1='Hello'
>>> s2='world'
>>> s1+s2
'Helloworld'
Также при сложении можно добавлять не только переменные, которым присвоены строки, но и просто сами строки:
>>> s1='Hello'
>>> s2='world'
>>> s1+' '+s2+"!"
'Hello world!'
Попробуем сложить строки и числа:
>>> s1='number '
>>> s1+1
Traceback (most recent call last):
File "<pyshell#40>", line 1, in <module>
s1+1
TypeError: can only concatenate str (not "int") to str
Строковой тип данных можно складывать только с таким же типом.
Достаточно выполнить преобразование, чтобы получить правильное решение:
Умножение строк
Давайте попробуем выполнить различные умножения: на целое число, на дробное число, на само себя:
>>> s='Hi'
>>> s*2
'HiHi'
>>> s*1.2
Traceback (most recent call last):
File "<pyshell#47>", line 1, in <module>
s*1.2
TypeError: can't multiply sequence by non-int of type 'float'
>>> s*s
Traceback (most recent call last):
File "<pyshell#48>", line 1, in <module>
s*s
TypeError: can't multiply sequence by non-int of type 'str'
Операция умножения в данном случае является дублированием строки. Такое действие можно выполнить только целое число раз, поэтому при умножении на дробное число или на строку выдаёт ошибку.
Умножать строковой тип данных можно только на целые числа.
Курсы Робикс, в которых изучается этот материал.
- Программирование на Python в Minecraft
- Duckietown робот с системой Автопилота
Методы строк в Python
В Python у разных типов данных есть свои методы (функции), специфичные для этого типа данных. И раз уж на прошлом уроке мы начали знакомиться со строками, то никак не пройти и мимо методов строк.
Вызов метода в Python
Для вызова метода, прибавляем точку к переменной, для которой данный метод вызывается, пишем само название метода и передаем в скобочках аргументы.
переменная.метод(аргументы)
Поиск подстроки в строке Python
Для поиска подстроки в строке в Python, есть четыре метода:
- find()
- rfind()
- index()
- rindex()
Метод find() ищет индекс подстроки в строке — возвращает номер позиции символа указанного в аргументах.
>>> s='Найти подстроку'
>>> s.find('и')
4
В случае нескольких символов идущих подряд, Python вернет позицию, с которой начинается полное совпадение.
>>> s.find('под')
6
При обращении к несуществующей подстроке, вернется значение -1.
>>> s.find('ю')
-1
Метод index() тоже ищет подстроку в строке по её индексу, но в случае поиска несуществующей подстроки в отличии от find(), возвращает ошибку ValueError.
Методы rfind() и rindex() ищут подстроку с конца строки — справа.
>>> s.rfind('т')
10
Замена символа в строке
Метод replace() заменяет одни символы на другие, где первым параметром передаем, что заменить. А во втором параметре указываем , на что заменить.
>>> s.replace('ти','**')
'Най** подстроку'
Как удалить символ из строки?
Передадим во втором параметре пустые кавычки.
>>> s.replace('п','')
'Найти одстроку'
Как удалить пробелы в строке?
Первым параметром указываем пробел, а вторым параметром — пустые кавычки.
>>> s.replace(' ','')
'Найтиподстроку'
Разделить строку в Python
По умолчанию метод split() разделяет строку по пробелам и преобразует строку в список. В итоге мы получили список из трех элементов.
>>> h='разбить строку питон'
>>> h.split()
['разбить', 'строку', 'питон']
Разделить строку можно по любому другому символу, для этого передадим нужный символ в параметрах. При этом, сам символ удаляется из списка.
# Пример 1 - разделить по тире "-">>> p='питон-1 питон-2'
>>> p.split('-')
['питон', '1 питон', '2']
# Пример 2 - разделить по букве "t"
>>> c='method split in python'
>>> c.split('t')
['me', 'hod spli', ' in py', 'hon']
Объединить строки в Python
Несмотря на то, что метод join() является не строковым методом. Мы все равно его изучим в рамках данного урока. Поскольку join() в Python выполняет противоположную функцию метода split(). Берет элементы списка и преобразует список в строку. Имя переменной, ссылающейся на список строк — единственный передаваемый параметр метода join(). Перед точкой, мы указали разделитель — пустые кавычки.
>>> a=['1', '2', '3', '4', '5']
>>> ''.join(a)
'12345'# разделитель пробел
>>> ' '.join(a)
'1 2 3 4 5'
# разделитель запятая
>>> ','.join(a)
'1,2,3,4,5'
Метод join() не работает с числовыми данными. Следующая запись приведет к ошибке.
a=[6, 7, 8]
' '.join(a)
Перед использованием метода join(), следует числа привести к строкам.
>>> e=['9', '10']
>>> ' '.join(e)
'9 10'
Верхний регистр строки в Python
Метод upper() приводит все буквы строки к верхнему регистру, не меняя остальных символов.
>>> w='верхний регистр'
>>> w.upper()
'ВЕРХНИЙ РЕГИСТР'
Нижний регистр строки в Python
Метод lower() приводит все буквы строки к нижнему регистру.
>>> r='НИЖНИЙ РЕГИСТР'
>>> r.lower()
'нижний регистр'
Подсчет количества символов
Метод count() считает, сколько раз встречается подстрока в строке, указанная в параметрах.
>>> y="посчитать количество слов"
>>> y.count('о')
3
Проверка символов в строке
Метод isalpha() проверяет, состоит ли строка только из букв и возвращает истину или ложь.
>>> i='толькобуквы'
>>> i.isalpha()
True
Метод isdigit() проверяет, состоит ли строка только из цифр и возвращает истину или ложь.
>>> f='23456hbbn'
>>> f.isdigit()
False
- Создано 30.10.2019 10:53:26
- Михаил Русаков
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Python 3 — Строки | ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)
Строки являются одними из самых популярных типов в Python. Мы можем создать их, просто заключив символы в кавычках. Python рассматривает одиночные кавычки так же, как и двойные кавычки. Создание строк так же просто, как и присвоение значения переменной. Например:var1 = 'Привет мир!' var2 = "программирование на Python"
Доступ к значениям в строках
Python не поддерживает тип символов; они рассматриваются как строки одной длины, таким образом, также считается подстроки.
Чтобы получить доступ к подстроке, используйте квадратные скобки вместе с индексом или индексами, чтобы получить вашу подстроку. Например:
#!/usr/bin/python3 var1 = 'Привет мир!' var2 = "программирование на Python" print ("var1[0]: ", var1[0]) print ("var2[1:5]: ", var2[1:5])
Когда код выполниться, он покажет следующий результат:
var1[0]: П var2[1:5]: ytho
Обновление строк
Вы можете «обновить» существующую строку c присваиванием переменной на другую строку. Новое значение может быть связано с его предыдущим значением или совершенно другой строкой. Например:
#!/usr/bin/python3 var1 = 'Привет мир!' print ("Обновление строки :- ", var1[:6] + 'Python')
Когда код выполниться, получиться следующий результат:
Обновление строки :- Hello Python
Символ Escape
В следующей таблице приведен список escape или непечатаемых символов, которые могут быть представлены с представлением.
Символ escape интерпретируется: в одинарных кавычках, а также в двойных кавычках.
Представление | Шестнадцатеричный символ | Описание |
---|---|---|
\a | 0x07 | Звонок или оповещение |
\b | 0x08 | Backspace |
\cx | Control-х | |
\C-x | Control-х | |
\e | 0x1b | Escape |
\f | 0x0C | Formfeed |
\M- \C-x | Meta-Control-x | |
\n | 0x0a | Новая линия |
\nnn | Восьмеричная запись, где п находится в диапазоне от 0,7 | |
\r | 0x0d | Возврат каретки |
\s | 0x20 | Пробел |
\t | 0x09 | Табуляция |
\v | 0x0B | Вертикальная табуляция |
\x | Символ х | |
\xnn | Шестнадцатеричное, где n находится в диапазоне от 0,9, a.f, или A.F |
Специальные строковые операторы
Предположим, переменная строка а, имеет «Hello» а переменная b равна «Python», тогда:
оператор | Описание | пример |
---|---|---|
+ | Конкатенация – Добавляет значения по обе стороны от оператора | A + B = HelloPython |
* | Повторение – Создает новые строки, объединяя нескольких копий одной и той же строки | а * 2 = HelloHello |
[] | Кусочек – Выдает символ из данного индекса | а [1] = е |
[ : ] | Диапазон среза – Дает символы из заданного диапазона | а [1: 4] = ELL |
in | Возвращает истину, если символ существует в данной строке | Н = 1 |
not in | Возвращает истину, если символ не существует в данной строке | М <> 1 |
r/R | Raw String – Подавляет фактическое значение символов Escape. Синтаксис для необработанных строк точно такой же, как и для обычных строк, за исключением raw строки оператора, буква «r», которая предшествует кавычки. «R» может быть в нижнем регистре (r) или в верхнем регистре (R) и должна быть размещена непосредственно предшествующей первой кавычки. | print r’\n’ печатает \n и print R’\n’печатает \n |
% | Формат – Выполняет форматирование строк | См в следующем разделе |
Оператор форматирования строки
Одна из самых привлекательных особенностей языка Python является оператор форматирования строк %. Этот оператор является уникальным для строк и блоков, имеющие функции из языка C printf(). Ниже приведен простой пример:
#!/usr/bin/python3 print ("Меня зовут %s и мой вес равен %d кг!" % ('AndreyEx', 71))
Когда код выполниться, будет показан следующий результат:
Меня зовут AndreyEx и мой вес равен 71 кг!
Вот полный набор списка символов, которые могут быть использованы вместе с %:
S.No. | Формат символов и преобразование |
---|---|
1 | %c символ |
2 | %s преобразование строки с помощью str() до форматирования |
3 | %i десятичное число |
4 | %d десятичное число |
5 | %u беззнаковое десятичное целое |
6 | %o восьмеричное целое |
7 | %x шестнадцатеричное число (прописные буквы) |
8 | %X шестнадцатеричное число (заглавные буквы) |
9 | %e экспоненциальное (с строчной «х») |
10 | %E экспоненциальное (с «E» в верхнем регистре) |
11 | %f вещественное число с плавающей точкой |
12 | %g наименьшее из %f и %е |
13 | %G наименьшее из% F% и E |
Другие поддерживаемые символы и функции перечислены в следующей таблице:
S.No. | Символ и функциональность |
---|---|
1 | * аргумент определяет ширину или точность |
2 | – выравнивание по левому краю |
3 | + отобразить знак |
4 | <sp> поставить пробел перед положительным числом |
5 | # добавить восьмеричной ведущий ноль ( «0») или шестнадцатеричным ведущий «0x» или «0X», в зависимости от того, был использован «х» или «X». |
6 | 0 заместить слева нулями (вместо пробелов) |
7 | «%%» оставляет вас с одним буквальным «%» |
8 | (var) соотнесение переменных (словарные аргументы) |
9 | m.n. минимальная общая ширина и n число цифр, отображаемых после десятичной точки (если заявл.) |
Тройные кавычки
Тройные кавычки в Python приходят на помощь, позволяя строкам занимать несколько строк, в том числе стенографические символы новой строки, табуляции, а также любые другие специальные символы.
Синтаксис для тройных кавычек состоит из трех последовательных одиночных или двойных кавычек.
#!/usr/bin/python3 para_str = """это длинная строка, которая состоит из несколько строк и непечатаемых символов, таких как TAB ( \t ) и они показывают тот путь, когда отображается. Символы новой строки в строке, прямо как в скобках [ \n ], или просто новую строку с присваиванием переменной также будет отображаться. """ print (para_str)
Когда приведенный выше код выполнится, он произведет следующий результат. Обратите внимание, что каждый специальный символ был преобразован в печатный вид, вплоть до последней новой строки в конце строки между «вверх». и закрытие тройные кавычки. Также отметим, что новая строка происходит либо с явным возвратом каретки в конце строки либо escape кодом (\n):
это длинная строка, которая состоит из несколько строк и непечатаемых символов, таких как TAB ( ) и они показывают тот путь, когда отображается. Символы новой строки в строке, прямо как в скобках [ ], или просто новую строку с присваиванием переменной также будет отображаться.
Неочищенные строки не относятся к обратной косой черты как к специальному символу. Каждый символ, который вы поместили в строку остается так, как вы его написали:
#!/usr/bin/python3 print ('C:\\nowhere')
Когда код выполниться, он выдаст следующий результат:
C:\nowhere
Теперь давайте используем строку. Мы укажем выражение следующим образом:
#!/usr/bin/python3 print (r'C:\\nowhere')
Когда код выполниться, он выдаст следующий результат:
C:\\nowhere
Строки Юникода
В Python 3 все строки представлены в Unicode. В Python 2 хранятся в виде 8-битного ASCII, следовательно, требуется указать «u», чтобы сделать его Unicode. Больше нет необходимости в настоящее время.
Встроенные методы строк
Python включает в себя следующие встроенные методы манипулирования строками:
S.No. | Методы и описание |
---|---|
1 | capitalize() – Прописная первая буква строки |
2 | center(width, fillchar) – Возвращает строку, заполненную с FillChar от исходной строки с центром в общем столбце width. |
3 | count(str, beg = 0,end = len(string)) – Считает, сколько раз str имеет вхождение в строке или в подстроках строки, начиная с индекса str и заканчивается индексом end. |
4 | decode(encoding = ‘UTF-8’,errors = ‘strict’) – Декодирует строку, используя кодек, зарегистрированный для кодирования. кодирования по умолчанию строки по умолчанию кодировке. |
5 | encode(encoding = ‘UTF-8’,errors = ‘strict’) – Возвращает закодированные строки версии строки; при ошибке, по умолчанию вызывает исключение ValueError, если ошибки не указываются с ‘ignore’ or ‘replace’. |
6 | endswith(suffix, beg = 0, end = len(string)) – Определяет, является ли строка или подстроку строки (если начальный индекс нач и заканчивая концом индекса приведены) заканчивается суффиксом; возвращает истину, если так и ложь в противном случае. |
7 | expandtabs(tabsize = 8) – Расширяет вкладки в строке на несколько пробелов; по умолчанию 8 пространств на вкладке, если TabSize не предусмотрено. |
8 | find(str, beg = 0 end = len(string)) – Определить, встречается ли строка в строке или в подстроки строки, если начинается с индекса beg и заканчивается индексом end, индекс возвращается, если найден и -1 в противном случае. |
9 | index(str, beg = 0, end = len(string)) – То же действие, что find(), но вызывает исключение, если строка не найдена. |
10 | isalnum() – Возвращает истину, если строка имеет по крайней мере 1 символ и все символы являются алфавитно-цифровыми и ложью в противном случае. |
11 | isalpha() – Возвращает истину, если строка имеет по крайней мере 1 символ и все символы буквенные и ложь в противном случае. |
12 | isdigit() – Возвращает истину, если строка содержит только цифры и ложь в противном случае. |
13 | islower() – Возвращает истину, если строка имеет по крайней мере 1 символ в нижнем регистре и все символы в нижнем регистре и ложь в противном случае. |
14 | isnumeric() – Возвращает истину, если строка Юникода содержит только числовые символы и ложь в противном случае. |
15 | isspace() – Возвращает истину, если строка содержит только символы пробелов и ложь в противном случае. |
16 | istitle() – Возвращает истину, если строка имеет«titlecased» и ложь в противном случае. |
17 | isupper() – Возвращает истину, если строка имеет по крайней мере один символ в верхнем регистре или все символы в верхнем регистре и ложь в противном случае. |
18 | join(seq) – Слияния (Объединяет) строковых элементов в последовательности seq в строку со строкой разделителя. |
19 | len(string) – Возвращает длину строки |
20 | ljust(width[, fillchar]) – Возвращает space-padded строку в исходную строку с выравниванием влево на итоговую ширину столбцов. |
21 | lower() – Преобразует все прописные буквы в строке в нижний регистр. |
22 | lstrip() – Удаляет начальные пробелы в строке. |
23 | maketrans() – Возвращает таблицу перевода для использования в функции перевода. |
24 | max(str) – Возвращает максимальный алфавитный символ из строки str. |
25 | min(str) – Возвращает минимальный алфавитный символ из строки str. |
26 | replace(old, new [, max]) – Заменяет все вхождения old в строке на new или в большинстве случаев, если max задано. |
27 | rfind(str, beg = 0,end = len(string)) – То же, что find(), но поиск в обратном направлении в строке. |
28 | rindex( str, beg = 0, end = len(string)) – То же, что index(), но поиск в обратном направлении в строке. |
29 | rjust(width,[, fillchar]) – Возвращает space-padded строку из исходной строки, выравнивается по правому краю в количестве width столбцов. |
30 | rstrip() – Удаляет все конечные пробелы из строки. |
31 | split(str=””, num=string.count(str)) – Разделяет строку в соответствии с разделителем str (пробел, если не предусмотрено) и возвращает список из подстроке; разделяет на num подстроку, если дано. |
32 | splitlines( num=string.count(‘\n’)) – Разбивает строку на все (или числа) строки и возвращает список каждой строки с удаленными символами новой строки. |
33 | startswith(str, beg=0,end=len(string)) – Определяет, является ли строка или подстрока в строке (если начальный индекс нач и заканчивается указанием на конец) начинается с подстроки str; возвращает истину, если так и ложь в противном случае. |
34 | strip([chars]) – Выполняет как lstrip() и rstrip() в строке |
35 | swapcase() – Инверсия для всех букв в строке. |
36 | title() – Возвращает «titlecased» версию строки, то есть, все слова начинаются с верхним регистром, а остальное в нижнем регистре. |
37 | translate(table, deletechars=””) – Переводит строку согласно таблице перевода str(256 символов), убрав deletechars. |
38 | upper() – Преобразование строчных букв в строке в верхний регистр. |
39 | zfill (width) – Возвращает исходную строку добавленную слева с нулями с указанной шириной символов; предназначенный для чисел, zfill() сохраняет любой данный знак (менее один ноль). |
40 | isdecimal() – Возвращает истину, если строка содержит только десятичные знаки и ложь в противном случае. |
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Эффективная конкатенация строк в Python
Эффективная конкатенация строк в Python
Оценка эффективности нескольких методов
Введение
Построение длинных строк на языке программирования Python иногда может приводить к в очень медленно работающем коде. В этой статье я исследую вычислительную производительность различных методов конкатенации строк.
В Python строковый объект неизменен — каждый раз, когда строка присваивается переменная, новый объект создается в памяти для представления нового значения.Этот контрастирует с такими языками, как perl и basic, где строковая переменная может быть модифицирован на месте. Общая операция построения длинной струны из нескольких коротких отрезков не является очень эффективен в Python, если вы используете очевидный подход добавления новых сегменты до конца существующей строки. Каждый раз, когда вы добавляете конец строки, интерпретатор Python должен создать новый строковый объект и скопируйте содержимое как существующей строки, так и добавленной строки в Это.По мере того, как струны, которыми вы манипулируете, становятся большими, этот процесс становится все более медленный.
Какие еще методы доступны и какова их эффективность? я решил протестировать несколько разных подходов к построению очень длинных строк чтобы увидеть, насколько они различаются по эффективности.
Для этого сравнения мне потребовалась тестовая задача, которая требует построение очень длинных струн из большого количества сегментов. Он не должен выполнять много других вычислений, так что измеренный производительность зависит только от производительности строковой операции.
Тестовый пример, который я использовал, — это объединение серии целых чисел от нуля до некоторого большого числа. Это число можно легко изменить на варьировать размер производимых струн. Например первые 20 целые числа дали бы нам такую строку:
01234567811213141516171819
Шесть методов
Это методы, которые я тестировал. Каждый из этих шести фрагментов Python вычисляет ту же строку вывода.Метод 1: Простое добавление
def method1 (): out_str = '' для числа в xrange (loop_count): out_str + = `число` вернуться out_str
Для меня это наиболее очевидный подход к проблеме. Используйте объединение
оператор (+ =), чтобы добавить каждый сегмент в строку. loop_count предоставляет номер
используемых строк. Использование обратных кавычек ( -
) вокруг числа
в четвертой строке преобразует целочисленное значение в строку.Вы можете выполнить
то же самое с функцией str (),
но это закончилось
до несколько медленнее, поэтому я придерживался обратных кавычек для всех своих методов.
Как я уже упоминал, хотя этот метод очевиден, он совсем не эффективен.
Вы
можно увидеть в
Результаты ниже, мы выполняли всего 3770 строковых операций в секунду. если ты
нужно делать много конкатенаций, это неправильный способ
Это.
Метод 2: MutableString класс
def method2 (): из UserString импортировать MutableString out_str = MutableString () для числа в xrange (loop_count): out_str + = `число` return out_str
Библиотека python включает в себя класс MutableString.Согласно документации класс предназначен для учебных целей. Один
может подумать, что оператор добавления к изменяемой строке не перераспределит
или скопируйте строки. В тесте этот метод показал себя даже хуже, чем метод
1. Изучив исходный код UserString.py, я обнаружил, что хранилище для
MutableString — это просто член класса строки типа и действительно MutableString
даже не отменяет метод __add__
. Конкатенации с использованием этого класса
не будет быстрее, чем обычные неизменяемые строковые операции, и
действительно дополнительные накладные расходы на интерпретацию методов класса MutableString
сделайте этот подход намного медленнее.
Метод 3: массивы символов
def method3 (): из массива импорта массива char_array = массив ('c') для числа в xrange (loop_count): char_array.fromstring (`число`) return char_array.tostring ()
Я почти не пробовал этот метод вообще
но я видел, что это предложено в списке рассылки, поэтому я решил дать ему кружиться.
Идея состоит в том, чтобы использовать массив символов
для хранения строки. Массивы
изменяемые в python, поэтому их можно изменять на месте, не копируя существующие
содержимое массива.В этом случае нас не интересует изменение существующего массива
элементы. Мы просто хотим добавить новые элементы массива в конец массива.
Вызов fromstring ()
добавляет символ строки за символом
в существующий массив.
Метод 4. Создайте список строк, затем присоедините к нему
def method4 (): str_list = [] для числа в xrange (loop_count): str_list.append (`число`) возврат '' .join (str_list)
Этот подход обычно предлагается как очень питонический способ выполнить конкатенацию строк.Сначала создается список, содержащий каждую из компонентных строк, затем за одну операцию соединения строится строка, содержащая все добавленные элементы списка все вместе.
В последней строке есть забавно выглядящая идиома о питоне — мы называем
join метод объекта, идентифицированного пустой строкой. Не слишком много языков
позволит вам вызывать методы для строкового литерала. Если вы сочтете это оскорблением,
вместо этого вы можете написать: строка.присоединиться (str_list, '')
Метод 5. Запись в псевдофайл
def method5 (): из cStringIO импортировать StringIO file_str = StringIO () для числа в xrange (loop_count): file_str.write (`число`) return file_str.getvalue ()
Модуль cStringIO предоставляет класс StringIO, который работает как файл,
но хранится в виде строки. Очевидно, что добавить к файлу легко — вы просто
напишите в конце, и то же самое верно и для этого модуля.Есть похожий
модуль называется просто StringIO, но реализован на Python, тогда как cStringIO
находится в C. Это должно быть довольно быстро. Используя этот объект, мы можем построить нашу строку
по одной записи за раз, а затем собрать результат с помощью вызова getvalue ()
.
Интересно, что строковые объекты в Java неизменны, как и python. В java есть класс StringBuffer. Это немного мощнее чем подход Python StringIO или массив, потому что он поддерживает вставка и удаление подстрок, а также их добавление.
Метод 6: Составьте список
def method6 (): return '' .join ([`num` вместо числа в xrange (loop_count)])
Этот способ самый короткий. Я испорчу сюрприз и скажу, что он самый быстрый. Он чрезвычайно компактен и
тоже довольно понятно. Создайте список чисел, используя понимание списка
а затем соедините их всех вместе. Что может быть проще? Это действительно
просто сокращенная версия метода 4, и потребляет почти то же
объем памяти.Это быстрее, потому что нам не нужно вызывать функцию list.append ()
каждый раз по кругу.
Результаты
Хотел посмотреть как на длину времени, затраченного на построение строки, и объем памяти, используемый Python интерпретатор во время вычисления. Хотя память дешевая, есть пара причин, почему это может быть важным фактором. Программа на питоне может быть Бег в системе, которая накладывает фиксированные ограничения на ресурсы.Например, в общей сети среда размещения, компьютер может быть настроен на ограничение размера памяти каждого процесс. Обычно ядро убивает процесс, выделенная память которого превышает квота. Это было раздражать за а CGI скрипт, и действительно неудачно для долгоживущего серверного процесса. Так что в тех случаях сохранение памяти использование из-за непредсказуемого расширения важно. Другая причина в том, что когда вы имеете дело с очень большими строками, имея выделение памяти интерпретатора слишком большой может вызвать виртуальный система памяти, чтобы начать выгружать процесс на диск.Затем спектакль действительно будет спускаться с холма. Неважно, найдете ли вы самый быстрый алгоритм в мире — если он использует слишком много памяти, он будет работать медленно, как собака. Если мы использовать алгоритм, который использует меньше памяти, шансы на подкачку уменьшаются и мы будет иметь более предсказуемую производительность.
Я пробовал каждый метод из этих методов как отдельный тест, используя собственный процесс Python.
Я провел эти тесты
используя Python
2.2.1 на 433 МГц PII Celeron под FreeBSD 4.9.
Результат: двадцать тысяч целых чисел
В первом тесте 20 000 целых чисел были объединены в строку 86 КБ долго.
|
Результаты: пятьсот тысяч целых чисел
Затем я попробовал запустить каждый метод, используя 500000 целых чисел, объединенных в строка длиной 2821 КБ.Это гораздо более серьезное испытание, и мы начинаем видеть размер процесса интерпретатора python увеличивается, чтобы вместить структуры данных используется в вычислении.
|
Я даже не потрудился попробовать выполнить этот тест до конца, используя Методы 1 и 2.2). На объединение полмиллиона целых чисел с использованием этих методов.
Сравнивая результаты этого теста с нашим предыдущим графиком, обратите внимание, что количество конкатенаций в секунду меньше для методов 3, 4 и 6. Это не слишком удивительно — строковое представление каждого целого числа в этом тесте немного длиннее — обычно пять цифр вместо четырех. В первом тесте Метод 3 показал себя в десять раз лучше, чем наши первые два. методы, но он не так хорошо масштабировался в более длинном тесте.Сейчас он работает менее 60% от своей предыдущей производительности. Однако он сделал используйте меньше места, чем любой другой разумный метод. Ясно питон отлично справляется с хранением массива и мусора сбор временных строк в этом случае.
Производительность метода 4 более чем в двадцать раз лучше, чем наивное добавление в тесте 20,000, и он неплохо работает также и в тесте 500,000.Интересно, что метод 5 показал лучшие результаты в более длительном тесте. Метод 6 по-прежнему является общим победителем, но метод 5 теперь выполняет больше конкатенаций в секунду и почти догнал Метод 6. Мы можем догадаться, что если мы прошли еще более длительные испытания, метод 5 превзойдет метод 6.
Обратите внимание также на различия в размерах процессов. В конце вычисления для метода 6 интерпретатор использует 22 844 КБ памяти, восемь раз размер строки, которую он вычисляет, тогда как в методах 3 и 5 используется менее половины так много.
Выводы
Я бы использовал метод 6 в большинстве реальных программ. Это быстро и легко понять. Это действительно требует, чтобы вы могли написать одно выражение, которое возвращает каждый ценностей добавить. Иногда это просто не удобно сделать — например, когда есть несколько разных фрагментов кода которые производят вывод. В этих случаях вы можете выбрать метод 4 и Метод 5.
Метод 4 выигрывает в гибкости. Вы можете использовать все обычные операции среза в вашем списке строк для вставки, удаления и модификации. Производительность добавления довольно приличная.
Метод 5 выигрывает по эффективности. Он использует меньше памяти, чем любой из методы списка (4 и 6), и это быстрее, чем даже понимание списка для очень большого количества операций (более около 700 000). Если вы выполнение большого количества строк, добавляющих cStringIO, — это правильный путь.
Измерительная техника
Измерять время, затрачиваемое на выполнение каждого метода, было относительно легко. я использовал модуль синхронизации библиотеки Python для измерения прошедшего времени. Я не пытался для измерения процессорного времени, используемого процессом Python, в отличие от других процессов работает на машине, но машина в то время простаивала, поэтому я не думаю, что это сильно разница.
Использование памяти для измерений было немного сложнее.Python в настоящее время не предоставляет
способ контролировать размер выделенных объектов, поэтому я вместо этого использовал Unix
Команда ‘ps’ для отслеживания размера выделенного процесса. Поскольку размер процесса варьируется
во время выполнения я хотел измерить максимально выделенную память. Сделать это
Я запустил процесс «ps» сразу после завершения вычислений. Вызов ps_stat ()
был
вставляется непосредственно перед возвратом вызова method ()
, чтобы измерить
размер процесса до того, как сборщик мусора начнет уничтожать любые объекты
локально для этой функции.Я запустил немного измененный код
из того, что вы видите выше — результат вычисления был сохранен в строковой переменной
вист ps_stat ()
запустил. Моя реализация ps_stat ()
использует split для разделения
поля, возвращаемые ps, и выбирает размер виртуальной памяти по номеру поля.
Значение 15, вероятно, потребуется изменить для разных версий ps.
Полный код, который я использовал, доступен здесь.
from cStringIO import StringIO
время импорта, команды, os
из sys import argv #..... # определения методов здесь # ..... def ps_stat (): глобальный размер_процесса ps = commands.getoutput ('ps -up' + `pid`) process_size = ps.split () [15] def call_method (число): глобальный размер_процесса time.start () z = eval ('метод' + str (число)) () time.finish () print "метод", число напечатайте "время", число с плавающей запятой (time.micro ()) / 1000000 print "выходной размер", len (z) / 1024, "kb" выведите "размер процесса", process_size, "kb" Распечатать loop_count = 500000 pid = os.getpid () call_method (argv [1])
xrange против диапазона
Я попытался использовать диапазон вместо xrange для предварительного расчета списка чисел. Как ни странно, дальность в любом случае оказалась немного быстрее. В самых быстрых методах разница составила около 1%. Я так не думаю — хорошее оправдание для использования диапазона вместо xrange в целом хотя, поскольку диапазон требует больше памяти, и это с большей вероятностью стать проблемой, чем дополнительный 1% времени прохождения xrange.
Армин Риго недавно утверждал, что xrange можно исключить как отдельную языковую конструкцию если интерпретатор был достаточно умен, чтобы вернуть объект который использует соответствующее резервное хранилище (итератор или список) в зависимости от в контексте. Я считаю этот аргумент убедительным с точки зрения языкового дизайна перспектива, хотя я понятия не имею, насколько сложно реализовать такую оптимизацию было бы.
Работа в будущем
Я хотел бы провести сравнение других языков программирования на этом же задача.Очевидными случаями могут быть perl, php, Java и C. Было бы интересно запустить серию тестов, используя увеличивающиеся размеры строк и графически отобразите эти результаты.
Редакции
2004-05-01 | Отредактированные и переупорядоченные разделы |
2004-04-07 | Оригинальная версия |
Сравнение строк с использованием Python
В Python строки — это последовательности символов, которые фактически хранятся в памяти как объект.Каждый объект можно идентифицировать с помощью метода id ()
, как вы можете видеть ниже. Python пытается повторно использовать в памяти объекты с одинаковым значением, что также позволяет очень быстро сравнивать объекты в Python:
$ питон
Python 2.7.9 (по умолчанию, 29 июня 2016 г., 13:08:31)
[GCC 4.9.2] в linux2
Для получения дополнительной информации введите «помощь», «авторские права», «кредиты» или «лицензия».
>>> a = "abc"
>>> b = "abc"
>>> c = "def"
>>> print (id (a), id (b), id (c))
(139949123041320, 139949123041320, 1399491223)
>>> выйти ()
Для сравнения строк Python предлагает несколько разных операторов для этого.Сначала мы объясним их более подробно ниже. Во-вторых, мы рассмотрим модули string
и re
, которые содержат методы для обработки нечувствительных к регистру и неточных совпадений. В-третьих, для работы с многострочными строками очень удобен модуль difflib. Ряд примеров поможет вам понять, как их использовать.
Операторы == и! =
В качестве основного оператора сравнения вы захотите использовать ==
и ! =
. Они работают точно так же, как и с целыми числами и значениями с плавающей запятой.Оператор ==
возвращает True
, если есть точное совпадение, в противном случае будет возвращено False
. Напротив, оператор ! =
возвращает True
, если совпадений нет, и в противном случае возвращает False
. Листинг 1 демонстрирует это.
В цикле для
строка, содержащая название швейцарского города «Лозанна», сравнивается с записью из списка других мест, и результат сравнения выводится на стандартный вывод.
Листинг 1:
# определить строки
listOfPlaces = ["Берлин", "Париж", "Лозанна"]
currentCity = "Лозанна"
для места в listOfPlaces:
print ("сравнение% s с% s:% s"% (place, currentCity, place == currentCity))
При запуске скрипта Python сверху результат будет следующим:
$ python3 comparing-strings.py
сравнение Берлина с Лозанной: Неверно
сравнение Парижа с Лозанной: Неверно
сравнение Лозанны с Лозанной: Верно
==
и - это
Операторы
Python имеет два оператора сравнения: ==
и -
.На первый взгляд они кажутся одинаковыми, но на самом деле это не так. ==
сравнивает две переменные на основе их фактического значения. Напротив, оператор is
сравнивает две переменные на основе идентификатора объекта и возвращает True
, если две переменные относятся к одному и тому же объекту.
Следующий пример демонстрирует это для трех переменных с целыми значениями. Две переменные a
и b
имеют одинаковое значение, и Python обращается к одному и тому же объекту, чтобы минимизировать использование памяти.
>>> а = 1
>>> b = 1
>>> c = 2
>>> а это б
Правда
>>> а есть с
Ложь
>>> id (а)
10771520
>>> id (b)
10771520
Как только значение изменится, Python повторно создаст объект и назначит переменную. В следующем фрагменте кода b
получает значение 2, а затем b
и c
относятся к одному и тому же объекту.
>>> б = 2
>>> id (b)
10771552
>>> id (c)
10771552
Практическое правило — использовать ==
при сравнении неизменяемых типов (например, целых чисел), а -
при сравнении объектов.
Другие операторы сравнения
Для сравнения лексикографического порядка вы можете использовать операторы сравнения <
, >
, <=
и > =
. Само сравнение проводится посимвольно. Порядок зависит от порядка символов в алфавите. Этот порядок зависит от таблицы символов, которая используется на вашем компьютере при выполнении кода Python.
Имейте в виду, что порядок чувствителен к регистру.Например, латинский алфавит: «Автобус» стоит перед «автобусом». Листинг 2 показывает, как эти операторы сравнения работают на практике.
Листинг 2:
# определить строки
listOfPlaces = ["Берлин", "Париж", "Лозанна"]
currentCity = "Лозанна"
для места в listOfPlaces:
если место currentCity:
print ("% s идет после% s"% (place, currentCity))
еще:
print ("% s похож на% s"% (place, currentCity))
При запуске скрипта Python сверху результат будет следующим:
$ python3 для сравнения строк-порядка.ру
Берлин предшествует Лозанне
Париж приходит после Лозанны
Лозанна похожа на Лозанну
Сравнение без учета регистра
Предыдущие примеры были сосредоточены на точном совпадении строк. Чтобы разрешить регистр без учета регистра
Python Strings
В Python строка - это тип данных, который обычно используется для представления текста. Строка может быть любой серией символов, включая буквы, цифры, пробелы и т. Д.
В большинстве языков (включая Python) при присвоении переменной строка должна быть заключена в одинарные кавычки ( '
) или двойные кавычки ( «
).
Все следующие строки являются строками, назначаемыми переменной:
a = "Привет" b = "Привет!" c = "742 Вечнозеленая терраса" d = "1234" e = "'Какова длина веревки?' он спросил" f = "'! $ * # @ you!' она ответила "
Итак, если мы распечатаем их, это будет выглядеть так:
Результат
Привет Привет всем! 742 Evergreen Terrace 1234 «Какова длина веревки?» он спросил '! $ * # @ you!' она ответила
Вернуть длину строки
Для возврата длины строки можно использовать функцию len ()
.Для этого просто передайте строку в качестве аргумента функции.
Результат
3
Числа в строках
Если вам нужно хранить числа, над которыми могут производиться вычисления, не превращайте их в строку.Есть разница между следующими двумя объявлениями:
а = 1 a = "1"
В первой строке значение 1
- это число. Во второй строке это строка.
Включение чисел в строку просто делает их частью этой строки. Таким образом, вы не можете складывать два числа, если они на самом деле являются строкой.При использовании со строками арифметические операторы имеют другое назначение. Например, при работе с числами знак плюса ( +
) складывает два числа вместе, но при работе со строками он объединяет строки вместе.
Так делаем это:
печать (1 + 2) print ("1" + "2")
Результатов в этом:
Первая строка представляет собой результат сложения двух чисел .Вторая строка является результатом объединения двух строк .
Определение чисел в строках
Python включает функции, которые позволяют определять, состоит ли строка только из чисел. В частности, он включает в себя функции isnumeric ()
, isdigit ()
и isdecimal ()
. Это позволяет вам уточнить тип числа, содержащегося в строке.
Эти функции возвращают true
, если все символы в строке совпадают (и есть хотя бы один символ).В противном случае они возвращают false
.
Вот пример использования isnumeric ()
:
Результат
Ложь Правда
Функция isnumeric ()
является широкой и включает все результаты, которые будут возвращены функциями isdigit ()
и isdecimal ()
.
Цитаты в строках
Если вы сделаете это, вы получите сообщение об ошибке:
e = "Еще раз он спросил:" Какова длина веревки? ""
Вы получите сообщение об ошибке, потому что строка заключена в двойные кавычки, но сама строка также содержит двойные кавычки.Та же проблема возникнет, если вы используете одинарные кавычки для обеих целей.
В этом случае вы можете использовать обратную косую черту ( \
), чтобы экранировать символы кавычек внутри строки.
В Python обратная косая черта используется для экранирования символов, которые в противном случае имеют особое значение, например, кавычки, новой строки, табуляции и даже самой обратной косой черты.
Итак, мы можем изменить приведенный выше код на этот:
e = "Он снова спросил: \" Какова длина веревки? \ "" print (e)Результат
Он снова спросил: "Какова длина веревки?"
Другой способ решения этой проблемы - использовать двойные кавычки для заключения строки, но одинарных кавычек внутри строки (или наоборот).
e = "Он снова спросил:" Какова длина веревки? "" # ИЛИ ЖЕ e = 'Он снова спросил: «Какова длина веревки?» »
Строки, состоящие из нескольких строк
Есть несколько разных способов сделать строку из нескольких строк.
Последовательность побега
Так же, как мы использовали обратную косую черту, чтобы избежать двойных кавычек, мы можем использовать escape-последовательность, чтобы заставить строку занимать несколько строк.
msg = "ВНИМАНИЕ! \ nДля тех, кто собирается радоваться, мы приветствуем вас!" print (msg)Результат
ВНИМАНИЕ! Для тех, кто собирается радоваться, мы приветствуем вас!
Тройные цитаты
Вы также можете использовать тройные кавычки для заключения строк, занимающих несколько строк.Это особенно удобно, если у вас много строк, так как избавляет от необходимости ставить обратную косую черту в конце каждой строки.
Таким образом, вы можете использовать тройные двойные кавычки:
msg = "" "Эта строка пролеты несколько строк "" " печать (сообщение)
Или тройные одинарные кавычки
msg = '' 'Эта строка пролеты несколько строк '' ' печать (сообщение)
И результат такой:
Результат
Эта строка пролеты несколько строк
Последовательности побега
Вот таблица управляющих последовательностей, доступных в Python:
Последовательность побега | Описание |
---|---|
\ новая строка | Обратная косая черта и новая строка игнорируются |
\ | Обратная косая черта ( \ ) |
\ ' | Одинарная кавычка ( ' ) |
\ " | Двойная кавычка ( " ) |
\ а | Звонок ASCII (BEL) |
\ б | ASCII Backspace (BS) |
\ f | ASCII Formfeed (FF) |
\ п | ASCII перевод строки (LF) |
\ r | ASCII возврат каретки (CR) |
\ т | Горизонтальная вкладка ASCII (TAB) |
\ v | Вертикальная табуляция ASCII (VT) |
\ ooo | Знак с восьмеричным числом ооо |
\ xhh | Символ с шестнадцатеричным значением hh |
Некоторые escape-последовательности распознаются только в строковых литералах.Это:
Последовательность побега | Описание |
---|---|
\ N {имя} | Персонаж с именем имя в базе данных Unicode |
\ uxxxx | Символ с 16-битным шестнадцатеричным значением xxxx . Требуется ровно четыре шестнадцатеричных цифры. |
\ Uxxxxxxxx | Символ с 32-битным шестнадцатеричным значением xxxxxxxx .Требуется ровно восемь шестнадцатеричных цифр. |
Как получить доступ к части строки
Вы можете получить доступ к одному символу из вашей строки следующим образом:
planet = "Юпитер" print (planet [2])Результат
п.
Причина, по которой была возвращена буква p , заключается в том, что мы указали 2
в качестве индекса внутри квадратных скобок.Python использует индексирование с нуля (т.е. он начинает отсчет с нуля - например, 0, 1, 2, 3
и т.д.), поэтому в результате печатается третья буква.
Вы можете получить диапазон символов, используя две цифры, разделенные двоеточием. Как это:
planet = "Юпитер" print (планета [2: 5])Результат
приямок
Оператор форматирования строк
Символ %
имеет особое значение в строках Python.Его можно использовать в качестве заполнителя для другого значения, вставляемого в строку. Символ %
- это префикс к другому символу, который определяет тип значения, которое нужно вставить.
Работает так:
print ("Здравствуйте,% s, вы набрали% i из% i"% ("Homer", 3, 100))Результат
Привет, Гомер, вы набрали 3 балла из 100
Итак, мы использовали % s
там, где мы хотели вставить строку, и % i
для целого числа.Значения указываются после %
после конца строки.
Манипулирование строками в Python | Историк программирования
Содержание
Цели урока
Этот урок представляет собой краткое введение в техники манипулирования струнами в Python. Умение управлять струнами играет решающую роль в большинстве задачи обработки текста. Если вы хотите поэкспериментировать со следующими уроков, вы можете писать и выполнять короткие программы, как мы делали в предыдущих уроках этой серии, или вы можете открыть оболочку / терминал Python, чтобы опробовать их на командная строка.
Управление строками Python
Если вы уже знакомы с другим языком программирования, вы могли бы узнать, что вам нужно объявить переменные типа или , прежде чем вы в них можно хранить что угодно. В этом нет необходимости при работе с строки в Python. Мы можем создать строку, просто поместив содержимое заключенный в кавычки со знаком равенства (=):
Строковые операторы: сложение и умножение
Строка - это тип объекта, который состоит из ряда персонажей.Python уже знает, как бороться с рядом универсальных и мощных представлений, в том числе струны. Один из способов манипулировать строками - использовать строковые операторы . Эти операторы представлены символами, которые вы, вероятно, ассоциируете с математикой, например +, -, *, / и =. При использовании со струнами они выполняют действия, которые похожи, но не совпадают с их математические аналоги.
Конкатенат
Этот термин означает соединение строк вместе.Процесс известен как объединяет строк, и это выполняется с помощью оператора плюс (+). Запись что вы должны четко указать, где должны быть пробелы, помещая их также в одинарные кавычки.
В этом примере строка «message1» получает содержимое «hello Мир".
message1 = 'привет' + '' + 'мир'
печать (сообщение1)
-> привет мир
Умножить
Если вам нужно несколько копий строки, используйте умножение (*) оператор.В этом примере строке message2a дается содержимое «Hello»
Учебные пособия и заметки по струнам | Python
Строка Python:
Строки - это последовательности символов. Ваше имя можно рассматривать как строку. Или, скажем, вы живете в Замбии, тогда ваша страна называется «Замбия»
, что представляет собой строку.
В этом руководстве вы увидите, как строки обрабатываются в Python, различные способы представления строк в Python и способы использования строк в вашем коде.
Как создать строку и присвоить ее переменной
Чтобы создать строку, поместите последовательность символов в одинарные, двойные или тройные кавычки, а затем присвойте ее переменной. Вы можете узнать, как работают переменные в Python, в учебнике по переменным Python.
Например, вы можете присвоить символ «а» переменной single_quote_character
. Обратите внимание, что строка представляет собой один символ, заключенный в одинарные кавычки.
>>> single_quote_character = 'a'
>>> печать (одиночный_цифровый_символ)
а
>>> print (type (single_quote_character)) # проверяем тип переменной.<класс 'str'>
Точно так же вы можете назначить одиночный символ переменной double_quote_character
. Обратите внимание, что строка состоит из одного символа, но «заключена» в двойные кавычки.
>>> double_quote_character = "b"
>>> print (двойной_цифтовый_символ)
б
>>> print (тип (двойной_цифтовый_символ))
<класс 'str'>
Также проверьте, можете ли вы присвоить переменной последовательность символов или несколько символов.Вы можете назначать как последовательности одинарных кавычек, так и последовательности двойных кавычек.
>>> double_quote_multiple_characters = "aeiou"
>>> single_quote_multiple_characters = 'aeiou'
>>> print (тип (двойные_циваты_множественные_символы), тип (одиночные_цифровые_множественные_символы))
<класс 'str'> <класс 'str'>
Интересно, что если вы проверите эквивалентность одного другому с помощью ключевого слова is
, оно вернет True.
>>> print (double_quote_multiple_characters равно double_quote_multiple_characters)
Правда
Взгляните на присвоение строк с использованием тройных кавычек и проверьте, принадлежат ли они также к классу str
.
>>> triple_quote_example = "" "это предложение, написанное в тройных кавычках" ""
>>> print (введите (тройной_цифтовый_пример))
<класс 'str'>
В приведенных выше примерах функция типа
используется для отображения базового класса, к которому будет принадлежать объект. Обратите внимание, что все переменные, которые были инициированы одинарными, двойными или тройными кавычками, принимаются как строки. Вы можете использовать одинарные и двойные кавычки для одной строки символов.Несколько строк обычно заключаются в тройные кавычки.
Строковые общие методы
2 возвращается, потому что позиция отдельных букв в строках имеет нулевой индекс. Таким образом, индекс «a» в «abcde» равен 0, индекс «b» равен 1 и так далее.
Проверяет, является ли подстрока членом большей строки. Это делается с помощью ключевого слова
в
и написания теста. Скелет показан ниже.подстрока в строке
>>> # например, проверить, присутствует ли строка "i" в строке "pythonic" хотя бы один раз.«i» присутствует в строке. Следовательно, результат должен быть верным. >>> "я" в "питоническом" Правда >>> # поскольку "x" не присутствует в строке "pythonic", приведенный ниже тест должен вернуть false >>> «x» в «pythonic» # «x» отсутствует в «pythonic» Ложь
Присоединитесь к списку строк, используя метод соединения. Список строк записывается путем разделения последовательности запятой
,
и заключения всей группы скобками[...]
.Для более подробного руководства по спискам перейдите к руководству по спискам Python. Вы можете присоединиться к списку строк, указав разделитель в качестве объекта, на который будет действовать методjoin
, и список строк в качестве аргумента.>>> # объединить список строк 1, 2, 3 с пробелом в качестве разделителя и 1,2,3 в качестве списка строк. Итак, результатом будут строки с пробелами между ними. >>> Combined_string = "" .join (["1", "2", "3"]) '1 2 3'
Разорвать строку по некоторому правилу.Он принимает строку как объект, которому передается метод
split
с использованием оператора точки. При разделении в качестве параметра по умолчанию используется пробел.
Например, вы можете разделить строку на основе пробелов между отдельными значениями.
>>> # разделить строку «1 2 3» и вернуть список чисел.
>>> "1 2 3" .split () # разделение
['1', '2', '3']
Или вы можете разделить строку на основе разделителя, например :
.
>>> «1: 2: 3» .split («:»)
[‘1’, ‘2’, ‘3’]
Форматирование в строке:
Строковый объект можно форматировать. Вы можете использовать % s
как средство форматирования, которое позволит вам вставлять различные значения в строку во время выполнения и, таким образом, форматировать строку. Символ % s
заменяется тем, что передается в строку.
>>> print ("Я люблю% s в% s"% ("программирование", "Python")) # шаблонные строки
'Я люблю программировать на Python'
Вы также можете использовать ключевое слово в формате
.Это позволит вам установить собственные средства форматирования вместо % s
.
>>> print ("Я люблю {программирование} на {python}". Формате (программирование = "программирование", python = "Python"))
'Я люблю программировать на Python'
Проверка истинности строки
Строка в Python считается верной, если это не пустая строка. Итак, получаем следующее:
# Проверить значение истинности пустой строки
>>> print (bool (""))
Ложь
# Проверить значение истинности непустой строки "x"
>>> print (bool ("x"))
Правда
Предоставил: Джойдип Бхаттачарджи
строка - Работа с текстом
Назначение: | Содержит константы и классы для работы с текстом. |
---|---|
В наличии: | 2,5 |
Строковый модуль восходит к самым ранним версиям Python. В версии 2.0 многие ранее реализованные функции только в модуле были перенесены методы str и объекты юникода. Устаревшие версии этих функций все еще доступны, но их использование не рекомендуется, и они будут исключены из Python 3.0. Строковый модуль по-прежнему содержит несколько полезных константы и классы для работы со строковыми и юникодными объектами, это обсуждение будет сосредоточено на них.
Константы
Константы в строковом модуле могут использоваться для указания категорий символов, таких как буквы ascii и цифры. Несколько из константы, такие как строчные, зависят от языка, поэтому значение изменения, отражающие языковые настройки пользователя. Другие, такие как шестнадцатеричные цифры, не меняются при изменении локали.
строка импорта для n в каталоге (строка): если n.startswith ('_'): Продолжить v = getattr (строка; n) если isinstance (v, basestring): печать '% s =% s'% (n, repr (v)) Распечатать
Большинство названий констант не требуют пояснений. _` {|} ~ \ t \ n \ r \ x0b \ x0 punctuation = '! "# $% & \' () * +, -._` {|} ~ ' верхний регистр = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' пробел = '\ t \ n \ x0b \ x0c \ r'
Функции
Две функции не выходят из строки модуль. capwords () делает все слова в строке заглавными.
строка импорта s = 'Быстрая коричневая лисица перепрыгнула через ленивого пса.' печать с напечатать string.capwords (s)
Результаты такие же, как если бы вы вызвали split () с заглавной буквы. слова в результирующем списке, затем вызывается join () для объединения результаты.
$ python string_capwords.py Быстрая, коричневая лиса, перепрыгнула через ленивого пса. Быстрая, коричневая лиса, перепрыгнула через ленивого пса.
Другая функция создает таблицы перевода, которые можно использовать с метод translate () для изменения одного набора символов на еще один.
строка импорта leet = string.maketrans ('abegiloprstz', '463611092572') s = 'Быстрая коричневая лисица перепрыгнула через ленивого пса.' печать с напечатать s.translate (leet)
В этом примере некоторые буквы заменены их альтернативными числами l33t.
$ python string_maketrans.py Быстрая, коричневая лиса, перепрыгнула через ленивого пса. Th4 qu1ck 620wn f0x jum93d 0v32 7h4 142y d06.
шаблоны
Шаблоны строкбыли добавлены в Python 2.4 как часть PEP 292 и предназначены как альтернатива встроенной интерполяции синтаксис. При интерполяции string.Template переменные идентифицируется по имени с префиксом $ (например, $ var) или, если необходимо выделить их из окружающего текста, они также могут быть обернут фигурными скобками (напр.g., $ {var}).
В этом примере сравнивается простой шаблон с аналогичной строкой установка интерполяции.
строка импорта значения = {'var': 'foo'} t = string.Template ("" " $ var $$ $ {var} iable "" ") print 'TEMPLATE:', t.substitute (значения) s = "" " % (var) s %% % (var) siable "" " print 'INTERPLOATION:', s% значений
Как видите, в обоих случаях триггерный символ ($ или%) сбежал, повторив его дважды.
$ python string_template.py ШАБЛОН: фу $ надежный ИНТЕРПЛЯЦИЯ: фу % надежный
Одно ключевое отличие между шаблонами и стандартной строковой интерполяцией в том, что не учитывается тип аргументов.В значения преобразуются в строки, и строки вставляются в результат. Параметры форматирования недоступны. Например, нет способ контролировать количество цифр, используемых для представления плавающей запятой значение.
Однако преимущество заключается в том, что при использовании safe_substitute () метод, можно избежать исключений, если не все значения необходимые для шаблона, предоставляются в качестве аргументов.
строка импорта значения = {'var': 'foo'} t = string.Template ("$ var здесь, но $ missing не указан") пытаться: print 'ШАБЛОН:', т.заменитель (значения) кроме KeyError, ошибка: напечатать 'ERROR:', str (err) print 'TEMPLATE:', t.safe_substitute (значения)
Поскольку в словаре значений нет значения для пропущенного, KeyError вызывается замена(). Вместо того, чтобы выдавать ошибку, safe_substitute () ловит его и оставляет переменную одно только выражение в тексте.
$ python string_template_missing.py ШАБЛОН: ОШИБКА: "отсутствует" ШАБЛОН: foo здесь, но $ missing не указан
Расширенные шаблоны
Если синтаксис по умолчанию для строки.Шаблон не для вашего нравится, вы можете изменить поведение, отрегулировав обычный шаблоны выражений, которые он использует для поиска имен переменных в шаблоне тело. Простой способ сделать это - изменить разделитель , и idpattern атрибутов класса.
строка импорта класс MyTemplate (string.Template): разделитель = '%' idpattern = '[а-я] + _ [а-я] +' t = MyTemplate ('%%% with_underscore% notunderscored') d = {'with_underscore': 'заменено', 'notunderscored': 'не заменено', } печать т.safe_substitute (г)
В этом примере идентификаторы переменных должны включать подчеркивание где-нибудь в середина, поэтому% notunderscored ничем не заменяется.
$ python string_template_advanced.py % заменено% notunderscored
Для более сложных изменений вы можете переопределить атрибут шаблона и определить совершенно новое регулярное выражение. Предоставленный образец должен содержат четыре именованные группы для захвата экранированного разделителя, именованная переменная, версия имени переменной в фигурных скобках и недопустимый шаблоны-разделители.
Давайте посмотрим на шаблон по умолчанию:
строка импорта t = строка.Шаблон ('$ var') печать t.pattern.pattern
Поскольку t.pattern - это скомпилированное регулярное выражение, мы должны получить доступ к его атрибуту шаблона, чтобы увидеть фактическую строку.
$ python string_template_defaultpattern.py \ $ (?: (? P\ $) | # Escape-последовательность из двух разделителей (? P [_a-z] [_ a-z0-9] *) | разделитель # и идентификатор Python {(? P <в скобках> [_a-z] [_ a-z0-9] *)} | # разделитель и идентификатор в фигурных скобках (? P ) # Другие некорректные выражения-разделители )
Если мы хотим создать новый тип шаблона, например, {{var}} в качестве синтаксиса переменной, мы могли бы использовать такой шаблон:
импорт ре строка импорта класс MyTemplate (строка.Шаблон): delimiter = '{{' шаблон = г '' ' \ {\ {(?: (? P\ {\ {) | (? P [_a-z] [_ a-z0-9] *) \} \} | (? P <в скобках> [_a-z] [_ a-z0-9] *) \} \} | (? P <недействительный>) ) '' ' t = MyTemplate ('' ' {{{{ {{var}} '' ') print 'MATCHES:', t.pattern.findall (t.template) напечатайте 'SUBSTITUTED:', t.safe_substitute (var = 'replace')
Нам все еще нужно предоставить как именованные, так и фигурные скобки, даже хотя они такие же. Вот результат:
$ python string_template_newsyntax.ру СООТВЕТСТВИЯ: [('{{', '', '', ''), ('', 'var', '', '')] ЗАМЕНЕНО: {{ замена
Устаревшие функции
Информация об устаревших функциях перенесена в строку и классы юникода, см. строковые методы в руководство.
.