Эквиваленты в Python и JavaScript (5 части серии)
В последний раз Мы начали новую серию статей о аналогиях в Питон и JavaScript . Мы посмотрели на списки, массивы, словари, объекты и строки, условные задания и диапазон целых чисел. На этот раз мы пройдем более интересные и сложные вещи, такие как сериализующие словари и списки для JSON, операций с регулярными выражениями, а также повышение и ловли ошибок.
Json.
При работе с API очень обычно используется для сериализации объектов до формата JSON и сможет разбирать строки JSON.
В Питон Это сделано с JSON
Модуль, как это:
import json json_data = json.dumps(dictionary, indent=4) dictionary = json.loads(json_data)
Здесь мы отступим к вложенным элементам в строке JSON на 4 пробела.
В JavaScript Есть JSON
Объект, который имеет методы создания и разбора строк JSON:
json_data = JSON.stringify(dictionary, null, 4); dictionary = JSON.parse(json_data);
Расщепление строк регулярными выражениями
Регулярные выражения – это мульти-инструмент, который, как только вы освоите, вы можете выполнить много вещей.
В последней статье мы видели, как можно присоединиться к спискам строк в одну строку. Но как вы можете разделить длинную строку в списки строк? Что если разделитель может быть не одним символом, как запятая, но ряд возможных вариаций? Это можно сделать с регулярными выражениями и Сплит ()
метод.
В Python , Сплит ()
Метод относится к регулярному объекту шаблона экспрессии. Вот как вы можете разделить текстовую строку в предложения пунктами пунктуации:
import re # One or more characters of "!?." followed by whitespace delimiter = re.compile(r'[!?\.]+\s*') text = "Hello!!! What's new? Follow me." sentences = delimiter.split(text) # sentences == ['Hello', "What's new", 'Follow me', '']
В JavaScript Сплит ()
Метод относится к строке:
// One or more characters of "!?." followed by whitespace delimiter = /[!?\.]+\s*/; text = "Hello!!! What's new? Follow me."; sentences = text.split(delimiter) // sentences === ["Hello", "What's new", "Follow me", ""]
Соответствие шаблонов регулярных выражений в строках
Регулярные выражения часто используются для проверки данных из форм.
Например, чтобы проверить, если введенный адрес электронной почты является правильным, вам нужно будет сопоставить его против регулярного шаблона выражения. В Python Это было бы выглядеть так:
import re # name, "@", and domain pattern = re.compile(r'([\w.+\-]+)@([\w\-]+\.[\w\-.]+)') match = pattern.match('hi@example.com') # match.group(0) == 'hi@example.com' # match.group(1) == 'hi' # match.group(2) == 'example.com'
Если текст соответствует шаблону, он возвращает объект совпадения с Группа ()
Метод для чтения цельной сопоставленной строки или отдельных захватов шаблона, которые были определены с круглыми скобками. 0 означает получение всей строки, 1 означает получение совпадения в первой группе, 2 означает получение совпадения во второй группе и так далее. Если текст не соответствует шаблону, Нет
Значение будет возвращено.
В JavaScript Матч ()
Метод относится к строке, и он возвращает объект совпадения, либо null
Отказ Довольно похожи:
// name, "@", and domain pattern = /([\w.+\-]+)@([\w\-]+\.[\w\-.]+)/; match = 'hi@example.com'.match(pattern); // match[0] === 'hi@example.com' // match[1] === 'hi' // match[2] === 'example.com'
Объект матча в JavaScript действует как массив. Его стоимость в положении Zeroth является целая сопоставленная строка. Другие индексы соответствуют захватам картины, определенной с круглыми скобками.
Более того, иногда вам нужно искать, существует ли определенное значение в строке, и в какую позицию письма его найдут. Это можно сделать с Поиск ()
метод.
В Python Этот метод относится к шаблону регулярного выражения, и он возвращает объект Match. Объект Match имеет Start ()
Способ, показывающий, в какое письмо позиционирует матч начинается:
text = 'Say hi at hi@example.com' first_match = pattern.search(text) if first_match: start = first_match.start() # start == 10
В JavaScript Поиск ()
Метод относится к строке, и он возвращает только целое число, на котором буквенная позиция начинается матч. Если ничего не найден, -1
возвращается:
text = 'Say hi at hi@example.com'; first_match = text.search(pattern); if (first_match > -1) { start = first_match; // start === 10 }
Замена шаблонов в строках с использованием регулярных выражений
Замена регулярными выражениями обычно происходит при очистке данных или добавления дополнительных функций. Например, мы могли бы предпринять текст и сделать все адреса электронной почты кликабельными.
Python Разработчики будут использовать sub ()
Способ регулярного выражения рисунка:
html = pattern.sub( r'\g<0>', 'Say hi at hi@example.com', ) # html == 'Say hi at hi@example.com'
JavaScript Разработчики будут использовать заменить ()
Способ строки:
html = 'Say hi at hi@example.com'.replace( pattern, '$&', ); // html === 'Say hi at hi@example.com'
В Python Захваты, также называемые «backreferences», доступны в строке замены как \ g <0>
С \ g <1>
, \ g <2>
, так далее. В JavaScript То же самое доступно как $ &
, $ 1
, $ 2
, так далее. ОСОБЕННОСТИ обычно используются для обертывания каких-либо струн или переключения мест разных элементов текста.
Также можно заменить совпадение с помощью функционального вызова. Это может быть использовано для выполнения замены в замене или подсчетам или собирать некоторые функции текста. Например, используя замены с помощью функционирования звонков в JavaScript Я когда-то написал полностью функциональный HTML-синтаксис.
Здесь давайте изменим все адреса электронной почты в тексте в верхний регистр.
В Python Функция замены получает объект матча. Мы можем использовать его Группа ()
Способ сделать что-то с соответствующим текстом и вернуть текст в качестве замены:
text = pattern.sub( lambda match: match.group(0).upper(), 'Say hi at hi@example.com', ) # text == 'Say hi at HI@EXAMPLE.COM'
В JavaScript Функция замены получает всю строку совпадения, первый захват, второй захват и т. Д. Мы можем сделать то, что нам нужно с этими ценностями, а затем вернуть некоторую строку в качестве замены:
text = 'Say hi at hi@example.com'.replace( pattern, function(match, p1, p2) { return match.toUpperCase(); } ); // text === 'Say hi at HI@EXAMPLE.COM'
Обработка ошибок
Вопреки Python , клиентская сторона JavaScript Обычно не используется для сохранения или чтения файлов или подключения к удаленным базам данных. Итак, попробуйте ...catch
Блоки довольно редки в JavaScript по сравнению с попробуй..except
аналогия в Python Отказ
В любом случае, обработка ошибок может использоваться с пользовательскими пользовательскими ошибками, реализованными и поднятыми в JavaScript Библиотеки и пойманы в главном коде.
В следующем примере в Python Показывает, как определить пользовательский класс исключения MyException
, как поднять его в функцию, и как ловить его и обращаться в попробуй..except..finally
блокировать:
class MyException(Exception): def __init__(self, message): self.message = message def __str__(self): return self.message def proceed(): raise MyException('Error happened!') try: proceed() except MyException as err: print('Sorry! {}'.format(err)) finally: print('Finishing')
В следующем примере в JavaScript Точно так же: здесь мы определяем MyException
Класс, бросит его в функцию и поймай его и рушай в попробуй..счасто ... блокировать.
function MyException(message) { this.message = message; this.toString = function() { return this.message; } } function proceed() { throw new MyException('Error happened!'); } try { proceed(); } catch (err) { if (err instanceof MyException) { console.log('Sorry! ' + err); } } finally { console.log('Finishing'); }
MyException
Класс на обоих языках имеет параметр сообщение
и способ представлять себя как строку с использованием значения сообщение
Отказ
Конечно, исключения должны быть подняты/брошены только в случае ошибок. И вы определяете, что является ошибкой в вашем дизайне модуля.
Вынос
- Сериализация к JSON довольно прост в обоих, Python и JavaScript Отказ
- Регулярные выражения могут использоваться в качестве нескольких инструментов при работе с текстовыми данными.
- Вы можете делать замены с функционными вызовами на обоих языках.
- Для более сложного дизайна программного обеспечения вы можете использовать пользовательские классы ошибок.
Как я уже упоминал в прошлый раз, вы можете схватить по боковому сравнению Python и JavaScript что я скомпилировал для вас (и мое будущее я). Рядом вы увидите функции от традиционный Список, массив, словарь, объект и обработка строк до Современный Струнные интерполяции, лямбдас, генераторы, наборы, классы и все остальное. Используйте это для хорошего.
В следующей части серии мы посмотрим на текстовые шаблоны, список распаковки, функции лямбда, итерации без индексов, генераторов и наборов. Будьте на связи!
Обложка Фото Бенджамин повесил Отказ
Эквиваленты в Python и JavaScript (5 части серии)
Оригинал: “https://dev.to/djangotricks/equivalents-in-python-and-javascript-part-2-3fej”