🔩 Attrs
Its main goal is to help you to write concise and correct software without slowing down your code.
attrs - это пакет Python, который вернет радость от написания классов, избавив вас от муторной работы по реализации объектных протоколов (они же методы Дандера). Доверенный NASA для миссий на Марсе с 2020 года!
Его основная цель - помочь вам писать лаконичное и корректное программное обеспечение.
🖥 Github
🗒 Docs
@pythonl
Its main goal is to help you to write concise and correct software without slowing down your code.
attrs - это пакет Python, который вернет радость от написания классов, избавив вас от муторной работы по реализации объектных протоколов (они же методы Дандера). Доверенный NASA для миссий на Марсе с 2020 года!
Его основная цель - помочь вам писать лаконичное и корректное программное обеспечение.
🗒 Docs
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
🐍 Box
Box will automatically make otherwise inaccessible keys safe to access as an attribute. You can always pass conversion_box=False to Box to disable that behavior. Also, all new dict and lists added to a Box or BoxList object are converted automatically.
Словари Python с расширенным функциналом, которые помогут вам в написании скриптов.
🖥 Github
#github #python
@pythonl
Box will automatically make otherwise inaccessible keys safe to access as an attribute. You can always pass conversion_box=False to Box to disable that behavior. Also, all new dict and lists added to a Box or BoxList object are converted automatically.
Словари Python с расширенным функциналом, которые помогут вам в написании скриптов.
from box import Box
movie_box = Box({ "Robin Hood: Men in Tights": { "imdb stars": 6.7, "length": 104 } })
movie_box.Robin_Hood_Men_in_Tights.imdb_stars
#github #python
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
Python security best practices cheat sheet
Updated cheat sheet to make sure you keep your Python code secur
Список полезных советов про работу с внешними данными, сканированию кода, загрузке пакетов, сериализации данных, форматированию строк и другим мерам безопасности:
https://snyk.io/blog/python-security-best-practices-cheat-sheet/
@pythonl
Updated cheat sheet to make sure you keep your Python code secur
Список полезных советов про работу с внешними данными, сканированию кода, загрузке пакетов, сериализации данных, форматированию строк и другим мерам безопасности:
https://snyk.io/blog/python-security-best-practices-cheat-sheet/
@pythonl
📚9 must-have Python developer tools.
9 обязательных инструментов Python разработчика.
1. PyCharm IDE
2. Jupyter notebook
3. Keras
4. Pip Package
5. Python Anywhere
6. Scikit-Learn
7. Sphinx
8. Selenium
9. Sublime Text
@pythonl
9 обязательных инструментов Python разработчика.
1. PyCharm IDE
2. Jupyter notebook
3. Keras
4. Pip Package
5. Python Anywhere
6. Scikit-Learn
7. Sphinx
8. Selenium
9. Sublime Text
@pythonl
🤖Errbot
Errbot is a chatbot. It allows you to start scripts interactively from your chatrooms for any reason: random humour, chatops, starting a build, monitoring commits, triggering alerts...
Errbot - это чат-бот, который можно подключить к чату, при этом бот будет вести осмысленный и интересный диалог.
🖥 Github
@pythonl
Errbot is a chatbot. It allows you to start scripts interactively from your chatrooms for any reason: random humour, chatops, starting a build, monitoring commits, triggering alerts...
Errbot - это чат-бот, который можно подключить к чату, при этом бот будет вести осмысленный и интересный диалог.
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
If you want to manage your Github resources (repositories, user profiles, organizations, etc.) from Python scripts, try PyGithub. Above is an example to get a list of Github repositories when searching for a certain topic.
Если вы хотите управлять Github (репозиториями, профилями пользователей, организациями и т.д.) с помощью скриптов на Python, попробуйте PyGithub. Выше приведен пример получения списка репозиториев Github при поиске определенной темы.
$ pip install PyGithub
📌 Документация
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
D-Tale: A Python Library to Visualize and Analyze your Data Without Code
The GIF above shows how your DataFrame will look like when using D-Tale. D-Tale is also useful for analyzing and visualizing your data without code.
D-Tale: Библиотека Python для визуализации и анализа данных без кода
В приведенном выше GIF показано, как будет выглядеть ваш DataFrame при использовании D-Tale. D-Tale также полезен для анализа и визуализации данных без кода.
▪D-Tale.
@pythonl
The GIF above shows how your DataFrame will look like when using D-Tale. D-Tale is also useful for analyzing and visualizing your data without code.
D-Tale: Библиотека Python для визуализации и анализа данных без кода
В приведенном выше GIF показано, как будет выглядеть ваш DataFrame при использовании D-Tale. D-Tale также полезен для анализа и визуализации данных без кода.
▪D-Tale.
@pythonl
If you want to get the row whose ALL values satisfy a certain condition, use numpy’s all method. To get the row whose AT LEAST one value satisfies a certain condition, use numpy’s any method.
Если вы хотите получить строку, ВСЕ значения которой удовлетворяют определенному условию, используйте метод numpy's all. Чтобы получить строку, в которой хотя бы одно значение удовлетворяет определенному условию, используйте метод numpy's any.
В приведенном коде показана разница в выводах между all и any.
import numpy as np
a = np.array([[1, 2, 1], [2, 2, 5]])
# get the rows whose all values are fewer than 3
mask_all = (a<3).all(axis=1)
print(a[mask_all])
"""
[[1 2 1]]
"""
mask_any = (a<3).any(axis=1)
print(a[mask_any])
"""
[[1 2 1]
[2 2 5]]
"""
▪Numpy docs
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
Pydantic: 10 наиболее распространенных вариантов использования
1. Basic Data Validation
Use Pydantic models to validate incoming data easily.
from pydantic import BaseModel
class User(BaseModel):
name: str
age: int
user = User(name='John Doe', age=30)
2. Default Values
Define default values for your model fields.
class User(BaseModel):
name: str
age: int = 18 # Default value
3. Optional Fields
Mark fields as optional using the Optional type.
from typing import Optional
class User(BaseModel):
name: str
age: Optional[int] = None
4. Custom Validators
Create custom validators with the @validator decorator.
from pydantic import validator
class User(BaseModel):
name: str
age: int
@validator('age')
def validate_age(cls, value):
if value < 18:
raise ValueError('User must be 18+')
return value
5. Nested Models
Use Pydantic models to validate nested data structures.
class Address(BaseModel):
street: str
city: str
class User(BaseModel):
name: str
age: int
address: Address
6. Lists of Models
Handle lists of a specific model.
from typing import List
class User(BaseModel):
name: str
age: int
class UserList(BaseModel):
users: List[User]
7. Union Fields
Use Union to allow a field to be one of several types.
from typing import Union
class User(BaseModel):
identifier: Union[str, int]
8. Value Constraints
Impose constraints on values using Field.
from pydantic import Field
class User(BaseModel):
name: str
age: int = Field(..., gt=0, lt=120) # Greater than 0, less than 120
9. Aliases for Fields
Define aliases for model fields, which can be useful for fields that are Python keywords.
c
lass User(BaseModel):
name: str
class_: str = Field(alias='class')
10. Recursive Models
Make models that can contain themselves.
from typing import Optional
class TreeNode(BaseModel):
value: int
left: Optional['TreeNode'] = None
right: Optional['TreeNode'] = None
TreeNode.update_forward_refs() # Resolve string annotations
▪pydantic
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
f-строки в Python обеспечивают более читабельный, лаконичный и менее подверженный ошибкам способ форматирования строк, чем традиционное форматирование строк. Они обладают множеством полезных функций, которые обязательно пригодятся в повседневной работе.
1. String Interpolation
The most used f-string feature by far is string interpolation. All you need to do is wrap the value or variable in curly braces ({}) and you're good to go.
str_val = 'apples'
num_val = 42
print(f'{num_val} {str_val}') # 42 apples
2. Variable names
Apart from getting a variable's value, you can also get its name alongside the value.
str_val = 'apples'
num_val = 42
print(f'{str_val=}, {num_val = }') # str_val='apples', num_val = 42
3. Mathematical operations
Not syntactically unlike variable names, you can also perform mathematical operations in f-strings.
num_val = 42
print(f'{num_val % 2 = }') # num_val % 2 = 0
4. Printable representation
Apart from plain string interpolation, you might want to get the printable representation of a value.
str_val = 'apples'
print(f'{str_val!r}') # 'apples'
5. Number formatting
Numbers are a great candidate for this. If, for example, you want to trim a numeric value to two digits after the decimal, you can use the .2f format specifier.
price_val = 6.12658
print(f'{price_val:.2f}') # 6.13
6. Date formatting
Finally, dates can also be formatted the same way as numbers, using format specifiers. As usual, %Y denotes the full year, %m is the month and %d is the day of the month.
from datetime import datetime;
date_val = datetime.utcnow()
print(f'{date_val=:%Y-%m-%d}') # date_val=2021-07-09
▪String Formatting Best Practices
▪F-strings или как сделать код чуть более быстрым
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡ Example that demonstrates how to use Redis with the redis-py library, which is a popular Redis client for Python.
Redis – это быстрое хранилище данных типа «ключ‑значение» в памяти с открытым исходным кодом.
Ниже приведен пример, демонстрирующий, как использовать Redis с библиотекой redis-py, которая является популярным клиентом Redis для Python.
▪Github
@pythonl
Redis – это быстрое хранилище данных типа «ключ‑значение» в памяти с открытым исходным кодом.
Ниже приведен пример, демонстрирующий, как использовать Redis с библиотекой redis-py, которая является популярным клиентом Redis для Python.
$ pip install redis
import redis
# Create a Redis client
r = redis.Redis(host='localhost', port=6379, db=0)
# String Operations
r.set('mykey', 'Hello Redis!')
value = r.get('mykey')
print(value) # Output: b'Hello Redis!'
# List Operations
r.lpush('mylist', 'element1')
r.lpush('mylist', 'element2')
r.rpush('mylist', 'element3')
elements = r.lrange('mylist', 0, -1)
print(elements) # Output: [b'element2', b'element1', b'element3']
# Set Operations
r.sadd('myset', 'member1')
r.sadd('myset', 'member2')
r.sadd('myset', 'member3')
members = r.smembers('myset')
print(members) # Output: {b'member2', b'member1', b'member3'}
# Hash Operations
r.hset('myhash', 'field1', 'value1')
r.hset('myhash', 'field2', 'value2')
value = r.hget('myhash', 'field1')
print(value) # Output: b'value1'
# Sorted Set Operations
r.zadd('mysortedset', {'member1': 1, 'member2': 2, 'member3': 3})
members = r.zrange('mysortedset', 0, -1)
print(members) # Output: [b'member1', b'member2', b'member3']
# Delete a key
r.delete('mykey')
# Close the Redis connection
r.close()
▪Github
@pythonl
5 ошибок, которых должен избегать каждый разработчик Python!
1. Avoid using global variables
Избегайте использовать глобальных переменных
# Using global variables
my_var = 42
def my_function():
global my_var
my_var += 1
return my_var
# Using local variables
def my_function2(my_var):
my_var += 1
return my_var
2. Avoid blocking I/O operations
Избегайте блокировки операций ввода/вывода
# Blocking I/O
import requests
response = requests.get('https://example.com')
print(response.text)
# Non-blocking I/O using asyncio
import asyncio
import aiohttp
async def fetch(session, url):
async with session.get(url) as response:
return await response.text()
async def main():
async with aiohttp.ClientSession() as session:
html = await fetch(session, 'https://example.com')
print(html)
asyncio.run(main())
3. Avoid using eval() and exec()
избегайте использования eval() и exec()
# Using eval() to execute code
my_var = '1 + 1'
result = eval(my_var)
# Using ast.literal_eval() to safely evaluate literals
import ast
my_var = '[1, 2, 3]'
result = ast.literal_eval(my_var)
4. Avoid using mutable default arguments
Избегайте использования изменяемых аргументов
# Using mutable default arguments
def my_function(my_list=[]):
my_list.append(1)
return my_list
result1 = my_function() # [1]
result2 = my_function() # [1, 1]
# Using immutable default arguments
def my_function2(my_list=None):
if my_list is None:
my_list = []
my_list.append(1)
return my_list
result3 = my_function2() # [1]
result4 = my_function2() # [1]
5. Avoid using *args and **kwargs excessively
Избегайте частого использования *args и **kwargs
def my_function(*args, **kwargs):
arg1 = args[0]
arg2 = kwargs.get('arg2', 'default_value')
return arg1, arg2
result = my_function('value1', arg2='value2')
# Using named arguments and default values
def my_function2(arg1, arg2='default_value'):
return arg
▪Article
▪10 самых распространенных ошибок Python
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
Полезные примеры того, как улучшить ваш код на Python
1. Using List Comprehensions
squares = []
for x in range(10):
squares.append(x**2)
print(squares)
2. Using Generators
with open('example.txt') as f:
for line in (line.strip() for line in f):
print(line)
3. Using the zip() function
names = ['Pippo', 'Pluto', 'Paperino']
ages = [25, 30, 35]
for name, age in zip(names, ages):
print(f'{name} is {age} years old')
4. Using DefaultDictfrom collections import defaultdict
s = 'hello world'
d = defaultdict(int)
for c in s:
d[c] += 1
print(d)
5. Using enumerate()
fruits = ['apple', 'banana', 'cherry']
for i, fruit in enumerate(fruits):
print(f'{i}: {fruit}')
▪Techniques to Write Better Python Code
▪Улучшение Python-кода
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Typeshed contains external type annotations for the Python standard library and Python builtins, as well as third party packages as contributed by people external to those projects.
Typeshed содержит внешние аннотации типов для стандартной библиотеки Python и встроенных модулей Python, а также пакеты сторонних разработчиков.
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Подборка полезных папок с каналами для датасаентисов
Папки, где вы найдете каналы с разбором лучших практик написания кода на Python и Golang до каналов по машинному обучению и нейросетям (папки работают на последних версиях тг).
https://yangx.top/addlist/2Ls-snqEeytkMDgy - Машинное обучение
https://yangx.top/addlist/8vDUwYRGujRmZjFi - Python
https://yangx.top/addlist/MUtJEeJSxeY2YTFi - Golang
Папки, где вы найдете каналы с разбором лучших практик написания кода на Python и Golang до каналов по машинному обучению и нейросетям (папки работают на последних версиях тг).
https://yangx.top/addlist/2Ls-snqEeytkMDgy - Машинное обучение
https://yangx.top/addlist/8vDUwYRGujRmZjFi - Python
https://yangx.top/addlist/MUtJEeJSxeY2YTFi - Golang
Реализация алгоритма топологической сортировки
# a
# / \
# b c
# / \
# d e
edges = {"a": ["c", "b"], "b": ["d", "e"], "c": [], "d": [], "e": []}
vertices = ["a", "b", "c", "d", "e"]
def topological_sort(start, visited, sort):
current = start
visited.append(current)
neighbors = edges[current]
for neighbor in neighbors:
if neighbor not in visited:
sort = topological_sort(neighbor, visited, sort)
sort.append(current)
if len(visited) != len(vertices):
for vertice in vertices:
if vertice not in visited:
sort = topological_sort(vertice, visited, sort)
return sort
if __name__ == "__main__":
sort = topological_sort("a", [], [])
print(sort)
▪Topological sorting
▪Топологическая сортировка
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM