Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/suissa/aprendendo-python-via-js
Minha forma de aprender Python
https://github.com/suissa/aprendendo-python-via-js
Last synced: 24 days ago
JSON representation
Minha forma de aprender Python
- Host: GitHub
- URL: https://github.com/suissa/aprendendo-python-via-js
- Owner: suissa
- Created: 2021-11-18T06:03:55.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2021-11-19T21:00:07.000Z (about 3 years ago)
- Last Synced: 2024-10-30T01:48:00.034Z (2 months ago)
- Language: Python
- Size: 44.9 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# aprendendo-python-via-js
Provavelmente isso não ajude ninguém, mas achei interessante escrever algumas correlações simples q fiz,
pois estou aprendendo Python me baseando no que quero fazer, pois já fiz tudo em JS.Logo, a forma mais fácil, IMHO, de aprender uma lang nova é tentar *codar* as coisas que vc já conhece.
# "Ementa"
- request HTTP
- transformação de Array em Objetos/Dicts
- separar valores definidos para "variáveis"
- datas# Primeiras impressões
Não gostei mto de tudo parecer meio "global", tanto q já tive problemas de versão.
Tirando isso, qualquer coisa demanda muito menos tempo e linhas q no JS.
## Melhores correlações
Eu tava mó puto q tem q ficar criando função com def pra dar return em code de 1 linha,
até q aprendi o lambda do Python, q faz o mesmo esquema de Arrow Function One Line, ex:```js
numbers = [2, 4, 6, 8, 10]
squared_numbers = numbers.map(n => n * n)
console.log(squared_numbers)
``````py
numbers = [2, 4, 6, 8, 10]
squared_numbers = list(map(lambda n: n * n, numbers))
print(squared_numbers)# Além disso tb temos List Comprehensions
# Aprendi isso agora aqui https://docs.python.org/release/2.7/tutorial/datastructures.html#list-comprehensions
square_numbers = [n*n for n in numbers]
print( square_numbers )
```### Funcional
Bom o lambda é uma MARAVILHA, só faltou o reduce ser nativo, precisei usar a functools p/ isso:
```js
numbers = [2, 4, 6, 8, 10]sum = (total, n) => total + n
result = numbers.reduce(sum, 0)console.log(result)
``````py
numbers = [2, 4, 6, 8, 10]import functools
sum = lambda total, n: total + n
result = functools.reduce(sum, numbers)print(result)
```Fora isso, até agora parece mto parecido com o JS se eu não usar `let` nem `const`.
#### Adendo
> Deixando BEM claro que estou escrevendo o JS da forma mais parecida do Python, pois eu uso const em TUDO :p
## Datas
Uma coisa que achei BEM ESTRANHA é que o Python trabalha o timestamp em SEGUNDOS e não milisegundos.
Além disso para operar os valores de uma Data no JS a gente precisa mudar O OBJETO criado.
Nisso o Python está muito a frente, acho a forma do Python bem mais da hora, mesmo tendo que usar
esse timedelta, que na primeira vez me causou estranheza, contudo, agora tá BEM SUAVE!JS:
```js
dateNow = new Date()
days = 5
dateNow.setDate(dateNow.getDate() - days);
console.log(dateNow)
```PY:
```py
from datetime import date, timedelta
days = 5
dateNow = date.today() - timedelta(days)
print(dateNow)
```## Timers - PROBLEMA NO PYTHON
Não consegui cancelar um Timer internamente como faço no JS:
```js
counter = 0interval = setInterval(fn, 1)
function fn () {
console.log(counter)
if (counter >= 2)
clearInterval(interval)
counter+=1
}
```Preciso achar alguma forma de conseguir pegar a referência do `interval` dentro da função que
é executada, aliás precisei apelar para o `function` no JS para fazer **HOISTING** dela, para que
eu pudesse declarar ela depois da sua chamada. **Eu RARAMENTE uso dessa forma!**Esse é meu code em Python:
```py
from threading import Timer# copiei de algum lugar
def setInterval(function, interval, *params, **kwparams):
def setTimer(wrapper):
wrapper.timer = Timer(interval, wrapper)
wrapper.timer.start()def wrapper():
function(*params, **kwparams)
setTimer(wrapper)
setTimer(wrapper)
return wrapperdef clearInterval(wrapper):
wrapper.timer.cancel()counter = 0
def fn():
global counter
print(counter)if (counter > 2): exit()
counter+=1
interval = setInterval(fn, 1)
```Por enquanto foi a única coisa que realmente nenhum exemplo que achei me ajudou.
Irei deixar isso para depois. =><=