Тёмный

Всё, что вы хотели знать о функциях в Python 

Computer Science Center
Подписаться 161 тыс.
Просмотров 73 тыс.
50% 1

compscicenter.ru/
Синтаксис объявления функций. Упаковка и распаковка аргументов. Ключевые аргументы и аргументы по умолчанию. Распаковка и оператор присваивания. Области видимости, правило LEGB, операторы global и nonlocal. Функциональное программирование, анонимные функции. Функции map, filter и zip. Генераторы списков, множеств и словарей. Немного о PEP 8.
Лекция №2 в курсе "Python" (осень 2015).
Преподаватель курса: Сергей Лебедев
Страница лекции на сайте CS центра: goo.gl/z9cY9X

Опубликовано:

 

20 сен 2015

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 55   
@Das.Kleine.Krokodil
@Das.Kleine.Krokodil 2 года назад
0:00:00 Синтаксис 0:05:56 Упаковка и распаковка 0:45:34 Области видимости 1:03:00 Функциональное программирование 1:05:22 функция map 1:07:36 функция filter 1:09:06 функция zip 1:10:56 генераторы списков 1:14:54 PEP8 1:29:08 Инструменты для применения PEP8
@viktorz1986
@viktorz1986 8 лет назад
Плюсы: Хорошие уроки, хороший преподаватель. Минусы: плохо слышно вопросы. Было бы здорово послушать подобные лекции на английском.
@alexanderkozlikhin
@alexanderkozlikhin 7 лет назад
Прекрасно! Хочу цикл лекций этого автора про Go!
@absolutus.
@absolutus. Год назад
Очень приятная подача материала, спасибо за работу.
@undefinedundefined2459
@undefinedundefined2459 2 года назад
9:45 в питоне это называется не итератор, а итерируемый объект Итератор - то, от чего можно вызвать next От списка или множества нельзя вызвать next, но можно с помощью iter сделать его итератором, и тогда уже воспользоваться next
@BPLYATS
@BPLYATS 3 года назад
11:45 функция bounded_min(...) def bounded_min(first, *args, lo=float("-inf"), hi=float("inf")): res = hi for arg in (first, ) + args: if arg < res and lo < arg < hi: res = arg return max(res, lo) Пару вопросов. 1) Зачем возвращать return max(res, lo)? Просто вернуть res не достаточно? ... return res ... 2) Зачем два раза проверять одно и то же: - if arg < res and lo < arg < hi: res
@val9489
@val9489 2 года назад
Плюсую, может быть в образовательных целях чисто так расписал, но, как по мне, не оправдание таким приседаниям непонятным, только смуту вносит. Не хейтер, лекции классные, дальше смотрю. :)
@Forvater
@Forvater 8 лет назад
Насчёт булевых значений в условиях. Не всегда можно быстро определить тип переменной смотря на большую функцию, а вариант "if foo == True : something" вместо "if foo : something" даёт понять, что something мы хотим выполнить только когда у нас foo - это boolean, а не, скажем int.
@slebedev
@slebedev 8 лет назад
+Александр Закрытной Отличать True от других truthy значений почти никогда не нужно. Если ваш код использует такую логику, то это верный сигнал, что его пора переписать :)
@mcfistish
@mcfistish 8 лет назад
16:33 : мне кажется что вместо "if arg < res and lo < arg < hi" уместнее было бы "if lo < arg < res"
@Andre-mp4ii
@Andre-mp4ii 5 лет назад
net
@BPLYATS
@BPLYATS 3 года назад
тебе не кажется, так и есть, лектор тупит, еще и возвращает max(lo, res), когда достаточно return res
@andarielbaal3405
@andarielbaal3405 3 года назад
Почему в коде примерно на этом интервале 15:00. Мы пишем "if arg < res and lo < arg < hi: " Можно ли написать " if arg < res and lo < arg < res: " Мы же в самом начале обьявили, что res = hi И я не совсем понял, если lo = 0 и hi = 255, то под наше условие подходит два аргумента (12 и 13) почему 13 не возвращается? Или он отбирает в начале по условию, чтобы число было в пределах границы, а уже потом отбирает из этих чисел минимальное?
@Lokamp_
@Lokamp_ 3 года назад
По первому вопросу - Мы ищем минимальное число в диапазоне от lo до hi, поэтому и пишем if arg < res and lo < arg < hi, при первой же итерации в res записывается число из кортежа т.е. оно меняется, а hi у нас постоянный аргумент функции. По второму вопросу - потому что мы в принципе условие такое задаем - искать только одно минимальное значение.
@BPLYATS
@BPLYATS 3 года назад
@@Lokamp_ он перед циклом присвоил res = hi, достаточно в условии было указать if lo < arg < res это во первых, а во вторых зачем-то возвращает max(res, lo), когда достаточно было return res
@f1n1st13
@f1n1st13 5 месяцев назад
41:16 не понял про мораль присваивания. как там в х получилось 2??
@hunan131
@hunan131 7 лет назад
The primitive `zip` can work with arguments of different sizes. This means that, in full generality, it's not definable in terms of `map`, because "If one [of the arguments to map] is shorter than another it is assumed to be extended with `None` items.". So, for example: `zip(range(1), range(2))` is not equal to `map(lambda x,y: (x,y), range(1), range(2))`. When the arguments have the same cardinality, however, it works out. Good exercise nevertheless. Excellent lecturer, btw.
@slebedev
@slebedev 7 лет назад
Hi, that's a great comment! I did some research and it seems the None-padding only happens in Python2.X. In Python3.X map behaves exactly like zip. Here's an example: >>> list(map(lambda *args: args, [1], [2, 3])) [(1, 2)] which in Python2.X works as: >>> map(lambda *args: args, [1], [2, 3]) [(1, 2), (None, 3)] This little subtleties are what makes writing 2/3 compatible code a nightmare :)
@hunan131
@hunan131 7 лет назад
Ah! I got the versions mixed up again. Thank you very much for the response, Sergei.
@ivanbag9741
@ivanbag9741 4 года назад
Вопрос по функции bounded_min(). В случае если мы в неё передаём все значения отрицательные (-5, -12, -13, lo=0, hi=255), то функция возвращает верхнюю границу значение hi. Это так и задумано?
@Lokamp_
@Lokamp_ 3 года назад
Да, так и задумано, так как у нас нижняя граница это 0, а верхняя 255 т.е. мы ищем только в этом диапазоне и изначально в res передаем hi.
@arkane38
@arkane38 6 лет назад
Сергей, а можно получить домашние задания из этого курса?
@yauheniyazhdanovich5725
@yauheniyazhdanovich5725 6 лет назад
Аналогичный вопрос
@CompscicenterRu
@CompscicenterRu 6 лет назад
Задачи доступны только студентам CS центра (набор раз в год в Питере и Новосибе).
@CompscicenterRu
@CompscicenterRu 6 лет назад
Задачи доступны только студентам CS центра (набор раз в год в Питере и Новосибе).
@trskldn
@trskldn 3 года назад
Дайте домашку! Или мы выйдем на демонстрации и устроим беспорядки возле вашего центра!
@xvii5753
@xvii5753 3 года назад
Taras Kolodny Запишись на курс, заплати деньги и получи домашку
@secondmodu7184
@secondmodu7184 7 лет назад
33:32 x,y,z = {1,2,3} # unordered что значит здесь unordered? типа должна выдаваться такая ошибка?
@slebedev
@slebedev 7 лет назад
Это означает, что порядок присваивания не детерминирован, и использовать такую конструкцию не стоит. Пример: >>> x, y, z = {"abc", "def", "ghi"} >>> z 'def'
@secondmodu7184
@secondmodu7184 7 лет назад
ясно, спасибо
@user-py7cp7zu1p
@user-py7cp7zu1p 8 лет назад
Зачем здесь нужен seen=set()? def unique(iterable, seen=set()): seen = set(seen or []) acc = [] for item in iterable: if item not in seen: seen.add(item) acc.append(item) return acc Так короче будет: def unique(iterable): acc = [] for item in iterable: if item not in acc: acc.append(item) return acc Или я чего то не понял? Объясните, пожалуйста.
@slebedev
@slebedev 8 лет назад
+Алекс Неизвестенков реальном коде аргумент seen скорее всего не потребуется, а сама функция будет генератором. Версия в лекции нужна исключительно для иллюстрации того, почему не стоит использовать изменяемые значения по умолчанию.
@usersbit
@usersbit 5 лет назад
Проверка на вхождение в set "seen" происходит за константное время O(1), нежели в список acc за линейное O(n).
@secondmodu7184
@secondmodu7184 7 лет назад
47:47 а разве кроме этих четырех областей видимости есть другие?
@slebedev
@slebedev 7 лет назад
Нет, других нет.
@dmbo2365
@dmbo2365 8 лет назад
>>> def bounded_min(first, *args, lo=float("-inf"), hi=float("inf")): ... res = hi ... for arg in (first, ) + args: ... if arg < res and lo < arg < hi: ... res = arg ... return max(res, lo) ... >>> bounded_min(-5, 12, 13, lo=0, hi=255) 12 не могу запустить этот код нигде. Почему тут 12 а не 13?
@user-py7cp7zu1p
@user-py7cp7zu1p 8 лет назад
+Dmytro Boiko Ищем минимальное из 3 чисел, но только то, что входит в диапазон от 0 до 255. Это и будет 12
@LeBrondoter1
@LeBrondoter1 6 лет назад
Компилятор выдаёт 255, что не так?
@GENZEKIRILL
@GENZEKIRILL 4 года назад
@@LeBrondoter1 Стоит проверить откуда у питона компилятор...
@user-vg4iq7ji8o
@user-vg4iq7ji8o 8 лет назад
На 26 слайде написано, что global лучше заменять на thread local объект. О чем речь, подскажите? Киньте ссылкой про это, а то все что нагуглилось, касается многопоточности, что явно не то
@slebedev
@slebedev 8 лет назад
+Вова Крылов речь как раз о threading.local. Прежде чем отвечать на ваш вопрос, хочется подчеркнуть два момента: а) если вы можете обойтись без изменяемой глобальной переменной --- сделайте это, б) при использовании одного потока thread-local не даёт никаки преимуществ по сравнению с global. Теперь к вопросу. Мысль тут в том, что thread-local --- это чуть менее глобальная глобальная переменная. Популярный веб-фреймворк Flask использует thread-local переменные ровно с этой целью. Написанное с использованием Flask веб-приложение может обслуживать запросы сразу в нескольких потоках. При этом API Flask устроен таким образом, что программист имеет доступ к запросу только через специальный объект request. Объект request не может быть глобальным, потому что у каждого потока свой запрос, поэтому во Flask он реализован через threading.local.
@user-vg4iq7ji8o
@user-vg4iq7ji8o 8 лет назад
Спасибо за ответ. В данный момент меня интересует как раз таки однопоточный случай и пока я его расписывал тут, мне пришла в голову идея как избавиться от изменяемости глобальной переменной (метод желтой уточки работает на славу :) )
@Das.Kleine.Krokodil
@Das.Kleine.Krokodil 2 года назад
0:46 ..и противоречит pep8
@DiamondSane
@DiamondSane 7 лет назад
Смотрю и не понимаю.. Почему python популярен? Лектор хорош, кстати говоря.
@ata.ibragimoff
@ata.ibragimoff 4 года назад
Читаю и не понимаю, почему вы не понимаете, почему python популярен
@user-je2nh4op3s
@user-je2nh4op3s 3 года назад
я пишу на иврите
@batonbaggetovich2072
@batonbaggetovich2072 2 года назад
очень сложно обьясняет … поверхностно как по книжке… подача как умник у доски… понятное дело что пришли черпать знание а тут распылителем не связано… вопщем доработать программу надобна
@tankostream
@tankostream 8 лет назад
слишком много костылей в питоне, для того чтобы он был языком который проще читать, если сравнить код этой функции в питоне и на джава то проще читать его будет именно в джаве)
@faustinutub
@faustinutub 5 лет назад
но в целом читаемость питона в разы выше, чем у c-like языков.
@antonl149
@antonl149 6 лет назад
можно не бегать из угла в угол )) Как энот в клетке ))))
@Das.Kleine.Krokodil
@Das.Kleine.Krokodil 5 лет назад
Полтора часа стоять?
@crea7or
@crea7or 7 лет назад
Очень классный преподаватель, хоть сам Питон и отстой :)
@user-hx6nv7ys5x
@user-hx6nv7ys5x 5 лет назад
какой язык вы считаете лучше ?
@stasseven2577
@stasseven2577 5 лет назад
Ужасная лекция. Неужели есть люди, которые заплатили деньги за это? Кого может научить этот лектор? Манера у него, конечно милашечная и, типо, все элементарно, но по сути перескакивает, не акцентирует и вообще хрень
@maximfialkovskij8445
@maximfialkovskij8445 5 лет назад
Лекция проводилась в CSСenter, где учатся ребята с хорошей базой и большим опытом в других языках, поэтому элементарные вещи не рассматриваются подробно
Далее
Декораторы и модуль functools
1:09:10
Просмотров 39 тыс.
ДЕТСКИЙ ТАРИФ В ТАКСИ
00:18
Просмотров 88 тыс.
I Built 4 SECRET Rooms In ONE COLOR!
29:04
Просмотров 16 млн
Многопоточность и GIL
1:21:47
Просмотров 34 тыс.
Начало
1:06:01
Просмотров 190 тыс.