Hello World – Telegram
Hello World
1.68K subscribers
71 photos
6 videos
3 files
161 links
Be so good that you cannot be ignored. And then, go one step beyond.
Download Telegram
​​Containment checking

Допустим, мы создаем небольшой список из пяти элементов и одно генераторное выражение. Если мы сейчас попробуем проверить, содержится ли число 5 в списке, то ответом будет True. С генераторным выраженим должно быть так же, верно? Попробуем проверить. Получаем, что 5 содержится и в нем. Но если мы поинтересуемся еще раз, содержится ли 5 в выражении, получим False.
Не забываем, что генераторное выражение не есть кортеж, для того чтобы создать кортеж, необходимо воспользоваться конструктором tuple().
#tips
​​​​Unpacking

Создадим небольшой словарь из двух пар элементов ключ-значение, и попробуем его распаковать используя multiple assignment. Должно быть вы ожидали, что распаковка вернет вам два кортежа вида (ключ, значение), либо же мы получим ошибку. Однако, питон позволяет нам провести распаковку словаря, хотя и не возвращает пары ключ-значение. Вместо этого вы получите ключи.

Для того, чтобы вернуть именно пары ключ-значение, необходимо использовать dict.items() (работает в Python 3).
#tips
​​Перечисление

Если применить enumerate() к какому-либо итерируемому объекту, можно получить индекс объекта и сам объект. Опциональный аргумент в enumerate позволяет задать начальный индекс.

#enumerate #tips
12 небольших фишек для улучшения твоего кода

1. Обмен значений
x, y = 1, 2
x, y = y, x


2. Получение строки из списка
a_list = [‘I’, ‘like’, ‘python’, ‘programming’]
a_string = “ “.join(a_list)


3. Разбиение строки на список
a_string = ‘I like python programming’
a_list = a_string.split()


4. Инициализация листа каким либо значением
[0]*1000 # лист, заполненный 1000 нулями
[1]*1000 # лист, заполненный 1000 единицами


5. Слияние словарей
x = {‘a’:1, ‘b’:2}
y = {‘c’:3, ‘d’:4}
z = {**x, **y}


6. Переворачивание строки
a = ‘My string’
a = a[::-1]


7. Возврат нескольких переменных из функции
def test(x,y):
return x,y
a,b = test(1,2)


8. Итерирование по словарю
a_dict = {‘a’:1, ‘b’:2, ’c’:3}
for k, v in a_dict.items():
print(‘{0}:{1}’.format(k, v))


9. Инициализация пустых контейнеров
a_list = list()
a_dict = dict()
a_set = set()
a_tuple = tuple()


10. Удаление символов в конце строки
my_string = ‘My string///‘
my_string.strip(‘/‘)


11. Проверка занимаемой объектом памяти
import sys
x = 1
print(sys.getsizeof(x))


12. Нахождение наиболее частого элемента в списке
a_list = [1, 2, 3, 1, 1, 4, 1, 4, 4, 1]
print(max(set(a_list), key=a_list.count))


#tips
​​Тернарный оператор в python

Тернарным оператором является сокращённая форма записи условного выражения if-else. Такой подход позволяет быстро проверить условие, а не писать несколько строчек оператора if. Зачастую это очень удобно, поскольку позволяет писать более компактный код, сохраняя его читабельность.
#if
​​Хэши

Создадим словарь и попробуем заполнить его значениями. Поскольку python неявно считает, что 5.0 == 5, мы получим коллизию. Учитывая это, было бы странно если бы hash(5.0) != hash(5). Тип int неявно преобразовывается в float перед вычислением хеша.

#hash
​​Изменение словаря во время итерации по нему

▪️Вообще говоря не стоит изменять словарь, по которому происходит итерация
▪️Эта штука срабатывает только восемь раз, ведь именно это та точка, в которой словарь должен был бы изменить размер, чтобы удержать больше ключей (стандартно есть только восемь записей, поэтому меняйте размер, если нужно). Это фактическая деталь реализации.

#dict #tips
​​Python становится одним из самых популярных языков программирования в мире

«Я ТОЧНО не собирался создавать язык, предназначенный для массового потребления», - говорил Гвидо ван Россум, голландский ученый-компьютерщик, который разработал язык программирования Python в 1989 году. Но спустя почти три десятилетия его изобретение обогнало почти всех его конкурентов.

#news
​​Друзья, нас уже 300.

Я пока еще не пробовал писать на тему data science, но в будущем я думаю, это возможно (если вам будет интересен подобный формат).
А пока что, ловите подборку интересных материалов.

🐍 Набор полезных ссылок про Python для аналитики данных

🔸 Масштабное и хорошо оформленное руководство по библиотеке pandas. Освещает вопросы загрузки данных, очистки и подготовки данных, применения условий для фильтрации.

🔸 Отличная статья о том как вытаскивать данные из PostgreSQL в Питоне с помощью psycopg2.

🔸 Если вы работаете с Google BigQuery, то вам может пригодится инструкция о том как выгружать и загружать данные в BigQuery с помощью Python.

Новые материалы и подборки также читайте на канале, посвященном data science: @datalytx
Недавно хотел написать подобный пост про *args и **kwargs. Стоит добавить только, если вы хотите использовать и *args, и **kwargs, то это делается так: func(fargs, *args, **kwargs), причем порядок следования аргументов важен.
​​all() & any()

all() и any() — это встроенные методы, которые позволяют проверить элементы списка на выполнение заданного условия

▪️Встроенная функция all() - идет по списку True/False (либо выражений, сводящихся к этим значениям) и прекращает проверку после первого элемента, не удовлетворяющего условию

▪️Функция any() проверяет те же условия хотя бы для одного элемента

▪️all() и any() могут обрабатывать не только списки, но и любые итерируемые объекты

#tips
​​Внешний вид кода

Есть такое понятие как PEP 8. Это специальный стандарт, правило хорошего тона, если хотите. Единый стиль оформления делает код понятным как для самого программиста, так и для его коллег с разным уровнем подготовки.

В идеале наиболее сложный фрагмент кода должен быть понятен с первого прочтения.

PEP 8 затрагивает следующие основные моменты:

▪️выбор кодировки исходного кода

▪️группировку инструкций по импорту модулей

▪️максимальную длину строки кода — рекомендуется до 79 знаков, а для строк документации (docstring) — 72 знака

▪️использование отступов — табуляции и пробелов

▪️использование пустых строк для разбивки кода на блоки и выделения функций верхнего уровня

▪️использование комментариев

▪️именование переменных, констант, классов и экземпляров, функций, аргументов, модулей, пакетов

▪️выбор уровня доступности классов и методов (public, private, API-подклассы), а также порядка их наследования.

Также оставляю ссылку тут
#pep8
​​Что выведет следующий код?
Правильным ответом на предыдущий вопрос будет [1], [1]. Это происходит потому, что в python отсутствует механизм копирования при записи. Создадим переменную a и проверим ее адрес с помощью оператора id():
>>> a = [0]
>>> id(a)
4349920392

теперь для b:
>>> b = a
>>> id(b)
4349920392

Для создания копии можно воспользоваться следующим нехитрым приемом, взять срез листа a:
>>> b = a[:]
>>> id(b)
4349922696

В таком случае созданный объект будет полноценной копией.

Либо можно воспользоваться оператором deepcopy из модуля copy.
dir

Как насчет заглянуть внутрь объекта в python и посмотреть на его атрибуты? Используем интерактивную оболочку python:
>>> dir()
>>> dir(2)
['__abs__', '__add__', '__and__', '__bool__’,…]


и даже так
>>> dir(dir)
['__call__', '__class__', '__delattr__’,…]


#tips
Упрощение конструкций с if

Если тебе нужно проверить несколько значений, делай так:
if (item in [1,2,3]):


а не так:
if (item==1 or item==2 or item==3):


#tips
Красивый вывод

Ты можешь красиво выводить на экран словари и списки с помощью pretty-print:
from pprint import pprint 
pprint(m_dict)


Нагляднее это, конечно, при работе со словарями. Кроме того, можно выводить информацию из JSON-файлов.

#pprint
Что выведет следующая функция?
def append(item, x=[]):
x.append(item)
return x

m_list = append(1)
m_list = append(2)
print(‘m_list =’, m_list)