Análogos em Python e JavaScript. Parte um

Olá Habr! Apresento a você a tradução do artigo "Equivalentes em Python e JavaScript. Parte 1" .


Apesar do fato de Python e Javascript serem bem diferentes, há muitas semelhanças que qualquer desenvolvedor de pilha cheia deve conhecer. Nesta série de 4 artigos, veremos o que é comum nos dois idiomas e consideraremos vários problemas conhecidos, bem como maneiras de resolvê-los.


Isso não é uma referência; não haverá informações básicas sobre os tipos de variáveis, ifs e loops.
Mas examinaremos estruturas e operações de dados mais complexas usando Python e Javascript.


Eu também ilustrarei isso com exemplos práticos.


Esta série será de interesse para backders usando Django, Flask ou qualquer outra estrutura Python que queira aprender mais sobre o Javascript moderno. Por outro lado, esses artigos serão úteis para os candidatos que desejam entender melhor como o back-end funciona ou até mesmo escrever seu site no Django.


Outros artigos desta série:


  1. Parte dois : JSON, regulares, erros de exceção
  2. Parte três : Python e JS modernos: padrões de strings (linhas-f), descompactação de lista, funções lambda, iterações de lista, geradores, conjuntos.
  3. A quarta parte são argumentos de função, criando e trabalhando com classes, herança, getter setter e propriedades de classe.

Tipo de elenco


Vamos começar lançando a string para o todo. No Python, tudo é simples e direto:


number = int(text) 

Mas em JS você tem que explicar para qual sistema você vai levar - decimal, octal, hexadecimal ou binário:


 number = parseInt(text, 10); 

Para usar o sistema decimal usual, passamos 10 como o segundo argumento para a função parseInt (). 8 para octal, 16 para hexadecimal ou 2 para binário. Se o segundo parâmetro for omitido, o número começa em zero e você usa um navegador desatualizado, a linha com o texto será interpretada como um sistema octal:


 parseInt('012') == 10 //     parseInt('012', 10) == 12 

Atribuição Condicional


Embora Python e JS usem sintaxe diferente para isso, esta operação é popular nos dois idiomas. É popular porque em uma expressão é possível atribuir valores diferentes para os casos Verdadeiro e Falso.
A partir do Python 2.7, a atribuição condicional se parece com:


 value = 'YES' if positive == True else 'NO' 

Em JavaScript, a atribuição condicional é feita usando um operador ternário ? , bem como em C, C ++, C #, Java, Ruby, PHP, Perl, Swift e ActionScript:


 value = positive === true? 'YES': 'NO'; 

Acesse uma propriedade do objeto pelo nome da propriedade


A maneira usual de acessar uma propriedade de objeto em Python e JS é a mesma:


 obj.color = 'YELLOW' 

Mas e se o nome da propriedade estiver entre uma variável de string? Por exemplo, o nome da propriedade pode ser obtido na lista de propriedades ou o nome da propriedade é composto por duas variáveis ​​de sequência: "title" + land_code .
No Python, as getattr() e setattr() existem para isso:


 attribute = 'color' value = getattr(obj, attribute, 'GREEN') setattr(obj, attribute, value) 

Em JS, você pode tratar um objeto como um dicionário e passar o nome da propriedade entre colchetes:


 attribute = 'color'; value = obj[attribute] || 'GREEN'; obj[attribute] = value; 

Para obter o valor padrão se uma propriedade com o mesmo nome não existir, a função getattr() no Python possui um terceiro parâmetro para isso. Em JS, se a propriedade solicitada estiver ausente, a função retornará undefined . Pode ser comparado com o operador OR com o valor padrão - esta é uma prática padrão em JS - este método pode ser encontrado em muitas estruturas e bibliotecas.


Acesso ao dicionário de chaves


Semelhante ao acima. A chave é indicada entre colchetes nos dois idiomas:


 dictionary = {} dictionary['color'] = 'YELLOW' 

Para acesso à chave, o Python usa sintaxe padrão com colchetes, no entanto, se essa chave estiver ausente, isso gerará uma exceção com um erro KeyError .
Mais flexível é o método get() , que retornará None se não houver chave. Você também pode passar um valor que será retornado se a chave estiver ausente:


 key = 'color' value = dictionary.get(key, 'GREEN') 

Em JS, você pode fazer o mesmo truque que com uma propriedade de objeto - OR com um valor padrão:


 key = 'color'; value = dictionary[key] || 'GREEN'; 

Fatias: Listas e Cordas


O Python possui um operador [:] obter parte de uma lista, uma tupla ou estruturas similares. Um exemplo com um objeto do tipo Django QuerySets :


 items = [1, 2, 3, 4, 5] first_two = items[:2] # [1, 2] last_two = items[-2:] # [4, 5] middle_three = items[1:4] # [2, 3, 4] 

JS possui um método slice() com o mesmo efeito:


 items = [1, 2, 3, 4, 5]; first_two = items.slice(0, 2); // [1, 2] last_two = items.slice(-2); // [4, 5] middle_three = items.slice(1, 4); // [2, 3, 4] 

Mas não confunda com o método splice() que modifica a matriz original!


No Python, o operador [:] também se aplica a strings:


 text = 'ABCDE' first_two = text[:2] # 'AB' last_two = text[-2:] # 'DE' middle_three = text[1:4] # 'BCD' 

Em JS, as strings também têm um método slice() :


 text = 'ABCDE'; first_two = text.slice(0, 2); // 'AB' last_two = text.slice(-2); // 'DE' middle_three = text.slice(1, 4); // 'BCD' 

Operações de lista


Na programação, você geralmente precisa coletar e analisar uma sequência de elementos. No Python, as listas geralmente são usadas para isso e, em Javascript, matrizes. Eles têm sintaxe e operações semelhantes, mas métodos diferentes para adicionar e remover elementos.


Nós conectamos as duas listas, adicionamos um elemento ao final, adicionamos um elemento ao início, obtemos e excluímos o elemento no início, obtemos e excluímos o elemento do final e excluímos o elemento específico pelo índice.
Python:


 items1 = ['A'] items2 = ['B'] items = items1 + items2 # items == ['A', 'B'] items.append('C') # ['A', 'B', 'C'] items.insert(0, 'D') # ['D', 'A', 'B', 'C'] first = items.pop(0) # ['A', 'B', 'C'] last = items.pop() # ['A', 'B'] items.delete(0) # ['B'] 

O mesmo em Javascript:


 items1 = ['A']; items2 = ['B']; items = items1.concat(items2); // items === ['A', 'B'] items.push('C'); // ['A', 'B', 'C'] items.unshift('D'); // ['D', 'A', 'B', 'C'] first = items.shift(); // ['A', 'B', 'C'] last = items.pop(); // ['A', 'B'] items.splice(0, 1); // ['B'] 

Unir conjuntos de strings


Combine um conjunto de elementos de sequência em uma única linha usando um espaço, uma vírgula ou uma nova linha como caractere de conexão.


Em Python, o método string join() é usado para isso, que usa uma lista ou uma tupla como argumento. Para os não iniciados (na sintaxe Python), pode parecer estranho iniciar uma expressão com um separador, mas após o uso regular, você se acostumará com esta forma de notação:


 items = ['A', 'B', 'C'] text = ', '.join(items) # 'A, B, C' 

Em JS, matrizes têm um método join() com um separador como argumento:


 items = ['A', 'B', 'C']; text = items.join(', '); // 'A, B, C' 

Resumir


  • Listas e tuplas em Python correspondem a matrizes em Javascript.
  • Os dicionários em Python correspondem aos objetos em Javascript.
  • Strings em Python são semelhantes às strings em Javascript.
  • Em Javascript, converta uma sequência para um número com cuidado, lembrando-se dos sistemas numéricos.
  • Expressões condicionais de linha única existem em seus idiomas.
  • A combinação de seqüências de strings ( ' '.join ) no Python desencoraja os não iniciados na sintaxe, mas você se acostuma rapidamente.

Na próxima série, veremos a criação e análise de JSON, expressões regulares e manipulação de erros e exceções!

Source: https://habr.com/ru/post/pt416617/


All Articles