Рубрики
Без рубрики

Эквивалены в Python и JavaScript. Часть 2

В прошлый раз мы начали новую серию статей о аналогиях в Python и JavaScript. У нас был… Помечено промежуточным, продвинутым, Python, JavaScript.

Эквиваленты в 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”