Forwarded from NOP::Nuances of Programming
Многогранность языка python делает его крайне популярным среди разработчиков.
В данной статье автор делается подборкой полезных хитростей и приемов, которые смогут упростить процесс написания кода
https://nuancesprog.ru/p/1680/
@nuancesprog #статьи #Python #SoftwareDevelopment #Learning
В данной статье автор делается подборкой полезных хитростей и приемов, которые смогут упростить процесс написания кода
https://nuancesprog.ru/p/1680/
@nuancesprog #статьи #Python #SoftwareDevelopment #Learning
Nuances of programming
Полезные хитрости на Python от А до Я
Python — это один из самых популярных и востребованных языков программирования в мире. И на то есть множество причин
Django templates access to tuples:
{{ t.0.0 }} is like t[0][0] in Python code
{% for option in options %}
<option value="{{ option.0 }}" >{{ option.1 }}</option>
{% endfor %}
{{ t.0.0 }} is like t[0][0] in Python code
{% for option in options %}
<option value="{{ option.0 }}" >{{ option.1 }}</option>
{% endfor %}
Текущий стек вызовов
import traceback
for line in traceback.format_stack():
print(line.strip())
import traceback
for line in traceback.format_stack():
print(line.strip())
from concurrent.futures import ProcessPoolExecutor
import concurrent.futures
URLS = [ ... ]
def parse(url):
# our logic for parsing the page
return data # still probably a dict
with ProcessPoolExecutor(max_workers=4) as executor:
future_results = {executor.submit(parse, url): url for url in URLS}
results = []
for future in concurrent.futures.as_completed(future_results):
results.append(future.result())
import concurrent.futures
URLS = [ ... ]
def parse(url):
# our logic for parsing the page
return data # still probably a dict
with ProcessPoolExecutor(max_workers=4) as executor:
future_results = {executor.submit(parse, url): url for url in URLS}
results = []
for future in concurrent.futures.as_completed(future_results):
results.append(future.result())
# Это включит автодополнение в консольном режиме python
import rlcompleter
import readline
readline.parse_and_bind("tab: complete")
Как не делать это каждый раз
В файл ~/.pyrc положить:
import rlcompleter
import readline
readline.parse_and_bind("tab: complete")
В ~/.bashrc добавить:
export PYTHONSTARTUP="${HOME}/.pyrc"
export PYTHONIOENCODING="UTF-8"
И, чтобы применить изменение прямо сейчас без перезапуска консоли, выполнить:
source ~/.bashrc
import rlcompleter
import readline
readline.parse_and_bind("tab: complete")
Как не делать это каждый раз
В файл ~/.pyrc положить:
import rlcompleter
import readline
readline.parse_and_bind("tab: complete")
В ~/.bashrc добавить:
export PYTHONSTARTUP="${HOME}/.pyrc"
export PYTHONIOENCODING="UTF-8"
И, чтобы применить изменение прямо сейчас без перезапуска консоли, выполнить:
source ~/.bashrc
Доступ к словарю по атрибутам:
super(AttrDict, self).__init__(*args, **kwargs)
self.__dict__ = self
class AttrDict(dict):
def __init__(self, *args, **kwargs):super(AttrDict, self).__init__(*args, **kwargs)
self.__dict__ = self
Словарь с дефолтными значениями для новых ключей, создающимися на лету
d = collections.defaultdict(list)Именованные кортежи
>>> from collections import namedtuple
>>> A = namedtuple('A', 'count enabled color')
>>> tup = A(count=1, enabled=True, color="red")
>>> tup.count
1
>>> tup.enabled
True
>>> from collections import namedtuple
>>> A = namedtuple('A', 'count enabled color')
>>> tup = A(count=1, enabled=True, color="red")
>>> tup.count
1
>>> tup.enabled
True
import psutil
import os, sys, time
pid = os.getpid()
p = psutil.Process(pid)
print(' name :', p.name())
print(' exe :', p.exe())
info = p.memory_full_info()
# Convert to MB
memory = info.uss / 1024 / 1024
print('Memory used: {:.2f} MB'.format(memory))
import os, sys, time
pid = os.getpid()
p = psutil.Process(pid)
print(' name :', p.name())
print(' exe :', p.exe())
info = p.memory_full_info()
# Convert to MB
memory = info.uss / 1024 / 1024
print('Memory used: {:.2f} MB'.format(memory))
def invalidate_connections(): django.db.close_old_connections() django.db.connection.close()