Разрушивание или синтаксис назначения распаковки – это выражение, которое позволяет распаковывать значения из поезда, таких как массив и объекты в JavaScript и список, кортежи, словари в Python в отдельных переменных. Этот пост будет смотреть на разницу в синтаксисе, используемом в Python и JavaScript для деструктивных или распаковки назначений.
Неструктурирующие задание довольно полезно, поскольку он позволяет назначать значения нескольким переменным одновременно из одной коллекции, легко понять и улучшает читаемость кода (если существует такой термин).
Одним из простых примеров включает в себя выполнение операции подкачки по двум переменным,
Питон
a = 5 b = 7 b, a = a, b print(a, b, sep = " ") # 7 5
JavaScript
let a = 5, b = 7 [b, a] = [a, b] console.log(a, b) // 7 5
Массив/Список Разрушение
Питон
example_list = [1, 2, 3] first, second, third = example_list print(first, second, third, sep = " ") # 1 2 3
Вышеуказанный фрагмент кода показывает простой список, разрушающий в Python. Здесь назначение переменных зависит просто по порядку предметов в списке.
JavaScript
const example_array = [1, 2, 3] let first, second, third [first, second, third] = example_array console.log(first, second, third) // 1 2 3
Разрушение массива в JavaScript требует, чтобы переменная была заключена с «[]»
Игнорирование ценностей
Питон
example_list = [1, 2, 3] first, _ , third = example_list print(first, third, sep = " ") # 1 3
Значения для игнорирования должны быть заменены на «_»
JavaScript
const example_array = [1, 2, 3] const [first, , third] = example_array console.log(first, third) // 1 3
Значения, которые будут игнорированы, просто пустыются запятыми после них.
В Python, если мы попытаемся разрушать коллекцию с более или меньше ценностей, чем мы предоставляем переменные, мы в конечном итоге с ValueError
Отказ Принимая во внимание, что в JavaScript это не покажет никакой ошибки
Питон
example_list = [1, 2, 3] first, second = example_list #ValueError: not enough values to unpack (expected 2)
JavaScript
const example_array = [1, 2, 3] let first, second, third, fourth //when destructuring less values [first, second] = example_array console.log(first, second) // 1 2 //when destructuring more values [first, second, third, fourth] = example_array console.log(first, second, third, fourth) // 1 2 3 undefined
В JavaScript при распаковке меньшего количества значений присваиваются только начальные значения, при распаковке большего количества значений присваиваются только первые три переменных, присваиваются значение, а последнее остается не определено.
В таком сценарии JavaScript позволяет нам использовать значение по умолчанию:
[first, second, third, fourth = 4] = example_array console.log(first, second, third, fourth) // 1 2 3 4
Сбор ценностей
Питон
head, *tail = [1, 2, 3, 4, 5] print(head) # 1 print(tail) # [2, 3, 4, 5]
JavaScript
const [head, ...tail] = [1, 2, 3, 4, 5] console.log(head) // 1 console.log(tail) // [2, 3, 4, 5]
...
известен как оператор «отдыха» в JavaScript
Знать, что SyntaxError
Будут брошены, если приправая запятая используется на правой стороне элемента отдыха:
const [a, ...b,] = [1, 2, 3]; // SyntaxError: rest element may not have a trailing comma // Always consider using rest operator as the last element
Args/kwargs в Python и деструктурируют объект в JavaScript
В Python мы можем пройти переменное количество аргументов функции с использованием специальных символов. Есть два специальных символа:
* args
(Несколько аргументов ключевых слов)** kwargs
(Ключевые аргументы)
Типичный пример, где можно понадобиться что-то вроде * args
дано ниже:
// a standard function to add two numbers def adder(x,y): print("sum:",x+y)
Если мы хотим добавить несколько цифр, но не уверены, сколько чисел нам придется добавить
Мы можем изменить сумматор двумя способами:
- Мы можем добавить цифры в список и пройти список в качестве аргумента.
def adder(nums): sum = 0 for num in nums: sum += num print("sum : ", sum)
Но это требует добавления поддержания списка и удаления и добавления номеров в список соответственно.
Это где * args
входит в игру:
У Питона есть * args
которые позволяют нам пройти переменное число аргументов без ключевых слов для функции.
- Изменение функций сумматора, используя * args:
def adder(*num): sum = 0 for n in num: sum = sum + n print("sum:",sum) # args is just a conventional name used in python, we can use any name # (like num in this example)
Мы используем * args и ** Kwargs в качестве аргумента, когда мы не уверены в количестве аргументов для передачи в функции.
* args
Дайте передавать аргументы Mulitple функционировать, пока ** kwargs
Позволяет передавать несколько аргументов ключевых слов к функции.
def printSomething(a, *args, **kwargs): print(a) print(args) print(kwargs) printSomething(1, 2, 3, 4, name="Sachin", age=21) # 1 # (2, 3, 4) - args becomes a tuple # {'name': 'Sachin', 'age': 21} - kwargs becomes a dictionary
* args
Функциональные возможности могут быть реплицированы в JS, используя оператор отдыха как:
// Only the last parameter can be a "rest parameter". function myFun(a, b, ...manyMoreArgs) { console.log("a", a) console.log("b", b) console.log("manyMoreArgs", manyMoreArgs) } myFun("one", "two", "three", "four", "five", "six") // Console Output: // a, one // b, two // manyMoreArgs, ["three", "four", "five", "six"]
Разрушение объекта в JS
const user = { id: 42, is_verified: true }; const {id, is_verified} = user; // here the name of variable should be same as the object's keys console.log(id); // 42 console.log(is_verified); // true
Поскольку имена переменной должны соответствовать ключу объекта, JS позволяет использовать псевдонимы:
const o = {p: 42, q: true}; const {p: foo, q: bar} = o; console.log(foo); // 42 console.log(bar); // true
Разрушение аргумента прошло как объект
const info = { name: "Sachin", age: 21, profession: "Software Engineer" } function printDetails({name, age = 18, profession: job}) { console.log('name', name) console.log('age', age) console.log('job', job) } printDetails(info) // name Sachin // age 21 // job Software Engineer // default age 18 // job as alias to profession
С таким количеством правил с довольно некоторыми сходствами и тонкими различиями, вспоминающими все эти, могут по-прежнему ошеломлять. Я предлагаю не кружать эти синтаксис, если вы используете Python или JS или оба, вы всегда можете добавить это и прочитать его позже, как и когда вам нужно что-то посмотреть.
Использованная литература:
Teclado – Разрушение в Python
MDN веб-документы
Программирование – Python Args и Kwargs
Спасибо за прочтение. Следите за обновлениями!!
Оригинал: “https://dev.to/devdios/destructuring-assignment-indepth-syntax-comparison-javascript-vs-python-2nl5”