Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

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

  • Be the first to comment

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

  1. 1. Python: легко и просто.Красиво решаем повседневные задачи.Александр Семенюкa_semianiuk@wargaming.net
  2. 2. Python делает всё, чтобы упростить вашу жизнь.Этот язык предоставляет многообразие инструментов,позволяющих легко решать многие задачи.
  3. 3. if len(mylist) == 0:raise Exception(Empty list is not acceptable)
  4. 4. >>> bool( 0 )False>>> bool( [] )False>>> bool( {} )False>>> bool( None )False>>> bool( )False
  5. 5. if mylist:raise Exception(Empty list is not acceptable)
  6. 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. 7. if mylist == None:do_something()
  8. 8. if mylist == None:do_something()if mylist is None:do_something()
  9. 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. 10. • Всё в Python – это объект.• Каждая переменная – ссылка на объект.• Оператор is сравнивает эти ссылки.class A:passa = A()b = aprint a is bprint id(a)print id(b)True3327461633274616
  11. 11. • В Python есть неизменяемые объекты. Их значение не меняетсяпосле создания:• Числа - 0, 245, 10000000000000001• Строки - Hi people!• Кортежи (неизменяемые списки) - (1,2, a)• И, конечно же, None !
  12. 12. if mylist:raise Exception(Empty list is not acceptable)
  13. 13. BaseException+-- SystemExit+-- KeyboardInterrupt+-- GeneratorExit+-- Exception+-- StopIteration+-- StandardError| +-- BufferError| +-- ArithmeticError| | +-- FloatingPointError| | +-- OverflowError| | +-- ZeroDivisionError…
  14. 14. class EmptyListError(Exception):passif not mylist:raise EmptyListError(Empty list is not acceptable)
  15. 15. try:work_with_list([])except EmptyListError:# we know whats wrongtry:work_with_list([])except Exception:# what to do?
  16. 16. • Python знает, где истина.• ‘is None’ лучше, чем ‘== None’.• Всё объект!• Создавать свои собственные исключения круто.
  17. 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. 18. for i in range(len(mylist)):print mylist[i]
  19. 19. for i in range(len(mylist)):print mylist[i]for item in mylist:print item
  20. 20. import itertoolsfor i in itertools.count():print i
  21. 21. for item in reversed(mylist):print item
  22. 22. for item in reversed(mylist):print item>>> mylist = [1,2,3]>>> mylist[::-1][3, 2, 1]
  23. 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. 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. 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. 26. for hero, color in zip(heroes, colors):print hero, is, color
  27. 27. heroes_with_colors = dict(zip(heroes, colors))print heroes_with_colors{Spiderman: red,Batman: black,Hulk: green}
  28. 28. from itertools import izipfor hero, color in izip(heroes, colors):print hero, is, color
  29. 29. >>> for i in python: i...python
  30. 30. >>> for i in python: i...python>>> for key in heroes_with_colors: key...SpidermanBatmanHulk
  31. 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. 32. >>> for line in myfile:... print repr(line) # each line in a file...
  33. 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. 34. def iterate_lines(f):for line in f:line = line.strip( n)if not line:continueif line.startswith(#):continueyield line
  35. 35. f = open(config.txt)try:for line in iterate_lines(f):do_some_staff(line)finally:f.close()
  36. 36. >>> mylist[a, b, b, c]>>> for index, item in enumerate(mylist):... if item == b:... del mylist[index]...>>> mylist[a, b, c]
  37. 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. 38. >>> for key in mydict.keys():... if key == b:... del mydict[key]...>>> mydict{}
  39. 39. f = open(config.txt)try:for line in iterate_lines(f):do_some_staff(line)finally:f.close()
  40. 40. with EXPR as VAR:BLOCK
  41. 41. with open(config.txt) as f:process_file(f)
  42. 42. try:dangerous_actions()except AttributeError:pass # we dont care
  43. 43. from contextlib import contextmanager@contextmanagerdef ignore_errors(*errors):try:yieldexcept errors:pass
  44. 44. >>> with ignore_errors(KeyError, AttributeError):... raise KeyError...>>>
  45. 45. with open(config.txt) as f:for line in iterate_lines(f):do_some_staff(line)
  46. 46. • Итерируйтесь правильно• Отделяйте административную логику от бизнес логики• Не изменяйте список, по которому итерируетесь• Контекстные менеджеры молодцы
  47. 47. Большое спасибо за внимание!

    Be the first to comment

    Login to see the comments

  • ironsmith666

    Sep. 6, 2013
  • luzinov

    Jul. 8, 2016

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

Views

Total views

6,223

On Slideshare

0

From embeds

0

Number of embeds

2,176

Actions

Downloads

97

Shares

0

Comments

0

Likes

2

×