Записки Дата инженера
18 subscribers
10 photos
1 file
12 links
Здравствуйте! Я Дата инженер. Буду писать сюда тому что научился или термины, понятия которые я не знал
Download Telegram
Channel name was changed to «Записки Python программиста»
Predicate in programming is function which returns True or False
👍1
Функция у которой нет команды return возвращает значение None
Чтобы вывести число с запятыми черед каждые 3 цифры для читабельности можно написать след код:
print(‘{:,}’.format(123456789))
#answer 123,456,789
👍1
Как скопировать list ?
a = [1,2,3]
b = a[:]
b2 = a.copy()
👍1
Insert() and append()

a = [1,2,3]
a.insert([4,5,6])
# a => [1,2,3,[4,5,6]]

a.extend([4,5,6])
a=> [1,2,3,4,5,6]

Extend равен на оператор + просто продолжает список.

Если в insert подавать список то в ответе получится вложенный список
👍1
Сегодня начал учить про асинхронность (asyncio)

Асинхронность ну или конкурентность в питоне помогает быстрее реагировать и быстрее работать. Есть понятия корутина, таск, футура.
Ниже обычный пример асинхронный функции:

import asyncio
async def hello():
Print(‘hello’)
await
asyncio.sleep(3)
print(‘world’)
👍1
Как вернуть значение словаря по ключу?
Самый обычный способ это dict[‘key’]
А если этого ключа нет то предыдущий код вызовет ошибку. В таком случае лучше использовать get():
dict.get(‘key’, default)
В этот раз если ключа не будет вернется значение deafult
👍1
list generators and list comprehension
Сгенерировать лист из 10 нулей:
arr = [0 for _ in range(10)]
Сгенерировать четные числа до n:
arr = [i for i in range(n) if i % 0 == 0]
Forwarded from BZD Hacker_lib
Black_Hat_Python_Программирование_для_хакеров_и_пентестеров_.pdf
8.9 MB
📔 Title: Black Hat Python. Программирование для хакеров и пентестеров.

#Linux #Book #rus

🌐 Lang.: Russian
🧔 Author: Brian Ward
🕘 Year: 2022
📑 Pages: 224
#️⃣ ISBN: -978-5-4461-3935-4

📝 Description: Во втором издании бестселлера Black Hat Python вы исследуете темную сторону возможностей Python — все от написания сетевых снифферов, похищения учетных данных электронной почты и брутфорса каталогов до разработки мутационных фаззеров, анализа виртуальных машин и создания скрытых троянов.

BZD Hacker_lib
👍1
Несколько полезных методов строк:
istitle() - проверка на заголовок
isdigit() - проверка на цифры
isupper() - проверка на на заглавные буквы
islower() - проверка на маленькие буквы
is.alpha() - проверка на любые буквы
is.alnum() - проверка на любые буквы и цифры

Методы строк которые меняют регистры:
lower() - все буквы делает маленькими
upper() - все буквы делает большими
swapcase() - все регистры каждой буквы меняет на противоположную
title() - первую букву каждого слова делает заглавной, остальные буквы маленькими
capitalize() - только у первого слова первая буква будет большой, все остальные маленькие

Методы нахождения:
index() - Метод .index также возвращает индекс первой найденной подстроки, аналогично методу .find
S.find(sub, start, end) - Метод .find возвращает индекс первого слева вхождения строки sub в строке S. Подстрока sub ищется на всем срезе строки S. Но вы можете указать интервал поиска, передав второй и третий аргументы. Метод .find вернет значение -1, если ничего не будет найдено.
rfind() - как find только начинает искать справа буква r - right
S.startswith(prefix, start, end) - Данный метод возвращает True если строка S начинается с последовательности символов prefix (префикса) и False в противном случае. При передаче параметра start проверка начнется именно с этой позиции. Если передать значение end, проверка закончится в этой позиции.
S.endswith(prefix, start, end) - Данный метод возвращает True если строка S заканчивается последовательностью символов prefix (префикса) и False в противном случае. При передаче параметра start проверка начнется именно с этой позиции. Если передать значение end, проверка закончится в этой позиции.

Методы дополнения или для красивого вывод:
s.ljust(width, fillchar) - заполняет справа символами чтобы сдвинуть влево
s.rjust(width, fillchar) - заполняет слева символами чтобы сдвинуть вправо
s.center(width, fillchar) - заполняется слева справа чтобы слово было в центре
Несколько примеров форматирования строк через f-strings
st = 'Hello!'
print(f'{st}')
print(f'{st:-^20}')
print(f'{st:->20}')
print(f'{st:?<20}')
Результаты:
Hello!
-------Hello!-------
--------------Hello!
Hello!??????????????
👍1
Сегодня несколько примеров работы над множествами:
set_a = {1, 2, 3, 4}
set_b = {3, 4, 5, 6}

print(set_a & set_b) #intersection - Пересечение множеств
print(set_a | set_b) #union - Объединение множеств
print(set_a - set_b) #difference - разность множеств
print(set_a ^ set_b) #symmetric difference - симметрическая разность множеств
👍1
как прочитать неопределенное кол-во элементов? Ниже приведен один из примеров:
import sys
from sys import stdin
lines = stdin.read().splitlines()
👍1
Чтение файлов
Самый простой способ чтения файла это:

sql
file = open('name_of_file.txt')
print(file.read())

Функция open() в стандартном режиме открывает файл для чтения.

sql
def open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)

Переменная file = _io.TextIOWrapper

Для самого чтения из файла используются следующие функции

- read() - читает с самого начала до конца возвращает целую строку
- readline() - читает одну строку возвращает строку
- readlines() - читает все строки и возвращает list

Если в файле есть русские слова то нужно добавить кодировку

sql
file = open('name_of_file.txt', encoding = 'utf-8')

После открытие и обработки файла нужно файл закрыть file.close(). Но можно об этом не волноваться когда используешь контекстный менеджер with. Пример ниже

sql
with open('name_of_file.txt', encoding='utf-8') as f:
print(f.read())

Есть несколько режимом открытия файла:

- r: открывает файл в режиме «только для чтения». Этот режим применяется по умолчанию для функции open. Чтение файла начинается с начала
- rb: открывает файл в режиме «только для чтения» в двоичном формате и начинает чтение с начала файла. Буква b обозначает слово binary(двоичный). Хотя двоичный формат можно использовать для разных целей, обычно он используется при работе с такими вещами, как изображения, видео и т. д.
- r+: открывает файл для чтения и записи, помещая указатель в начало файла.
- w: открывается в режиме «только для записи». Указатель помещается в начало файла, и это перезапишет любой существующий файл с таким же именем. Он создаст новый файл, если файл с таким именем не существует.
- wb: открывает файл в режиме «только для записи» в двоичном режиме.
- w+: открывает файл для записи и чтения.
- wb+: открывает файл для записи и чтения в двоичном режиме.
- a: открывает файл для добавления к нему новой информации. Указатель помещается в конец файла. Новый файл создается, если файл с таким именем не существует.
- ab: открывает файл для добавления в двоичном режиме.
- a+: открывает файл как для добавления, так и для чтения.
- ab+: открывает файл как для добавления, так и для чтения в двоичном режиме.
👍1
# Lambda Функции

Пример обычной функции и lambda функции (строчной функции, анонимной функции)

python
def func(a):
return a * 2

func = lambda a: a * 2


Не все функции можно превратить в анонимную функцию. Только те которые возвращают. Из-за этого анонимные функции не имеют ключевое слова return. Добавления этого слова приведет к SyntaxError. Так же к этому приведет assert, pass, raise. Нужно отметить что так же не поддерживает аннотации

Можно сразу применить функции в конце внутри скобке написать аргументы

python
>>> (lambda x: x + 1)(2)
3
>>> (lambda x, y: x + y)(2, 3)
5


Однострочные функции удобно использовать в функциях map(), filter(), functools.reduce()

Но иногда нужно видеть грань когда анонимные функции будут наоборот могут снизить читабельность вашего кода. как в примере ниже

python
>>> list(map(lambda x: x.capitalize(), ['cat', 'dog', 'cow']))
['Cat', 'Dog', 'Cow']

>>> [x.capitalize() for x in ['cat', 'dog', 'cow']]
['Cat', 'Dog', 'Cow']

#2 ой пример с filter
>>> even = lambda x: x%2 == 0
>>> list(filter(even, range(11)))
[0, 2, 4, 6, 8, 10]

>>> [x for x in range(11) if x%2 == 0]
[0, 2, 4, 6, 8, 10]


Лучше использовать генераторы списков (list comprehension) чем лямбду
👍1
В следующим примере найдем ключ у которого значения равен максимальному
d = {
'a': 1,
'b': 2,
'c': 5,
'e': 0
}

print(max(d, key=d.get))

Обратите внимание если сделать просто: max(d) -> то это вернет 'e' то есть максимум из ключей
👍1
Most asked SQL interview questions

Hello everyone, recently I've passed SQL interview. And I collected most popular SQL questions and topics which you can encounter. #challengeyourself
-What is SQL? Difference between SQL and NoSql
-Explain the next abbreviations DDL, DML, DCL, TCL
Logical JOINs (FULL, CROSS, LEFT/RIGHT, INNER Joins, USING(), ON)
-Physical joins (hash, nested loops and merge joins)
-Difference between JOIN and UNION
-Normalization (1NF, 2NF, 3NF, BCNF, 4NF, 5NF)
-Aggregation functions (sum(), avg(), min(), max(), GROUP BY, HAVING)
-WINDOW functions or OVER() functions (ROW(), RANK(), DENSE_RANK(), LAG(), LEAD(), PARTITION BY, ORDER BY, ROWS BETWEEN)
-Common table expressions (CTE) and VIEWs
-Indexes and their types (B-tree, hash, GIST, SP-Gist, GIN, BRIN, Clustered and Non-clustered
-Recursion in SQL
-Transactions (ACID, Isolation levels(uncommitted, commited, repeatable, serializable, snapshots))
-Triggers and functions
😍1
Решил возобновить канал. Планы для развитие канала и идеи для постов:
1. Что-угодно связанное с программированием
2. Одна задача по python/sql
3. Идеи/мысли
😍1