Python становится одним из самых популярных языков программирования в мире
«Я ТОЧНО не собирался создавать язык, предназначенный для массового потребления», - говорил Гвидо ван Россум, голландский ученый-компьютерщик, который разработал язык программирования Python в 1989 году. Но спустя почти три десятилетия его изобретение обогнало почти всех его конкурентов.
#news
«Я ТОЧНО не собирался создавать язык, предназначенный для массового потребления», - говорил Гвидо ван Россум, голландский ученый-компьютерщик, который разработал язык программирования Python в 1989 году. Но спустя почти три десятилетия его изобретение обогнало почти всех его конкурентов.
#news
Друзья, нас уже 300.
Я пока еще не пробовал писать на тему data science, но в будущем я думаю, это возможно (если вам будет интересен подобный формат).
А пока что, ловите подборку интересных материалов.
🐍 Набор полезных ссылок про Python для аналитики данных
🔸 Масштабное и хорошо оформленное руководство по библиотеке pandas. Освещает вопросы загрузки данных, очистки и подготовки данных, применения условий для фильтрации.
🔸 Отличная статья о том как вытаскивать данные из PostgreSQL в Питоне с помощью psycopg2.
🔸 Если вы работаете с Google BigQuery, то вам может пригодится инструкция о том как выгружать и загружать данные в BigQuery с помощью Python.
Новые материалы и подборки также читайте на канале, посвященном data science: @datalytx
Я пока еще не пробовал писать на тему data science, но в будущем я думаю, это возможно (если вам будет интересен подобный формат).
А пока что, ловите подборку интересных материалов.
🐍 Набор полезных ссылок про Python для аналитики данных
🔸 Масштабное и хорошо оформленное руководство по библиотеке pandas. Освещает вопросы загрузки данных, очистки и подготовки данных, применения условий для фильтрации.
🔸 Отличная статья о том как вытаскивать данные из PostgreSQL в Питоне с помощью psycopg2.
🔸 Если вы работаете с Google BigQuery, то вам может пригодится инструкция о том как выгружать и загружать данные в BigQuery с помощью Python.
Новые материалы и подборки также читайте на канале, посвященном data science: @datalytx
Недавно хотел написать подобный пост про *args и **kwargs. Стоит добавить только, если вы хотите использовать и *args, и **kwargs, то это делается так: func(fargs, *args, **kwargs), причем порядок следования аргументов важен.
Forwarded from Python Lounge: работа и стажировки для программистов
Сегодня мы разберем с виду сложную, но легкую в использовании конструкцию, которую можно применить практически везде
*args, **kwargs #урок 16
*args, **kwargs #урок 16
Telegraph
*args, **kwargs
Думаю, многие хоть раз видели такую запись, сейчас мы узнаем, что это за магические символы. Сообщу заранее, что args и kwargs - общепринятые имена переменных, а разбирать мы будем звездочки перед нимим. def func(*args, **kwargs): # code *args Рассмотрим…
all() & any()
all() и any() — это встроенные методы, которые позволяют проверить элементы списка на выполнение заданного условия
▪️Встроенная функция all() - идет по списку True/False (либо выражений, сводящихся к этим значениям) и прекращает проверку после первого элемента, не удовлетворяющего условию
▪️Функция any() проверяет те же условия хотя бы для одного элемента
▪️all() и any() могут обрабатывать не только списки, но и любые итерируемые объекты
#tips
all() и any() — это встроенные методы, которые позволяют проверить элементы списка на выполнение заданного условия
▪️Встроенная функция all() - идет по списку True/False (либо выражений, сводящихся к этим значениям) и прекращает проверку после первого элемента, не удовлетворяющего условию
▪️Функция any() проверяет те же условия хотя бы для одного элемента
▪️all() и any() могут обрабатывать не только списки, но и любые итерируемые объекты
#tips
Внешний вид кода
Есть такое понятие как PEP 8. Это специальный стандарт, правило хорошего тона, если хотите. Единый стиль оформления делает код понятным как для самого программиста, так и для его коллег с разным уровнем подготовки.
В идеале наиболее сложный фрагмент кода должен быть понятен с первого прочтения.
PEP 8 затрагивает следующие основные моменты:
▪️выбор кодировки исходного кода
▪️группировку инструкций по импорту модулей
▪️максимальную длину строки кода — рекомендуется до 79 знаков, а для строк документации (docstring) — 72 знака
▪️использование отступов — табуляции и пробелов
▪️использование пустых строк для разбивки кода на блоки и выделения функций верхнего уровня
▪️использование комментариев
▪️именование переменных, констант, классов и экземпляров, функций, аргументов, модулей, пакетов
▪️выбор уровня доступности классов и методов (public, private, API-подклассы), а также порядка их наследования.
Также оставляю ссылку тут
#pep8
Есть такое понятие как PEP 8. Это специальный стандарт, правило хорошего тона, если хотите. Единый стиль оформления делает код понятным как для самого программиста, так и для его коллег с разным уровнем подготовки.
В идеале наиболее сложный фрагмент кода должен быть понятен с первого прочтения.
PEP 8 затрагивает следующие основные моменты:
▪️выбор кодировки исходного кода
▪️группировку инструкций по импорту модулей
▪️максимальную длину строки кода — рекомендуется до 79 знаков, а для строк документации (docstring) — 72 знака
▪️использование отступов — табуляции и пробелов
▪️использование пустых строк для разбивки кода на блоки и выделения функций верхнего уровня
▪️использование комментариев
▪️именование переменных, констант, классов и экземпляров, функций, аргументов, модулей, пакетов
▪️выбор уровня доступности классов и методов (public, private, API-подклассы), а также порядка их наследования.
Также оставляю ссылку тут
#pep8
Правильным ответом на предыдущий вопрос будет [1], [1]. Это происходит потому, что в python отсутствует механизм копирования при записи. Создадим переменную a и проверим ее адрес с помощью оператора id():
теперь для b:
Для создания копии можно воспользоваться следующим нехитрым приемом, взять срез листа a:
В таком случае созданный объект будет полноценной копией.
Либо можно воспользоваться оператором deepcopy из модуля copy.
>>> a = [0]
>>> id(a)
4349920392
теперь для b:
>>> b = a
>>> id(b)
4349920392
Для создания копии можно воспользоваться следующим нехитрым приемом, взять срез листа a:
>>> b = a[:]
>>> id(b)
4349922696
В таком случае созданный объект будет полноценной копией.
Либо можно воспользоваться оператором deepcopy из модуля copy.
dir
Как насчет заглянуть внутрь объекта в python и посмотреть на его атрибуты? Используем интерактивную оболочку python:
и даже так
#tips
Как насчет заглянуть внутрь объекта в python и посмотреть на его атрибуты? Используем интерактивную оболочку python:
>>> dir()
>>> dir(2)
['__abs__', '__add__', '__and__', '__bool__’,…]
и даже так
>>> dir(dir)
['__call__', '__class__', '__delattr__’,…]
#tips
Упрощение конструкций с if
Если тебе нужно проверить несколько значений, делай так:
а не так:
#tips
Если тебе нужно проверить несколько значений, делай так:
if (item in [1,2,3]):
а не так:
if (item==1 or item==2 or item==3):
#tips
Красивый вывод
Ты можешь красиво выводить на экран словари и списки с помощью pretty-print:
Нагляднее это, конечно, при работе со словарями. Кроме того, можно выводить информацию из JSON-файлов.
#pprint
Ты можешь красиво выводить на экран словари и списки с помощью 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)
Правильным ответом будет являться список 1,2. Так происходит из-за того, что дефолтные параметры хранятся в неизменном кортеже в атрибуте функции defaults, который создается в момент определения функции. Для того, чтобы добиться правильного поведения функции, воспользуемся ключевым словом None при определении аргументов по умолчанию
def append(item, x=None):
if x is None:
x=[]
x.append(item)
return x
m_list = append(1) #returns 1
m_list = append(2) #returns 2
Одноразовая функция в классе
На тот случай, если нам вдруг понадобится функция, которая будет использоваться всего один раз, после чего будет использоваться другая функция:
#tips
На тот случай, если нам вдруг понадобится функция, которая будет использоваться всего один раз, после чего будет использоваться другая функция:
class foo:
def normal_call(self):
print("normal_call")
def call(self):
print("first_call")
self.call = self.normal_call
>>> y = foo()
>>> y.call()
first_call
>>> y.call()
normal_call
>>> y.call()
normal_call
#tips
Операции над множествами
Set — множество, в котором отсутствуют повторяющиеся элементы:
#set
Set — множество, в котором отсутствуют повторяющиеся элементы:
>>> a = set([1,2,3,4])
>>> b = set([3,4,5,6])
>>> a | b # объединение
{1, 2, 3, 4, 5, 6}
>>> a & b # пересечение
{3, 4}
>>> a < b # подмножества
False
>>> a - b # разница
{1, 2}
>>> a ^ b # симметрическая разность
{1, 2, 5, 6}
#set
Голосование закончено!
Сегодня мы разыграем код на PyCharm Professional, любезно предоставленный одним из наших подписчиков.
Победил: @a1*20
Всего участников: 46
Всем спасибо за участие! С победителем уже связались. Никнейм убрал на всякий случай.
Сегодня мы разыграем код на PyCharm Professional, любезно предоставленный одним из наших подписчиков.
Победил: @a1*20
Всего участников: 46
Всем спасибо за участие! С победителем уже связались. Никнейм убрал на всякий случай.
Что выведут переменные a и b?
a = [1, 2]
b = a
a = a + [3, 4]
print(‘a =’, a)
print(‘b =’, b)
Правильный ответ:
Хорошо, но как вам такое?
Вывод:
Объяснение:
▪️a += b не ведет себя так же, как a = a + b
▪️выражение a = a + [3, 4] генерирует новый объект и устанавливает ссылку a на этот новый объект, оставляя b неизменным
a = [1, 2, 3, 4]
b = [1, 2]
Хорошо, но как вам такое?
a = [1, 2]
b = a
a += [3, 4]
Вывод:
>>> a
[1, 2, 3, 4]
>>> b
[1, 2, 3, 4]
Объяснение:
▪️a += b не ведет себя так же, как a = a + b
▪️выражение a = a + [3, 4] генерирует новый объект и устанавливает ссылку a на этот новый объект, оставляя b неизменным
Форматирование списка
В функциональном стиле:
Вывод:
#tips
>>> l = [[1, 2, 3], [4, 5], [6], [7, 8, 9]]
>>> sum(l, [])
[1, 2, 3, 4, 5, 6, 7, 8, 9]
В функциональном стиле:
from functools import reduce
from operator import add
data = [[1, 2, 3], [4, 5, 6]]
reduce(add, data)
Вывод:
>>> data
[1, 2, 3, 4, 5, 6]
#tips