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

Декораторы, итераторы и контракты.
Download Telegram
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:")
ERROR:root:Something failed:
Traceback (most recent call last):
File "logtb.py", line 5, in <module>
1/0
ZeroDivisionError: division by zero
Парсинг аргументов командной строки

import argparse

if __name__ == '__main__':
from argparse import ArgumentParser
parser = ArgumentParser(description='My app which is mine')
parser.add_argument('-ll', '--loglevel',
type=str,
choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'],
help='Set the logging level')
args = parser.parseargs()
logging.basicConfig(level=args.loglevel)
Планировщик задач встроенный в Python

import sched
import time
from datetime import datetime, timedelta

scheduler = sched.scheduler(timefunc=time.time)

def saytime():
print(time.ctime())
scheduler.enter(10, priority=0, action=saytime)

saytime()
try:
scheduler.run(blocking=True)
except KeyboardInterrupt:
print('Stopped.')
Цветовое оформление логов

import colorlog

logger = colorlog.getLogger()
logger.setLevel(colorlog.colorlog.logging.DEBUG)

handler = colorlog.StreamHandler()
handler.setFormatter(colorlog.ColoredFormatter())
logger.addHandler(handler)

logger.debug("Debug message")
logger.info("Information message")
logger.warning("Warning message")
logger.error("Error message")
logger.critical("Critical message")
Интерактивная графика на Python - pyqtgraph
dominate lets you create HTML with a series of nested context handlers
import dominate
from dominate.tags import *

doc = dominate.document(title='Main Page')

with doc.head:
meta(charset="utf-8")

with doc.body:
h1("hello!")

print(str(doc))
Инфа по процессору, памяти, диску и сети psutil

import psutil
import os, sys, time

pid = os.getpid()
p = psutil.Process(pid)

print('Process info:')
print(' name :', p.name())
print(' exe :', p.exe())

data = []
while True:
data += list(range(100000))
info = p.memory_full_info()
# Convert to MB
memory = info.uss / 1024 / 1024
print('Memory used: {:.2f} MB'.format(memory))
if memory > 40:
print('Memory too big! Exiting.')
sys.exit()
time.sleep(1)
Process info:
name : Python
exe : /usr/local/Cellar/.../Python
Memory used: 11.82 MB
Memory used: 14.91 MB
Memory used: 18.77 MB
Memory used: 22.63 MB
Memory used: 26.48 MB
Memory used: 30.34 MB
Memory used: 34.19 MB
Memory used: 38.05 MB
Memory used: 41.90 MB
Memory too big! Exiting.
Кроссплатформенный мониторинг изменений файловой системы watchdog

from watchdog.observers import Observer
from watchdog.events import (PatternMatchingEventHandler, FileModifiedEvent, FileCreatedEvent)

observer = Observer()
class Handler(PatternMatchingEventHandler):
def on_created(self, event: FileCreatedEvent):
print('File Created: ', event.src_path)
def on_modified(self, event: FileModifiedEvent):
print('File Modified: %s [%s]' % (
event.src_path, event.event_type))

observer.schedule(event_handler=Handler('*'), path='.')
observer.daemon = False
observer.start()

try:
observer.join()
except KeyboardInterrupt:
print('Stopped.')
observer.stop()
observer.join()
File Created: ./secrets.txt
File Modified: . [modified]
File Modified: ./secrets.txt [modified]
File Modified: ./secrets.txt [modified]
File Modified: ./secrets.txt [modified]
File Modified: ./secrets.txt [modified]
Stopped.