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

Сравнение синтаксического присваивания деструктурирования Sugarth Syntax – JavaScript VS Python

Разрушение или синтаксис назначения распаковки – это выражение, которое позволяет распаковать … Теги с JavaScript, Python.

Разрушивание или синтаксис назначения распаковки – это выражение, которое позволяет распаковывать значения из поезда, таких как массив и объекты в 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 мы можем пройти переменное количество аргументов функции с использованием специальных символов. Есть два специальных символа:

  1. * args (Несколько аргументов ключевых слов)
  2. ** 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”