update from Atlas

This commit is contained in:
Luciano Ramalho
2014-12-29 03:51:34 -02:00
parent 9db73c75ef
commit 08b7bce340
12 changed files with 801 additions and 21 deletions

View File

@@ -0,0 +1,43 @@
import timeit
def exists_and_truthy_hasattr(obj, attr_name):
if hasattr(obj, attr_name):
return bool(getattr(obj, attr_name))
else:
return False
def exists_and_truthy_getattr(obj, attr_name):
return bool(getattr(obj, attr_name, False))
def exists_and_truthy_tryget(obj, attr_name):
try:
return bool(getattr(obj, attr_name))
except AttributeError:
return False
class Gizmo:
def __init__(self):
self.gadget = True
gizmo = Gizmo()
test_keys = 'hasattr', 'getattr', 'tryget'
def average(timings):
sample = timings[1:-1]
return sum(sample) / len(sample)
def do_tests():
for test_key in test_keys:
func_name = 'exists_and_truthy_' + test_key
test = func_name + '(gizmo, "gadget")'
setup = 'from __main__ import gizmo, ' + func_name
elapsed = average(timeit.repeat(test, repeat=5, setup=setup))
print(test_key.rjust(7), format(elapsed, '0.5f'))
if __name__ == '__main__':
do_tests()
del gizmo.gadget
do_tests()

44
attributes/hasattr.py Normal file
View File

@@ -0,0 +1,44 @@
import timeit
test_hasattr = """
if hasattr(gizmo, 'gadget'):
feature = gizmo.gadget
else:
feature = None
"""
test_getattr = """
feature = getattr(gizmo, 'gadget', None)
"""
test_tryget = """
try:
feature = getattr(gizmo, 'gadget')
except AttributeError:
feature = None
"""
class Gizmo:
def __init__(self):
self.gadget = True
gizmo = Gizmo()
test_keys = 'hasattr', 'getattr', 'tryget'
def test():
for test_key in test_keys:
test_name = 'test_' + test_key
test = globals()[test_name]
setup = 'from __main__ import gizmo'
t_present = min(timeit.repeat(test, setup=setup))
del gizmo.gadget
t_absent = min(timeit.repeat(test, setup=setup))
gizmo.gadget = True
print('{:7} {:.3f} {:.3f}'.format(test_key, t_present, t_absent))
if __name__ == '__main__':
test()