Python легко и просто. Красиво решаем повседневные задачи

  • 805 views
Uploaded on

Александр Семенюк …

Александр Семенюк
Python легко и просто. Красиво решаем повседневные задачи

More in: Education , Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
805
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
6
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Python: легко и просто.Красиво решаем повседневные задачи.Александр Семенюкa_semianiuk@wargaming.net
  • 2. Python делает всё, чтобы упростить вашу жизнь.Этот язык предоставляет многообразие инструментов,позволяющих легко решать многие задачи.
  • 3. if len(mylist) == 0:raise Exception(Empty list is not acceptable)
  • 4. >>> bool( 0 )False>>> bool( [] )False>>> bool( {} )False>>> bool( None )False>>> bool( )False
  • 5. if mylist:raise Exception(Empty list is not acceptable)
  • 6. class Basket(object):empty = Trueitems = []def __nonzero__(self):return not self.emptydef __len__(self):return len(self.items)basket = Basket()print bool(basket) # False
  • 7. if mylist == None:do_something()
  • 8. if mylist == None:do_something()if mylist is None:do_something()
  • 9. $ python -m timeit -s "x = None" "x is None"10000000 loops, best of 3: 0.0329 usec per loop$ python -m timeit -s "x = None" "x == None"10000000 loops, best of 3: 0.0607 usec per loop
  • 10. • Всё в Python – это объект.• Каждая переменная – ссылка на объект.• Оператор is сравнивает эти ссылки.class A:passa = A()b = aprint a is bprint id(a)print id(b)True3327461633274616
  • 11. • В Python есть неизменяемые объекты. Их значение не меняетсяпосле создания:• Числа - 0, 245, 10000000000000001• Строки - Hi people!• Кортежи (неизменяемые списки) - (1,2, a)• И, конечно же, None !
  • 12. if mylist:raise Exception(Empty list is not acceptable)
  • 13. BaseException+-- SystemExit+-- KeyboardInterrupt+-- GeneratorExit+-- Exception+-- StopIteration+-- StandardError| +-- BufferError| +-- ArithmeticError| | +-- FloatingPointError| | +-- OverflowError| | +-- ZeroDivisionError…
  • 14. class EmptyListError(Exception):passif not mylist:raise EmptyListError(Empty list is not acceptable)
  • 15. try:work_with_list([])except EmptyListError:# we know whats wrongtry:work_with_list([])except Exception:# what to do?
  • 16. • Python знает, где истина.• ‘is None’ лучше, чем ‘== None’.• Всё объект!• Создавать свои собственные исключения круто.
  • 17. try:f = open(config.txt)line = f.readline()while line:line = line.strip( n)if not line:continueif line.startswith(#):continuedo_some_staff(line)line = f.readline()finally:f.close()
  • 18. for i in range(len(mylist)):print mylist[i]
  • 19. for i in range(len(mylist)):print mylist[i]for item in mylist:print item
  • 20. import itertoolsfor i in itertools.count():print i
  • 21. for item in reversed(mylist):print item
  • 22. for item in reversed(mylist):print item>>> mylist = [1,2,3]>>> mylist[::-1][3, 2, 1]
  • 23. $ python -m timeit -s "l = [1, 2, 3]" "list(reversed(l))"1000000 loops, best of 3: 0.995 usec per loop$ python -m timeit -s "l = [1, 2, 3]" "l[::-1]"1000000 loops, best of 3: 0.202 usec per loop
  • 24. $ python -m timeit -s "l = [1, 2, 3]" "for i in reversed(l): pass"1000000 loops, best of 3: 0.28 usec per loop$ python -m timeit -s "l = [1, 2, 3]" "for i in l[::-1]: pass"1000000 loops, best of 3: 0.318 usec per loop
  • 25. heroes = [Batman, Spiderman, Hulk, Invisible Woman]colors = [black, red, green]for i in range(min(len(heroes), len(colors)):print list1[i], is, list2[i]
  • 26. for hero, color in zip(heroes, colors):print hero, is, color
  • 27. heroes_with_colors = dict(zip(heroes, colors))print heroes_with_colors{Spiderman: red,Batman: black,Hulk: green}
  • 28. from itertools import izipfor hero, color in izip(heroes, colors):print hero, is, color
  • 29. >>> for i in python: i...python
  • 30. >>> for i in python: i...python>>> for key in heroes_with_colors: key...SpidermanBatmanHulk
  • 31. >>> for i in python: i...python>>> for key in heroes_with_colors: key...SpidermanBatmanHulk>>> import re>>> for match in re.finditer(pattern, string):... # each match in the string...
  • 32. >>> for line in myfile:... print repr(line) # each line in a file...
  • 33. f = open(config.txt)try:for line in f:line = line.strip( n)if not line:continueif line.startswith(#):continuedo_some_staff(line)finally:f.close()
  • 34. def iterate_lines(f):for line in f:line = line.strip( n)if not line:continueif line.startswith(#):continueyield line
  • 35. f = open(config.txt)try:for line in iterate_lines(f):do_some_staff(line)finally:f.close()
  • 36. >>> mylist[a, b, b, c]>>> for index, item in enumerate(mylist):... if item == b:... del mylist[index]...>>> mylist[a, b, c]
  • 37. >>> mydict{b: 2}>>> for key in mydict:... if key == b:... del mydict[key]...Traceback (most recent call last):File "<stdin>", line 1, in <module>RuntimeError: dictionary changed size during iteration
  • 38. >>> for key in mydict.keys():... if key == b:... del mydict[key]...>>> mydict{}
  • 39. f = open(config.txt)try:for line in iterate_lines(f):do_some_staff(line)finally:f.close()
  • 40. with EXPR as VAR:BLOCK
  • 41. with open(config.txt) as f:process_file(f)
  • 42. try:dangerous_actions()except AttributeError:pass # we dont care
  • 43. from contextlib import contextmanager@contextmanagerdef ignore_errors(*errors):try:yieldexcept errors:pass
  • 44. >>> with ignore_errors(KeyError, AttributeError):... raise KeyError...>>>
  • 45. with open(config.txt) as f:for line in iterate_lines(f):do_some_staff(line)
  • 46. • Итерируйтесь правильно• Отделяйте административную логику от бизнес логики• Не изменяйте список, по которому итерируетесь• Контекстные менеджеры молодцы
  • 47. Большое спасибо за внимание!