Фишки Python
29 subscribers
2 photos
3 files
29 links
Всё что ты хотел узнать, но ленился спросить.

Декораторы, итераторы и контракты.
Download Telegram
PyPy - во время выполнения компилирует в машинный код наиболее часто используемый код
LLVM - low level virtual machine
from numba import jit
from numpy import arange

# jit decorator tells Numba to compile this function.
# The argument types will be inferred by Numba when function is called.
@jit
def sum2d(arr):
M, N = arr.shape
result = 0.0
for i in range(M):
for j in range(N):
result += arr[i,j]
return result

a = arange(9).reshape(3,3)
print(sum2d(a))
Numba компилирует в LLVM помеченные декоратором @jit функции
В NumPy ndarray - X[i][j] - каждый вызов создает слайс X[i], следует писать X[i, j]
Cython типизированное расширение языка Python
Оптимизирующий компилятор Python и Сython в код на C, использующий C-API интерпретатора CPython
Компиляция кода на pure-Python с помощью Cython может дать небольшой прирост производительности
С помощью jupyter и "%%cython -a" можно посмотреть Сишную имплементацию кода на питон по-строчно!
Welcome Blockchain Hell

pip install base58
IPython %timeit example:

%timeit -c main.check("122342344234234")
9.32 ms ± 308 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
from bitcoin import *

private_key = sha256(seed)
public_key = privtopub(private_key)
addr = pubtoaddr(public_key)
Язык динамический, но для наглядности можно указать типы передаваемых параметров

def test(s: str, b: int):
print(s*2)
print(b*10)
Скачивание страниц в разных потоках

from concurrent.futures import ThreadPoolExecutor as Executor

urls = """google twitter facebook youtube pinterest tumblr instagram reddit flickr meetup classmates microsoft apple linkedin xing renren disqus snapchat twoo whatsapp""".split()

def fetch(url):
from urllib import request, error
try:
data = request.urlopen(url).read()
return '{}: length {}'.format(url, len(data))
except error.HTTPError as e:
return '{}: {}'.format(url, e)

with Executor(max_workers=4) as exe:
template = 'http://www.{}.com'
jobs = [exe.submit(fetch, template.format(u)) for u in urls]
results = [job.result() for job in jobs]
print('\n'.join(results))
Заменяем Executor на ProcessPoolExecutor получаем скачивание в разных процессах

from concurrent.futures import ProcessPoolExecutor as Executor
Логирование

import logging
logger = logging.getLogger()

logger.debug('This is for debugging. Very talkative!')
logger.info('This is for normal chatter')
logger.warning('Warnings should almost always be seen.')
logger.error('You definitely want to see all errors!')
logger.critical('Last message before a program crash!')

if __name__ == '__main__':
logging.basicConfig(level=logging.DEBUG)
try:
1/0
except:
logger.exception("Something failed:")