Чат поддержки
Практикум
Привет! Это поддержка Практикума 👋 Если что-то не получается — постараемся помочь. Пишите в чат или выберите другой способ связи
пт, 30 июляв 15:43
Здравствуйте
15:43
Мы уже начали заниматься вашим вопросом, ответим в ближайшее время
а попробуйте списать еще раз средства
15:43
Курс Python-разработчик плюс
15:43
эм?)
15:49
Практикум

Здравствуйте, Александр!​

Уточните, пожалуйста, вы пытаетесь совершить первую оплату? 

15:56
первую оплату по курсу Python-разработчик плюс
15:57
так, подождите
16:01
пока не снимайте)
16:01
Практикум

​ Александр, первую оплату вы совершаете самостоятельно. После оплаты первого платёжа привязывается карта, с которой автоматически спишутся следующие, раз в 30 дней. Мы сможем помочь списать только следующие оплаты, если будут возникать трудности. 

Если нужна помощь, пишите — во всём разберёмся вместе :)


16:13
А если я сегодня не успею оплатить
20:43
но я хочу попасть на этот поток
20:43
который стартует 15 августа
20:43
меня закинут?
20:43
Практикум

Александр, выбранный вами курс стартует 16 августа, вероятнее всего, срок оплаты будет продлён до 15 августа :)

Дайте знать, если можем ещё чем-либо помочь:)​

21:05
там просто же написано до 30 июня включительно)
21:10
Практикум

​Александр, вероятнее всего, срок оплаты будет продлём до 15 августа, если до этого времени не будет набран поток :)

Не переживайте, если вы оплатите на следующей неделе, вы будете зачислены в поток :)

21:13
А если будет набран поток?)
21:46
Практикум

Александр, если вы оплатите курс на следующей неделе, ты вы попадете в ближайший поток :)​

21:50
хорошо)
22:03
я думал желающих много))
22:03
Практикум

Так и есть, но место для вас найдётся :) Остались ли у вас ещё какие-то вопросы ? 

22:04
пн, 2 августав 13:08
так
13:08
Мы уже начали заниматься вашим вопросом, ответим в ближайшее время
здравствуйте
13:08
А как повторить съем дененг с карточки за курс?
13:08
первый раз
13:08
теперь на карточке достаточно денег
13:09
Практикум

​Добрый день, Александр! 

Для оплаты обучения, перейдите в свой профиль: https://praktikum.yandex.ru, выберите профессию, которую планируете изучать, далее нажмите на кнопку вверху «Купить полную программу», выберите подходящий вам способ оплаты и следуйте инструкциям системы.

Если возникнут вопросы — обязательно пишите :)


13:19
так вопрос и возникли)
13:51
Оплата не прошла.
Проверьте, что на карте достаточно средств, и её данные указаны правильно. Если это не помогает, напишите в поддержку — разберёмся вместе.
13:51
на карте достаточно средст и данные указаны правильно
13:52
Практикум

Подскажите, вы оплачиваете курс картой банка РФ или иностранного банка? 

13:53
иностранного банка
14:50
Альфа-банк
14:51
до этого были платежи, проблем не было
14:51
Практикум

Уточните, пожалуйста, почту из вашего аккаунта в Практикум, выбранный курс и способ оплаты (ежемесячными платежами или полностью) — пришлём ссылку для оплаты и запишем в группу.

При оплате ежемесячными платежами мы будем формировать новую ссылку каждый месяц и присылать также в письме.

Если вы не против, уточните, пожалуйста, страну вашего проживания — стараемся расширять географию оплаты на сайте и хотим понимать, куда двигаться :)

14:53
alexander.borovtsoff@yandex.by
15:03
Python-разработчик плюс
15:04
ежемесячными
15:04
Беларусь
15:04
Практикум

Александр, отправили вам ссылку в отдельном письме. После оплаты придёт кассовый чек, это значит, что всё прошло успешно и мы получили деньги. После оплаты мы включим вас в 5 поток, который стартует 16 августа.

Cумма ежемесячного платежа составит 12 825руб с учетом скидки 5% за подписку Яндекс.Плюс, мы будем присылать вам ссылку на оплату ежемесячно, всего их будет 14, как и месяцев в курсе Python-разработчик Плюс. Оплата по ссылке проводится в российских рублях.

В день старта потока вам придет важное письмо на почту и куратор примет вас на борт.
Удачи в учебе! А если будут вопросы - пишите, мы рядом. :black_heart:


15:33
так
15:49
скидка не вся
15:49
я еще использовал SECOND
15:49
итого скидка должна быт ь15%
15:50
ммм?)
16:17
Практикум

Сейчас мы пришлем вам новую ссылку с учетом промокода SECOND :)​

16:40

Александр, первую ссылку мы деактивировали, стоимость обучения для вас составит 11475руб в месяц вместо 13500руб с учетом скидки 15% (5% за Плюс + 10% по промокоду SECOND). Всего будет, как писали ранее, 14 ссылок, и итоговая стоимость курса для вас составит 160 650руб вместо обычных 189 000руб :)​

16:43
Здравствуйте
19:30
что-то в кабинете до сих пор отображается, что оплата не прошла
19:30
Оу?
21:54
Практикум

​Здравствуйте, Александр!

Наш специалист напишет вам утром и вы во всём разберётесь, хорошо ?:)

22:11
печаль)
22:22
Практикум

​Грустить осталось недолго :)

22:24
утро наступило?)
08:11
Практикум

​Александр, наши коллеги работают по будням с 10 до 19 :)
Ожидайте, пожалуйста 🌿

08:17
жду))
09:44
Практикум

​​Александр, добрый день,

Оплата по ссылке прошла успешно. В течение дня статус оплаты в личном кабинете поменяется:)

10:06

Мы записали вас в 5 поток, который стартует 16 августа. В личном кабинете у вас не должно быть ошибки об оплате, проверьте, пожалуйста:)​

10:46
да, спасибо, ошибки нету)
12:53
Практикум

​Обязательно пишите, если у вас появятся вопросы до старта:)

12:58
Здравствуйте, что-то не могу задание у вас задеплоить
21:37
сервер лежит ваш видно
21:37
Практикум

Здравствуйте, Александр!

Пришлите, пожалуйста, ссылку на ваш код, записанный на сайте https://pastebin.com/ и ссылку на саму задачу — посмотрим, в чём там дело :) 

22:04
не
22:05
подождите
22:05
Практикум

​Подождём :) Что-то не так ?

22:07
да
22:07
возможно у меня косяк))
22:07
Практикум

​Такое бывает :) Если понадобится наша помощь —​ напишите, мы тут как тут.

22:08
https://praktikum.yandex.ru/trainer/python-developer-plus/lesson/c21a0ce1-95fa-40b8-b5cd-91a51107c296/task/c5954ba1-4453-4684-809d-1e7c5e84ec81/
22:17
ссылка на задачу
22:17
https://pastebin.com/HQJd4yqi
22:18
и он у меня просит, чтобы я вернут три аргумента в функции render
22:20
но я это делаю
22:20
причем сайт работает)
22:20
https://9503239a-3952-4814-af42-664ad3ebe1ad.serverhub.praktikum-services.ru/
22:20
Практикум

Давайте обратимся к теории задания :) Вот код, который можно там найти

return render(request, 'homepage/homepage.html', context) ​

Нашли свою ошибку ?​

22:22
да, только обидно, но по факту это же тоже самое)
22:25
если посмотреть метод render
22:25
то у него именованный аргумент с дефолтным значением none
22:25
context=None
22:25
Практикум

С синтаксисом нужно быть осторожным; то, что вы написали, по факту не совсем правильно :) В прекоде есть такая строчка

Как вернуть из view-функции функцию render? Вот так: `return render(аргументы-аргументы-аргументы)

А вы записали

аргументы-аргументы-аргументы=аргументы

Остались ли у вас ещё какие-то вопросы ? 

22:28
ладно, вопросов нет, буду дальше смотреть, может я не так объяснил, но будет мне уроком
22:32
спасибО)
22:33
Практикум

Рады были помочь :)​ 

22:33
пн, 16 августав 10:19
Здравствуйте, я прошел вводный курс Python-разработчик плюс, и ожидал открытие дальнейших этапов, а у меня сейчас обновился курс и стало все с нуля)
10:19
Мы уже начали заниматься вашим вопросом, ответим в ближайшее время
Практикум

Здравствуйте, Александр! Обновите, пожалуйста, сейчас страницу курса. Всё должно встать на свои места. 

А так, уже заканчиваем последние приготовления. В течение дня по московскому времени откроется доступ к платной части, сперва мы познакомимся, а в Slack куратор подробнее расскажет про то, что будет дальше. Приглашение в Slack направим на почту — иногда оно попадает в папки Спам или Рассылки, советуем поглядывать и туда.

Всё в порядке, ждать осталось совсем немного :)
10:34
Еще вопрос
15:39
у меня был активный slack аккаунт, по Аналитике данных, после приглашения в курс Python, он исчез
15:39
что делать?)
15:39
Практикум

​Уточните, пожалуйста, вы указывали новую почту для приглашения в slack или ту же, что используете на другом курсе?

15:45
указывал ту же, т/е alexander.borovtsoff@yandex.by
15:46
Практикум

Там сейчас у вас только каналы для профессии ​Python-разработчик ​, а других каналов, которые были нет, правильно понимаем? 

15:51
верно
16:10
Практикум

​Хорошо, спасибо! Уточним вопрос у коллег и вернёмся к вам с ответом :)

16:16
Хорошо, жду
16:39
а то очень не ожиданный поворот
16:39
Практикум

С вами свяжется куратор и добавит в нужные каналы.
Дайте знать, если ещё чем-то можем вам помочь :)​

16:58
мне куратор написал в старый слэк, попробую ему ответить) вообще разобраться, как так случилось, позже вам напишу
17:11
я получил уведомления на почту со старого слэка, но перейти в слэк и ответить не могу
17:12
Практикум

​Сейчас куратор напишет в новом аккаунте :)

17:18
чт, 26 августав 01:34
Здравствуйте, как это мне оплатить последнюю часть по Аналитике данных
01:34
Мы уже начали заниматься вашим вопросом, ответим в ближайшее время
Не удалось списать оплату за обучение с вашей карты. Обратитесь в поддержку, чтобы оплатить обучение и продлить подписку.
01:34
Практикум

Здравствуйте!

Чтобы повторить списание, уточните, пожалуйста, ваш логин (адрес эл.почты) в Практикуме в формате имя@домен, название профессии :)

Также, просим проверить, что в личном кабинете Яндекс Паспорта https://passport.yandex.ru/ привязана карта, с которой необходимо совершить оплату.

Если карта не привязана, просим привязать её и сообщить нам 4 последние цифры карты.

01:35
alexander.borovtsoff@yandex.ru - Аналитик данных
01:40
Практикум

Отправили запрос на списание, если всё пройдёт успешно, то в течение 10-15 минут денежные средства спишутся, вам на почту придёт чек о списании и статус в профиле изменится. Дайте знать, если этого не произойдёт.

01:41
пт, 27 августав 11:53
Здравствуйте, отправьте запрос еще раз
11:53
Мы уже начали заниматься вашим вопросом, ответим в ближайшее время
Практикум

Здравствуйте!

Александр, уточните, пожалуйста, ваш логин в Практикуме — alexander.borovtsoff@yandex.by​? Не могли бы также уточнить, когда вы в последний раз оплачивали курс Аналитик данных? ​

12:01
alexander.borovtsoff@yandex.by​
12:33
Не могли бы также уточнить, когда вы в последний раз оплачивали курс Аналитик данных? ​ - не помню, но у меня остался последний платеж
12:33
жесточайший у вас курс пересчета конечно
12:49
попробуйте еще раз
12:49
пополнил баланс
12:50
Практикум

Александр, уточните, пожалуйста, последние 4 цифры вашей карточки, привязана ли она к вашему аккаунту? Также, пожалуйста, убедитесь, что у вас на карте достаточно средств для проведения платежа — оплатить необходимо 13000​ рублей. 

12:50
посмотрите пожалуйста выше что написал
12:51
3980
12:51
у меня карточка белки, курс странный конечно
12:51
Практикум

​Александр, провели платёж — уточните, пожалуйста, списались ли средства теперь? :)

12:59
Выбрать способ связи

Переменные и память

Переменные другими словами

О переменных в Python вам уже известно многое, вы с ними работали много раз.
  • Переменная работает как подписанная коробка или помеченная ячейка, куда можно что-то положить и не потерять:
    Скопировать кодPYTHON
    2 + 2 # Python выполнит этот код, и где-то в памяти будет записана четвёрка. # Но добраться до неё невозможно - и что толку с этой четвёрки. # А вот значение, сохранённое в переменной; оно будет доступно по имени. four = 2 + 2 print('А что у нас в переменной four?', four, 'Так-то.'
  • Первое появление переменной в коде называется объявлением переменной;
  • при объявлении переменной указывается
    • имя переменной,
    • знак присваивания =,
    • присваиваемое значение;
  • в ходе выполнения программы значение присвоенное переменной может меняться;
  • имя переменной придумывает сам программист.

Память и переработка мусора

Есть смысл заглянуть за кулисы и посмотреть, что происходит с переменными в памяти устройства.
Начнём с простого примера:
Скопировать кодPYTHON
print('Unicorn')
image
После того, как строка напечатана, объект строки не будет использован повторно: к нему невозможно обратиться для повторного использования, и Python это отлично понимает.
Как только объекты становятся не нужны программе — они становятся «мусором» и автоматически удаляются сборщиком мусора. В Python есть встроенный неотключаемый механизм для сборки мусора — алгоритм подсчёта ссылок.
image
Когда объект присваивается переменной, тоже создаётся ячейка в памяти, но при этом переменная ссылается на эту ячейку. Сборщик мусора не удаляет такие данные: он видит, что на ячейку памяти есть ссылка и понимает, что эти данные нужны программе.
Скопировать кодPYTHON
# Переменная brand_name типа str имеет значение 'Unicorn'. brand_name = 'Unicorn' print(brand_name) # Вывод в терминал: Unicorn # Данные, на которые ссылается переменная brand_name, # всё ещё хранятся в памяти и к ним можно обратиться вновь. print(brand_name + '!') # Вывод в терминал: Unicorn!
image
Переменная указывает на адрес объекта в памяти, в котором хранятся данные. Адрес блока памяти — это уникальный числовой идентификатор. К этому идентификатору можно обратиться через встроенную функцию id().
Скопировать кодPYTHON
# Объявление переменной типа str brand_name = 'Unicorn' # Напечатаем ID той ячейки памяти, на которую ссылается переменная: print(id(brand_name)) # Вывод в терминал: 25080896
При выполнении одного и того же кода на разных компьютерах (и даже на одном компьютере, после перезапуска Python) значение ID ячейки памяти для одного и того же объекта будет разным.
На один блок памяти могут ссылаться сколько угодно переменных. Например:
Скопировать кодPYTHON
brand_name = 'Unicorn' print(id(brand_name)) # Вывод в терминал: 25080896 copy_brand_name = brand_name print(id(copy_brand_name)) # Вывод в терминал: 25080896 # ID совпадают, значит, обе переменные ссылаются на одну ячейку памяти.
image
Если значение переменной переопределяют — в памяти создаётся новый объект.
Скопировать кодPYTHON
brand_name = 'Unicorn' print(id(brand_name)) # Вывод в терминал: 25080896 brand_name = 'Cat' print(id(brand_name)) # Вывод в терминал: 27193914 # ID разные: теперь brand_name ссылается на другую ячейку памяти.
Что случилось?
  • Для объекта с новым значением выделена новая ячейка памяти;
  • переменная brand_name теперь ссылается на новый объект;
  • объект с прежним значением 'Unicorn' будет уничтожен сборщиком мусора.
    Сборщик думает так: «на эту ячейку памяти не ссылается ни одна переменная; значит, обратиться к этому значению из программы невозможно; удаляем этот хлам из памяти».
    image
Сборщик мусора не станет освобождать ячейку памяти, если на эту ячейку есть хотя бы одна ссылка.

Изменяемые и неизменяемые типы данных

В Python все типы объектов делятся на изменяемые и не изменяемые. Такой вариант русского перевода может трактоваться неоднозначно. Более подходящим был бы перевод «мутирующие и немутирующие» типы: это лучше отражает способность объекта изменять своё содержимое.

Изменяемые типы

Значения изменяемых (англ. mutable) типов данных хранятся в памяти так, что содержимое ячейки памяти можно изменять. При изменениях переменная будет ссылаться всё на ту же ячейку памяти.
Скопировать кодPYTHON
brand_info = ['Unicorn', 2] print(id(brand_info)) # Вывод в терминал: 34153256 # Изменяем значение элемента списка с индексом 1 brand_info[1] = 3 print(brand_info) # Вывод в терминал: ['Unicorn', 3] # Значение объекта изменилось. А что с ID? print(id(brand_info)) # Вывод в терминал: 34153256 # ID остался прежним.
К изменяемым типам относятся: множества (class set), списки (class list) и словари (class dict).

Неизменяемые типы

Значения неизменяемых (англ. unmutable) типов пишутся в память так, что изменить данные в ячейке памяти невозможно.
При попытке изменить значение объекта в памяти вернётся ошибка. При переопределении переменной неизменяемого типа будет создан новый объект в памяти.
Скопировать кодPYTHON
brand_name = 'Unicorn' print(id(brand_name)) # Вывод в терминал: 25080896 # При попытки изменить значени элемента строки # python выведет ошибку brand_name[1] = 3 # Вывод в терминал: # TypeError: 'str' object does not support item assignment # Объект типа строка не поддерживает присвоения значений элементам
Из встроенных типов данных к неизменяемым относятся числа (int, float, complex), строки (class str), кортежи (tuple).
Если какой-то переменной присваивается значение, уже ранее присвоенное другой переменной, то обе эти переменные будут ссылаться на одну ячейку памяти. Это справедливо только для неизменяемых типов данных.
Скопировать кодPYTHON
# Объявляем переменную неизменяемого типа str brand_name = 'Unicorn' print(id(brand_name)) # Вывод в терминал: 25080896 # Присваеваем новой переменной # то же самое значение new_brand_name = 'Unicorn' print(id(new_brand_name)) # Вывод в терминал: 25080896 # Снова тот же ID! # Объявляем переменную изменяемого типа list steps_weekends_1 = [13300, 12311] print(id(steps_weekends_1)) # Вывод в терминал: 38675176 # Присваеваем новой переменной # то же самое значение steps_weekends_2 = [13300, 12311] print(id(steps_weekends_2)) # Вывод в терминал: 38674792 # Значения одинаковые, но ID - разные!

Хешируемые объекты

Для быстрого поиска и сравнения данных, сохранённых в памяти, Python применяет хеширование данных — кодирование, которое преобразует любое значение в целое число.
Значения неизменяемых типов данных хранятся в памяти в хешированном виде. С момента создания блока памяти и до его утилизации хеш-значение не может быть изменено: таковы законы этого мира.
Получить хеш-значение для переменной можно встроенной функцией hash()
Скопировать кодPYTHON
int_hash = hash(5) print(f'Хеш для числа 5 будет равен {int_hash}') # Вывод в терминал: Хеш для числа 5 будет равен 5 float_hash = hash(5.123) print(f'Хеш для числа 5.123 будет равен {float_hash}') # Вывод в терминал: Хеш для числа 5.123 будет равен 1775969997 string_hash = hash('Строка') print(f'Хеш для строки "Строка" будет равен {string_hash}') # Вывод в терминал: Хеш для строки "Строка" будет равен 1577989931
Для изменяемых типов данных функция hash() не работает: данные изменяемых типов не хешируются.
Скопировать кодPYTHON
list_hash = hash([1,2,3,4,5]) print(f"Хеш для списка [1,2,3,4,5] будет равен {list_hash}") # Вывод в терминал: TypeError: unhashable type: 'list' # Все сломалось: списки не хешируются!
Хеши одинаковых значений, например, хеши двух одинаковых кортежей, будут равны. Это ускоряет и упрощает поиск и сравнение данных: гораздо проще сравнивать хеши (целые числа), чем сложные структуры из множества элементов, которые придётся перебрать.
Поиск значения по хешам не требует дополнительных действий: чтобы сравнить два кортежа — нужно сравнить два хеш-значения; чтобы сравнить два списка — придётся перебрать все их элементы и сравнить попарно.
Выгода очевидна.
Будут ли эти две переменные ссылаться на один объект в памяти?
Скопировать кодPYTHON
brand_name = 'Unicorn' another_brand_name = 'Unicorn'
Ошибка: обе эти переменные будут ссылаться на один объект памяти. Так устроен Python, это механизм рационального использования памяти.
Неизменяемые объекты
  • Подходят для безопасного хранения данных (в ходе программы значения не будут изменены, если случайно не переопределить переменную).
  • Скорость обращения к неизменяемым объектам для некоторых операций гораздо выше, чем при работе с изменяемыми объектами.
Изменяемые объекты
  • При работе с динамически изменяющимися данными объекты изменяемого типа упрощают работу с памятью: не приходится постоянно создавать всё новые и новые объекты в памяти; это экономит время и ресурсы.
Курс
Тема
Углублённый Python
Темы курса

1.Начало

2.Встроенные типы данных

3.Булева алгебра. Условные операторы

4.Последовательности

5.Python «под капотом»

6.Последовательности: продолжение

7.Множества set()

8.Словари

9.Типы данных

10.Создание функций

11.Стандартная библиотека

12.Финальный проект спринта: программный модуль для фитнес-трекера

13.Мотивация и не только

14.Самое необходимое об ООП

15.Знакомство с командной строкой

16.Настройка окружения: VSCode, Git, venv, pytest

17.Аннотации типов

18.Требования к коду

19.Energy Management

20.Финальный проект спринта: калькулятор денег и калорий

Пройдено 1 из 2 уроков
Python «под капотом»
Уроки

1.Переменные и память