Guest User

Untitled

a guest
Jun 25th, 2018
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.51 KB | None | 0 0
  1. from timeit import timeit
  2. from random import randint
  3.  
  4.  
  5. class Base(object):
  6. pass
  7.  
  8. class Derived1(Base):
  9. pass
  10.  
  11. class Derived2(Derived1):
  12. def __init__(self):
  13. super(Derived2, self).__init__()
  14. self.d = {i + 10: i * 35 for i in range(100)}
  15.  
  16. def get_item_exists(self):
  17. return self.d.get(randint(10, 109), None)
  18.  
  19. def get_item_not_exists(self):
  20. return self.d.get(randint(200, 299), None)
  21.  
  22. def try_item_exists(self):
  23. return self.d[randint(10, 109)]
  24.  
  25. def try_item_not_exists(self):
  26. return self.d[randint(200, 299)]
  27.  
  28. class Basey(object):
  29. pass
  30.  
  31.  
  32. derived = Derived2()
  33. def using_get(base_cls, meth):
  34. if isinstance(derived, base_cls):
  35. item = getattr(derived, meth)()
  36. if item is not None:
  37. return 1
  38. else:
  39. return 2
  40. else:
  41. return 2
  42.  
  43. def using_hasattr_with_try(meth):
  44. f = getattr(derived, meth, None)
  45. if f is None:
  46. return 2
  47. try:
  48. return f()
  49. except KeyError:
  50. return 2
  51.  
  52. def using_hasattr_with_get(meth):
  53. f = getattr(derived, meth, None)
  54. if f is None:
  55. return 2
  56. if f() is not None:
  57. return 1
  58. else:
  59. return 2
  60.  
  61. def using_try(meth):
  62. try:
  63. return getattr(derived, meth)()
  64. except (AttributeError, KeyError):
  65. return 2
  66.  
  67.  
  68. number = 100000
  69. print('Using get')
  70. print(timeit(stmt='using_get(Base, "get_item_exists")', globals=globals(), number=number))
  71. print(timeit(stmt='using_get(Base, "get_item_not_exists")', globals=globals(), number=number))
  72. print(timeit(stmt='using_get(Basey, "get_item_exists")', globals=globals(), number=number))
  73.  
  74. print('Using try')
  75. print(timeit(stmt='using_try("try_item_exists")', globals=globals(), number=number))
  76. print(timeit(stmt='using_try("try_item_not_exists")', globals=globals(), number=number))
  77. print(timeit(stmt='using_try("crapshoot")', globals=globals(), number=number))
  78.  
  79. print('Using hasattr with try')
  80. print(timeit(stmt='using_hasattr_with_try("try_item_exists")', globals=globals(), number=number))
  81. print(timeit(stmt='using_hasattr_with_try("try_item_not_exists")', globals=globals(), number=number))
  82. print(timeit(stmt='using_hasattr_with_try("crapshoot")', globals=globals(), number=number))
  83.  
  84. print('Using hasattr with get')
  85. print(timeit(stmt='using_hasattr_with_get("get_item_exists")', globals=globals(), number=number))
  86. print(timeit(stmt='using_hasattr_with_get("get_item_not_exists")', globals=globals(), number=number))
  87. print(timeit(stmt='using_hasattr_with_get("crapshoot")', globals=globals(), number=number))
Add Comment
Please, Sign In to add comment