Занятие 2.
Краткое содержание: Репозиторий. Python как скриптовый язык. Самодокументация модулей. Конструкции if, for, def...
Содержание
План рассказа
- Разбор полётов
- Лирическое отступление о пользе от переменных.
- Позадачно:
2**64 vs pow(2, 64)
" " vs "-"*38 vs ("%38s" % "").replace(" ", "-"); print ; print vs print ...+"\n"+...
"|"+f.center(38)+"|"; "|"+w.center(len(b)-2)+"|"; print a; str(pow(2,64)-1).center(38); print b;
f[:2] + f[2:5] + ... vs f[:2] +' '+ f[-18:-15] +' '+ ... vs f[:-18] + f[-18:-15] + ...; import re; ' '.join(re.compile(r'..?.?').findall(s[::-1]))[::-1]; print , , , vs +' '+
- -
x = e.split(); [x[0]+x[1]+...]; vs "".join(e.split()) vs e.replace(" ", "");
readlines() vs split("\n").rstrip("\n") vs split("\n"), [-2]
все: split(">"), никто: split("\n>"); split(" ") vs split("\n") vs split("\n", 1)
decode("rot_13"); .translate() + много ручной работы; никто: string.maketrans
- Отдельные комментарии:
- О пользе переменных
str(" ").join, s = "...".split(); str(s[0]).split() - злоупотребление конструкторами. Об объектах.
- Организационные объявления:
- если вас нет в списке оценок, сообщите мне
список рассылки ../StudentEmails
- зачёт и рейтинг:
- со следующего занятия студентам раздаётся зачётное задание; лучше, если зачётное задание студенты придумывают себе самостоятельно; если нет, я его придумаю и выдам; зачётное задание нужно делать в группах, не менее чем по двое
- на каждом занятии начиная со следующего одна-две задачи будут выделены и помечены как рейтинговые; для них будут явно прописаны критерии оценки; одновременно с зачётом студенту выставляется рейтинг по этим задачам; если не указано обратного, оценка за задачу выставляется по первой попытке (ибо внимательность, внимательность и внимательность); дедлайном на эти задачи является день сдачи зачёта
- на остальные задачи дедлайн - 6 дней (то есть в пятницу перед занятием я их проверяю, записываю комментарии и на следующем занятии рассказываю о них)
- Репозиторий
- Суть
- Простые операции (init, add, record). Какие лучше писать комментарии к коммитам.
- Синхронизация (pull).
- Дополнительная документация.
- Программистские конструкции, примеры:
- bool, if, None
- range, for, break, continue
- def, самодокументация, return
- двойное присваивание ("распаковка")
- import, urllib2.urlopen, подсказка на тему создания и записи файлов
doctest:
как считать угол между векторами from Scientific.Geometry.Vector import Vector
- filter(None, ...)
Каркас хорошего модуля:
1 #!/usr/bin/python 2 """ Hello world example 3 4 >>> print 1 + 1 5 2 6 """ 7 8 def hello(): 9 """ Print hello 10 11 >>> hello() 12 Hello, world! 13 """ 14 print "Hello, world!" 15 16 if __name__ == "__main__": 17 import optparse 18 parser = optparse.OptionParser() 19 parser.add_option("-f", "--file", dest="filename", help="Save to file") 20 parser.add_option("-t", "--test", action="store_true", dest="test", help="Don't be verbose") 21 options, args = parser.parse_args() 22 23 if options.test: 24 doctest.testmod() 25 26 # Здесь пишется вызов главной функции или что-то вроде
Задание
См. ../Lesson03