- Python: Кавычки
- Задание
- Python: экранирование кавычек
- Одинарные и двойные кавычки — базовое использование
- Варианты экранирования
- Тройные кавычки
- Обозначение строк, содержащих одинарные и двойные кавычки
- Многострочные строки
- Выводы
- Одинарные и двойные кавычки
- Тройные кавычки:
- Как написать игру на Python3
- Самоучитель Python3 для начинающих
- Глава 5.4 Одинарные и двойные кавычки в Python3
- Заключение.
- Как правильно добавить кавычки в строку с помощью Python?
- 4 ответа
- Ваша проблема противоречива.
- Python: советы, уловки, хаки (часть 1)
- 1 Маленькие уловки
- 2 Списки
Python: Кавычки
Какие из этих пяти вариантов — строки?
С первыми двумя все понятно, это точно строки, мы уже работали с подобными конструкциями и говорили, что строки — это наборы символов.
Любой одиночный символ в кавычках — это строка. Пустая строка » — это тоже строка. То есть строкой мы считаем всё, что находится внутри кавычек, даже если это пробел, один символ или вообще отсутствие символов.
Ранее в уроках мы записывали строки в одинарных кавычках, но это не единственный способ. Можно использовать и двойные:
Теперь представьте, что вы хотите напечатать строчку Dragon’s mother. Апостроф перед буквой s — это такой же символ, как одинарная кавычка. Попробуем:
Такая программа не будет работать. С точки зрения Python строчка началась с одинарной кавычки, а потом закончилась после буквы n. Дальше были символы s mother без кавычек — значит, это не строка. А потом была одна открывающая строку кавычка, которая так и не закрылась: ‘) . Этот код синтаксически некорректен (это видно даже по тому, как подсвечен код).
Здесь нам помогут именно двойные кавычки. Такой вариант программы отработает корректно:
Теперь интерпретатор знает, что строка началась с двойной кавычки — значит и закончиться должна на двойной кавычке. А одинарная кавычка внутри стала частью строки.
Верно и обратное. Если внутри строки мы хотим использовать двойные кавычки, то саму строку надо делать в одинарных. Причем количество кавычек внутри самой строки не важно.
А что, если мы хотим создать такую строку:
В ней есть и одинарные и двойные кавычки. Как быть в этой ситуации? Нужно каким-то образом указать интерпретатору считать каждую кавычку частью строки, а не началом или концом строки.
Для этого используют символ экранирования: \ (обратный слэш). Если поставить \ перед кавычкой (одинарной или двойной), это скажет интерпретатору о том, что кавычку нужно рассматривать не как начало или конец строки, а как часть строки.
Посмотрите внимательно: нам нужно было добавить \ для двойных кавычек, но не для одинарной (апостроф), потому что сама строка создана с двойными кавычками. Если бы строка создавалась с одинарными кавычками, то символ экранирования нужен был бы перед апострофом, но не перед двойными кавычками.
Задание
Напишите программу, которая выведет на экран:
Программа должна вывести на экран эту фразу в точности. Обратите внимание на кавычки в начале и в конце фразы:
Источник
Python: экранирование кавычек
В этой краткой статье рассматривается использование одинарных, двойных и тройных кавычек в Python.
Одинарные и двойные кавычки — базовое использование
Чаще всего одинарные и двойные кавычки в Python используются при создании строк. В них заключается последовательность символов.
Строки, созданные с помощью одинарных и двойных кавычек, идентичны. Но нельзя их смешивать, так как это приведет к синтаксической ошибке.
Варианты экранирования
В Python если строка содержит специальные символы, такие как кавычки, мы должны экранировать их. Пример неправильного использования:
Чтобы не допустить эту ошибку, нужно экранировать одиночную кавычку, поставив перед ней обратную косую черту. Также можно использовать двойные кавычки вместо одинарных для обозначения строки:
Если строка содержит двойные кавычки, можно использовать одинарные. Тогда не придется экранировать двойные кавычки. Пример:
Но если в строке есть одинарные и двойные кавычки, и вы не экранируете содержащие строку, это приведет к синтаксической ошибке.
Тройные кавычки
Обозначение строк, содержащих одинарные и двойные кавычки
Мы можем использовать тройные кавычки (то есть три одинарные кавычки или три двойные кавычки) для представления строк с одинарными и двойными кавычками, чтобы исключить необходимость экранирования любых кавычек.
К огда строка начинается или заканчивается одинарной (двойной) кавычкой, и мы хотим использовать тройные кавычки для обозначения строки, нужно применять те, которые отличаются от начальной или конечной .
Например, для строки в приведенном выше коде использование тройных двойных кавычек приведет к синтаксической ошибке. Поэтому необходимо использовать тройные одинарные кавычки.
Многострочные строки
Также тройные кавычки используются для представления многострочной строки. Пример:
Этого же можно добиться, используя символ n для создания многострочных строк. Но это затрудняет чтение строки. А использование тройных кавычек позволяет записать строку так, как она есть.
Мы сразу видим, что является многострочным комментарием для функции.
Выводы
В этой статье мы рассмотрели применение одинарных, двойных и тройных кавычек в Python. Краткий обзор вариантов использования:
Одинарные и двойные кавычки
- Используются для определения строк.
- Применяйте одинарные кавычки для определения строк, чтобы избежать необходимости экранирования двойных кавычек в строке.
Тройные кавычки:
- Используются для определения строк, содержащих как одинарные, так и двойные кавычки. Поэтому экранирование не требуется.
- Используются для определения многострочных строк.
Дайте знать, что вы думаете по этой теме материала в комментариях. Мы очень благодарим вас за ваши комментарии, дизлайки, лайки, отклики, подписки!
Источник
Как написать игру на Python3
Самоучитель Python3 для начинающих
Глава 5.4 Одинарные и двойные кавычки в Python3
Для вывода строковых значений в Python3 необязательно использовать одинарные кавычки. Если вы заключите текст, который необходимо вывести, в двойные кавычки, то эффект будет таким же.
Рис 5.4-1 Использование одинарных и двойных кавычек в Python3
Однако при попытке использовать разные типы кавычек в одной строке, будет немедленно выведено сообщение об ошибке:
Рис 5.4-2 Ошибка в использовании кавычек разных типов
Каждый может использовать тот тип кавычек, который ему больше нравится. Разницы не будет никакой. Просто будьте внимательны, чтобы не допустить использования разных типов кавычек в одном строковом значении.
Если строка заключена в одинарные кавычки, а вам по зарез нужно вывести на экран, какое-нибудь слово в одинарных кавычках, то их, кавычки, следует экранировать символом бэкслеша, как это было показано в Главе 5.2. Вообще, все кавычки, которые необходимо вывести на экран надежнее экранировать в любом случае:
Рис 5.4-3 Использование нескольких одинарных кавычек в строке
Как видите, хоть мы и использовали несколько однотипных кавычек в одной строке, они нормально напечатались. Однако, можно поступить и проще — просто используя различные типы кавычек для ограничения строки и выделения в ней отдельных слов. Так, если мы всю строку заключим в двойные скобки, то в экранировать одинарные кавычки внутри этой строки не нужно:
Рис. 5.4-4 Использование разных типов кавычек в одной строке.
Как видите, все сработало просто отлично. Разумеется, можно для выделения строки использовать одинарные кавычки, а слова, внутри этой строки, выделять двойными кавычками. Интерпретатор Python3 достаточно сообразителен, чтобы понять: если строка начинается одним типом кавычек, заканчиваться другим типом она не может. Как удобно — так и делайте.
Заключение.
На этом пятая глава заканчивается. Мы научились использовать ключевое слово end, функции print(), разобрались, как форматировать текст, который мы выводим пользователю. Кроме того, изучили нюансы применения одинарных и двойных кавычек в Python3.
Было бы очень хорошо, если бы вы написали свой вариант программы «Шутки». Даже если вы не знаете ни одной шутки — Интернет вам поможет отыскать что-нибудь подходящее. Зато вы сможете практически закрепить полученные знания.
Источник
Как правильно добавить кавычки в строку с помощью Python?
Я хочу добавить набор (двойных) кавычек в строку Python, если они отсутствуют, но строка также может содержать кавычки.
Цель этого состоит в том, чтобы заключить в кавычки все команды, которые еще не были заключены в кавычки, потому что Windows API требует, чтобы вы указали в кавычках всю командную строку, когда вы выполняете процесс, используя _ popen ().
Вот несколько строк, которые должны заключаться в кавычки:
Вот некоторые из них, которые не должны быть указаны:
Пожалуйста, найдите время, чтобы протестировать все примеры ; Нелегко определить, нужны ли строки в кавычках или нет.
4 ответа
Я думаю, что это сложный вопрос для точного определения, но, возможно, эта стратегия будет приближаться к вашей цели.
Основная идея состоит в том, чтобы создать копию исходной строки, удалив элементы внутри кавычек . Здесь определяется элемент, заключенный в кавычки, так что он должен содержать хотя бы один непробельный символ.
После удаления внутренних элементов в кавычках вы затем проверяете, нуждается ли вся строка в кавычках или нет.
У вас есть три случая:
- Строка длиной менее двух символов: добавьте кавычки
- Строка имеет кавычки в s [0] и в s [1]: не добавлять кавычки
- Добавить цитаты
И под «добавить кавычки» я имею в виду просто создать ‘»‘ + string + ‘»‘ и вернуть его.
Переведите на if-заявления, и все готово.
Я написал простой конечный автомат для отслеживания, если мы одним словом или нет. Если глубина строки в строке равна нулю, нам нужны кавычки:
Ваша проблема противоречива.
Рассмотрим два случая
Первый интерпретируется как строка в предварительных кавычках с «вложенными кавычками», но последний интерпретируется как строки в отдельных кавычках. Вот несколько примеров, которые освещают проблему.
Источник
Python: советы, уловки, хаки (часть 1)
Предлагаю читателям «Хабрахабра» перевод статьи «Python Tips, Tricks, and Hacks». Статья будет полезна на начальном и среднем этапах изучения Python.
Хотите писать более лаконичный и читаемый код? Вы хотите уместить как можно больше смысла в одно выражение? Считаете, что прочитать о нескольких уловках лучше, чем провести остаток жизни за чтением документации? Вы обратились по адресу. Мы начнем с маленьких уловок, которые вы уже могли встретить, если немного работали с Python. Но я обещаю, что ближе к концу статьи вас ожидает больше безумных вещей.
Содержание
1. Маленькие уловки. Четыре типа кавычек. Правдивость различных объектов. Проверка на вхождение подстроки. Красивый вывод списка. Целочисленное деление и деление с плавающей точкой. Лямбда-функции.
2. Списки. Генераторы списков и выражения-генераторы.
Я старался сделать, чтобы все фрагменты кода запускались без дополнительных изменений. Если хотите, можете скопировать их в оболочку Python и посмотреть, что получится. Обратите внимание, что многие примеры содержат «неправильные» фрагменты, которые закомментированы. Ничто вам не мешает раскомментировать строку и посмотреть, что произойдет.
Небольшое разграничение между true и True в этой статье: когда я говорю, что объект true, это значит, что будучи приведенным к типу boolean, он становится True. Аналогично с false и False.
1 Маленькие уловки
1.1 Четыре типа кавычек
Начнем с того, что вы, возможно, уже знаете. В некоторых языках программирования одинарные и двойные кавычки предназначены для разных вещей. Python позволяет использовать оба варианта (но строка должна начинаться и заканчиваться одним и тем же типом кавычек). В Python также есть еще два типа кавычек: »’ (тройные одинарные) и «»» (тройные двойные). Таким образом, можно использовать несколько уровней кавычек, прежде чем придется заботиться об их экранировании. Например, этот код правильный:
1.2 Правдивость различных объектов
В отличие от некоторых языков программирования, в Python объект считается false, только если он пуст. Это значит, что не нужно проверять длину строки, кортежа или словаря — достаточно проверить его как логическое выражение.
Легко предсказать, что 0 — тоже false, а остальные числа — true.
Например, следующие выражения эквивалентны. В данном случае my_object — строка, но здесь мог оказаться другой тип (с соответствующими изменениями условий блока if).
Итак, нет необходимости проверять длину объекта, если вас интересует только, пуст он или нет.
1.3 Проверка на вхождение подстроки
Это маленькая, довольно очевидная подсказка, но я узнал о ней лишь через год изучения Python. Должно быть, вы знаете, что можно проверить, содержится ли нужный элемент в кортеже, списке, словаре, с помощью конструкции ‘item in list’ или ‘item not in list’. Я не мог представить, что это сработает для строк. Я всегда писал что-то вроде этого:
Этот код довольно неуклюжий. Совершенно так же работает ‘if substring in string’:
Проще и понятней. Может быть, очевидно для 99% людей, но мне хотелось бы узнать об этом раньше, чем я узнал.
1.4 Красивый вывод списка
Обычный формат вывода списка с помощью print не очень удобен. Конечно, становится понятно, что из себя представляет список, но чаще всего пользователь не хочет видеть кавычки вокруг каждого элемента. Есть простое решение, использующее метод join строки:
Метод join преобразовывает список в строку, рассматривая каждый элемент как строку. Разделителем является та строка, для которой был вызван join. Он достаточно умен, чтобы не вставлять разделитель после последнего элемента.
Дополнительный бонус: join работает линейное время. Никогда не создавайте строку складыванием элементов списка в цикле for: это не просто некрасиво, это занимает квадратичное время!
1.5 Целочисленное деление и деление с плавающей точкой
Если вы делите целое число на целое, по умолчанию результат обрезается до целого. Например, 5/2 вернет 2.
Есть два способа это исправить. Первый и самый простой способ заключается в том, чтобы преобразовать одно из чисел к типу float. Для констант достаточно добавить «.0» к одному из чисел: 5.0/2 вернет 2.5. Также вы можете использовать конструкцию float(5)/2.
Второй способ дает более чистый код, но вы должны убедиться, что ваша программа не сломается от этого существенного изменения. После вызова ‘from __future__ import division’ Python всегда будет возвращать в качестве результата деления float. Если вам понадобится целочисленное деление, используйте оператор //: 5//2 всегда возвращает 2.
В одной из следующих версий Python такое поведение станет дефолтным. Если вы хотите, чтобы ваш код оставался совместимым, используйте оператор // для целочисленного деления, даже если вы не используете этот импорт.
1.6 Лямбда-функции
Иногда нужно передать функцию в качестве аргумента или сделать короткую, но сложную операцию несколько раз. Можно определить функцию обычным способом, а можно использовать лямбда-функцию — маленькую функцию, возвращающую результат одного выражения. Следующие два определения полностью идентичны:
Преимущество лямбда-функции в том, что она является выражением и может быть использована внутри другого выражения. Ниже приведен пример, использующий функцию map, которая вызывает функцию для каждого элемента списка и возвращает список результатов. (В следующем пункте я покажу, что map практически бесполезен. Но он дает нам возможность привести хороший пример в одну строку.)
Без лямбда-функций нам пришлось бы определить функцию отдельно. Мы просто сэкономили одну строку кода и одно имя переменной.
Синтаксис лямбда-функции: lambda переменные: выражение
переменные — список аргументов, разделенных запятой. Нельзя использовать ключевые слова. Аргументы не надо заключать в скобки.
выражение — инлайновое выражение Python. Область видимости включает локальные переменные и аргументы. Функция возвращает результат этого выражения.
2 Списки
2.1 Генераторы списков
Если вы использовали Python достаточно долго, вы должны были хотя бы слышать о понятии «list comprehensions». Это способ уместить цикл for, блок if и присваивание в одну строку.
Другими словами, вы можете отображать (map) и фильтровать списки одним выражением.
2.1.1 Отображение списка
Начнем с простейшего примера. Допустим, нам надо возвести в квадрат все элементы списка. Свежеиспеченный программист на Python может написать код вроде этого:
Мы «отобразили» один список на другой. Это также можно сделать с помощью функции map:
Этот код определенно короче (одна строка вместо трех), но всё еще некрасив. С первого взгляда сложно сказать, что делает функция map (она принимает в качестве аргументов функцию и список и применяет функцию к каждому элементу списка). К тому же мы вынуждены определять функцию, это выглядит довольно беспорядочно. Если бы только существовал более красивый путь… например, генератор списка:
Этот код делает абсолютно то же самое, но он короче, чем первый пример, и понятней, чем второй. Человек без проблем определит, что делает код, для этого даже не обязательно знать Python.
2.1.2 Фильтрация списка
А что, если нас интересует фильтрация списка? Например, требуется удалить элементы, большие или равные 4. (Да, примеры не очень реалистичны. Как бы то ни было. )
Новичок напишет так:
Очень просто, не так ли? Но код занимает 4 строки, содержит два уровня отступов и при этом делает тривиальную вещь. Можно уменьшить размер кода с помощью функции filter:
Аналогично функции map, о которой мы говорили выше, filter сокращает код, но выглядит довольно уродливо. Что, черт возьми, происходит? Как и map, filter получает функцию и список. Если функция от элемента возвращает true, элемент включается в результирующий список. Разумеется, мы можем сделать это через генератор списка:
Снова мы получили более короткий, ясный и понятный код.
2.1.3 Одновременное использование map и filter
Теперь мы можем использовать всю силу генератора списков. Если я вас еще не убедил, что map и filter тратят слишком много вашего времени, надеюсь, теперь вы со мной согласитесь.
Пусть требуется отобразить и отфильтровать список одновременно. Другими словами, я хочу увидеть квадраты элементов списка, меньших 4. Еще раз, неофит напишет так:
Увы, код начал растягиваться вправо. Может, получится упростить его? Попробуем использовать map и filter, но у меня плохое предчувствие…
Раньше map и filter было трудно читать, теперь — невозможно. Очевидно, это не лучшая идея. И снова генератор списков спасает ситуацию:
Получилось немного длиннее, чем предыдущие примеры с генератором списков, но, по моему мнению, вполне читабельно. Определенно лучше, чем цикл for или использование map и filter.
Как вы видите, генератор списков сначала фильтрует, а затем отображает. Если вам обязательно нужно наоборот, получится сложнее. Придется использовать либо вложенные генерации, либо map и filter, либо обычный цикл for, в зависимости от того, что проще. Но это уже выходит за рамки статьи.
Синтаксис генератора списков: [ element for variable(s) in list if condition ]
list — любой итерируемый элемент
variable(s) — переменная или переменные, которые приравниваются к текущему элементу списка, аналогично циклу for
condition — инлайновое выражение: если оно равно true, элемент добавляется в результат
element — инлайновое выражение, результат которого используется как элемент списка-результата
2.1.4 Выражения-генераторы
Существует обратная сторона генератора списков: весь список должен находиться в памяти. Это не проблема для маленьких списков, как в предыдущих примерах, и даже на несколько порядков больше. Но в конце концов это становится неэффективным.
Выражения-генераторы (Generator Expressions) появились в Python 2.4. Из всех фишек Python им уделяется, наверно, меньше всего внимания. Отличие их от генераторов списков состоит в том, что они не загружают в память список целиком, а создают ‘generator object’, и в каждый момент загружен только один элемент списка.
Конечно, если вы хотите использовать список для чего-нибудь, это не особо поможет. Но если вы просто передаете его куда-нибудь, где нужен любой итерируемый объект (цикл for, например), стоит использовать функцию генератора.
Выражения-генераторы имеют такой же синтаксис, как генераторы списков, но вместо квадратных скобок используются круглые:
Это более эффективно, чем использование генератора списков.
Итак, имеет смысл использовать выражения-генераторы для списков больших размеров. Если весь список целиком нужен вам для какой-то другой цели, то можно использовать любой из вариантов. Но использовать выражения-генераторы — хорошая привычка, если нет аргументов против этого. Правда, не надейтесь увидеть ускорение работы, если список небольшой.
В качестве финального штриха хочу заметить, что выражения-генераторы достаточно заключить в одни круглые скобки. Например, в случае, если вы вызываете функцию с одним аргументом, можно писать так: some_function(item for item in list).
2.1.5 Заключение
Мне не хочется этого говорить, но мы только прикоснулись к тому, что можно делать с помощью выражений-генераторов и генераторов списков. Здесь можно использовать всю силу for и if, а также оперировать с чем угодно, лишь бы оно было итерируемым объектом.
Источник