Эквиваленты в Python и Javascript (5 серии деталей)
Это третья часть серии из 4 артистиков об аналогиях в Python и JavaScript Анкет В Предыдущие части Мы покрыли большую часть традиционной Python 2.7 и JavaScript на основе стандарта Ecmascript 5. На этот раз мы начнем изучать Питон 3.6 и JavaScript на основе стандарта Ecmascript 6. Стандарт Ecmascript 6 довольно новый и поддерживается только самыми новейшими версиями браузеров. Для старших браузеров вам понадобится Вавилон Чтобы скомпилировать ваше следующее поколение JavaScript Код к кросс-браузеру, совместимым с эквивалентами. Это открывает дверь для стольких интересных вещей, которые можно исследовать. Мы начнем с строковой интерполяции, распаковки, функций Lambda, итераций без индексов, генераторов и наборов!
Переменные в струнах
Старым и неэффективным способом построения строк со значениями из переменных является это конкатенация:
name = 'World' value = 'Hello, ' + name + '!\nWelcome!'
Это может стать очень редким и трудно читать. Также очень легко пропустить пробелы в предложении вокруг переменных.
С тех пор Python Версия 3.6 и JavaScript На основании стандарта ECMASCRIPT 6 вы можете использовать так называемую строковую интерполяцию. Это струнные шаблоны, которые заполнены значениями из переменных.
В Python Их также называют F-String, потому что их нотация начинается с буквы «F»:
name = 'World' value = f"""Hello, {name}! Welcome!""" price = 14.9 value = f'Price: {price:.2f} €' # 'Price: 14.90 €'
В JavaScript Шаблоны струн начинаются и заканчиваются задними тренажерами:
name = 'World'; value = `Hello, ${name}! Welcome!`; price = 14.9; value = `Price ${price.toFixed(2)} €`; // 'Price: 14.90 €'
Обратите внимание, что струнные шаблоны могут быть как одной линии, так и из нескольких строк. Для F-стенков в Python Вы можете передать формат для переменных, но вы не можете назвать методы переменной, если они не являются свойствами и вызовом методов получения.
Распаковка списков
Python и теперь JavaScript Имеет интересную функцию, чтобы назначить элементы последовательностей в отдельные переменные. Например, мы можем прочитать три значения списка в переменные A, B и C со следующим синтаксисом:
[a, b, c] = [1, 2, 3]
Для кортежей в скобках может быть опущено. Ниже приведен очень популярный способ обмениваться значениями двух переменных в Python :
a = 1 b = 2 a, b = b, a # swap values
С следующим поколением JavaScript Это также может быть достигнуто:
a = 1; b = 2; [a, b] = [b, a]; // swap values
В Питон 3.6 Если у нас есть неизвестное количество элементов в списке или кортеже, мы можем назначить их кортежу из нескольких значений, а также распаковывать остальные в списке:
first, second, *the_rest = [1, 2, 3, 4] # first == 1 # second == 2 # the_rest == [3, 4]
Это также можно сделать с JavaScript (ECMASCRIPT 6):
[first, second, ...the_rest] = [1, 2, 3, 4]; // first === 1 // last === 2 // the_rest === [3, 4]
Функции Lambda
Python и JavaScript Иметь очень аккуратную функцию для создания функций в одной строке. Эти функции называются лямбдами. Lambdas – это очень простые функции, которые принимают один или несколько аргументов и возвращают некоторые рассчитанные значения. Обычно Lambdas используются, когда вам нужно передавать функцию другой функции в качестве обратного вызова или в качестве функции для манипулирования каждым отдельным элементом в последовательности.
В Питон , вы бы определили лямбду, используя Lambda
Ключевое слово, например:
sum = lambda x, y: x + y square = lambda x: x ** 2
В JavaScript лямбдас используйте =>
обозначение. Если есть более одного аргумента, они должны быть в скобках:
sum = (x, y) => x + y; square = x => Math.pow(x, 2);
Итерация без индексов
Многие языки программирования позволяют итерации через последовательность только с помощью индексов и увеличивая их значения. Затем, чтобы получить предмет на какой -то позиции, вы прочитали бы его из массива, например:
for (i=0; i
Это не хороший синтаксис и очень технический – он не читается естественным образом. Мы действительно хотим, чтобы просто получить каждое значение из списка. И Python Имеет очень аккуратную возможность только для итерации через элементы:
for item in ['A', 'B', 'C']: print(item)
В современном JavaScript Это также возможно с для .. of
оператор:
for (let item of ['A', 'B', 'C']) { console.log(item); }
Вы также можете перевернуть через струнные символы в Python :
for character in 'ABC': print(character)
И в современном JavaScript :
for (let character of 'ABC') { console.log(character); }
Генераторы
Python и Modern JavaScript Имеет возможность определить специальные функции, с помощью которых вы можете выполнить. С каждой итерацией они возвращают следующее сгенерированное значение в последовательности. Эти функции называются генераторами. С генераторами вы можете получить цифры в диапазоне, строки из файла, данные из разных вызовов API с различными страницами, Fibonacci Numbers и любые другие динамично сгенерированные последовательности.
Технически генераторы похожи на нормальные функции, но вместо возвращения значения они дают значение. Это значение будет возвращено для одной итерации. И это поколение происходит до тех пор, пока достигнут конец функции.
Чтобы проиллюстрировать это, следующее Python Код создаст генератор Обратный отсчет ()
который вернет числа от данного обратного к 1 (например, 10, 9, 8, …, 1):
def countdown(counter): while counter > 0: yield counter counter -= 1 for counter in countdown(10): print(counter)
Точно так же может быть достигнуто в современном JavaScript , но обратите внимание на звездочку в функция
утверждение. Это определяет, что это генератор:
function* countdown(counter) { while (counter > 0) { yield counter; counter--; } } for (let counter of countdown(10)) { console.log(counter); }
Наборы
Мы уже посмотрели на списки, кортежи и массивы. Но вот еще один тип данных – наборы. Наборы – это группы элементов, которые гарантируют, что каждый элемент существует только один раз. Теория набора также указывает наборные операции, такие как Союз, пересечение и разница , Но мы не будем охватить их здесь сегодня.
Вот как создать набор, добавить к нему элементы, проверить, существует ли значение, проверьте общее количество элементов в наборе, итерация через его значения и удалите значение, используя Питон :
s = set(['A']) s.add('B'); s.add('C') 'A' in s len(s) == 3 for elem in s: print(elem) s.remove('C')
Вот как достичь того же в современном JavaScript :
s = new Set(['A']); s.add('B').add('C'); s.has('A') === true; s.size === 3; for (let elem of s.values()) { console.log(elem); } s.delete('C')
Вынос
- Строковая интерполяция или буквальные шаблоны позволяют вам иметь намного более чистый и более приятный код даже с возможностью иметь несколько строк текста.
- Вы можете выполнить их через элементы в последовательности или группе без использования индексов.
- Используйте генераторы, когда у вас есть последовательность почти неограниченных элементов.
- Используйте наборы, когда вы хотите убедиться, что данные существуют, существуют ли данные в сборе.
- Используйте Lambdas, когда вам нужны короткие и четкие однострочные функции.
Как вы знаете из предыдущих частей, я предлагаю шпаргалку со всем списком эквивалентов в Python и JavaScript , оба, почитаемые и будущие доказательства. Чтобы что -то напечатать на ваших глазах гораздо удобнее, чем переключение между окнами или прокрутки вверх и вниз, пока вы не найдете то, что именно искали. Поэтому я предлагаю вам получить шпаргалку и использовать его навсегда!
В следующей и последней части серии мы рассмотрим аргументы функций, классы, наследование и свойства. Следите за обновлениями!
Фотография обложки от Алекс Найт
Эквиваленты в Python и Javascript (5 серии деталей)
Оригинал: “https://dev.to/djangotricks/equivalents-in-python-and-javascript-part-3-4icc”