Skip to content

Instantly share code, notes, and snippets.

@agalazis
Forked from revolunet/python-es6-comparison.md
Created April 7, 2018 11:55
Show Gist options
  • Save agalazis/df316788bff6892c3f4d6c84abd76956 to your computer and use it in GitHub Desktop.
Save agalazis/df316788bff6892c3f4d6c84abd76956 to your computer and use it in GitHub Desktop.
# Python VS ES6 syntax comparison

Python VS ES6 syntax comparison

Python syntax here : 2.7 - online REPL

Javascript ES6 via Babel transpilation - online REPL

Imports

import math
print math.log(42)

from math import log
print log(42)

# not a good practice (pollutes local scope) :
from math import *
print log(42)
import math from 'math';
console.log(math.log(42));

import { log } from 'math';
console.log(log(42));

import * from 'math';
console.log(log(42));

Range

print range(5)
# 0, 1, 2, 3, 4
console.log(Array.from(new Array(5), (x,i) => i));
// 0, 1, 2, 3, 4

Generators

def foo():
    yield 1
    yield 2
    yield 3
function *foo() {
    yield 1;
    yield 2;
    yield 3;
}

Lambdas

lambda a: a * 2
a => a * 2

Destructuring

status, data = getResult()
var [status, data] = getResult();

Spread

search_db(**parameters)
searchDb(...parameters);

Iterators

def fibonacci():
    pre, cur = 0, 1
    while True:
        pre, cur = cur, pre + cur
        yield cur

for x in fibonacci():
    if (x > 1000):
        break
    print x,
var fibonacci = {
  [Symbol.iterator]: function*() {
    var pre = 0, cur = 1;
    for (;;) {
      var temp = pre;
      pre = cur;
      cur += temp;
      yield cur;
    }
  }
}
for (var n of fibonacci) {
  if (n > 1000)
    break;
  console.log(n);
}

Classes

(Python has builtin support for multiple inheritance)

class SpiderMan(Human, SuperHero):
    def __init__(self, age):
        super(SpiderMan, self).__init__(age)
        self.age = age
    def attack(self):
        print 'launch web'
class SpiderMan extends SuperHero {
    constructor(age) {
        super();
        this.age = age;
    }
    attack() {
        console.log('launch web')
    }
}

Comprehensions

names = [c.name for c in customers if c.admin]

(Experimental in Babel)

var names = [for (c of customers) if (c.admin) c.name];

Map

map(lambda: x*2, [1,2,3,4])
[1,2,3,4].map(x => x*2)

length

 len([])
[].length

What's better in Python

  • help(anything) : get docstring for any module/method/function
  • list comprehensions, class magic methods !
  • very powerful OOP
  • huge and coherent standard library, ex : string has 38 useful methods
  • built-in strings and array slicing.

What's better in Javascript

  • Builtin JSON support
  • NPM packaging is a killer-feature : simple and fast, light-years ahead pip+virtualenv.
  • Works in the browser :)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment