Skip to content

Instantly share code, notes, and snippets.

@kezabelle
Created August 31, 2016 10:14
Show Gist options
  • Save kezabelle/685df820884e9aafc2e986b4814295a8 to your computer and use it in GitHub Desktop.
Save kezabelle/685df820884e9aafc2e986b4814295a8 to your computer and use it in GitHub Desktop.
I wonder which is faster? Turns out, neither, really.
from random import randint
from operator import attrgetter, itemgetter
from contexttimer import Timer
class Lol(object):
@property
def test(self):
return randint(1, 100)
def __getitem__(self, x):
return randint(1, 100)
def generated():
return (Lol() for x in range(1, 50000))
def test_attrgetter():
tester = attrgetter("test")
for item in generated():
tester(item)
def test_itemgetter():
tester = itemgetter("test")
for item in generated():
tester(item)
def test_getattr():
for item in generated():
getattr(item, 'test')
def test_getitem():
for item in generated():
item['test']
def main():
print("getattr")
with Timer() as t:
test_getattr()
print(t.elapsed)
print("attrgetter")
with Timer() as t2:
test_attrgetter()
print(t2.elapsed)
print("getitem")
with Timer() as t3:
test_getitem()
print(t3.elapsed)
print("itemgetter")
with Timer() as t4:
test_itemgetter()
print(t4.elapsed)
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment