Yeah, saw that one coming. I agree with everything else, but that a little more extreme. If speed is absolutely critical, then yes. But for most things, that too extreme.
004282E4 push %ebp
004282E5 mov %esp,%ebp
004282E7 push %edi
004282E8 push %esi
004282E9 push %ebx
004282EA sub $0xcc,%esp
004282F0 movl $0x437cfc,-0x74(%ebp)
004282F7 movl $0x4c1f4c,-0x70(%ebp)
004282FE lea -0x6c(%ebp),%eax
00428301 lea -0x18(%ebp),%edx
00428304 mov %edx,(%eax)
00428306 mov $0x428457,%edx
0042830B mov %edx,0x4(%eax)
0042830E mov %esp,0x8(%eax)
00428311 lea -0x8c(%ebp),%eax
00428317 mov %eax,(%esp)
0042831A call 0x449b70 <_Unwind_SjLj_Register>
0042831F lea -0x4c(%ebp),%eax
00428322 mov %eax,(%esp)
00428325 movl $0xffffffff,-0x88(%ebp)
0042832F call 0x458e58 <animation>
00428334 lea -0x54(%ebp),%eax
00428337 mov %eax,(%esp)
0042833A call 0x4534e4 <image>
0042833F movl $0x0,-0x38(%ebp)
00428346 mov 0x14(%ebp),%eax
00428349 mov %eax,-0x40(%ebp)
0042834C movl $0x0,-0x3c(%ebp)
00428353 movl $0x0,-0x1c(%ebp)
0042835A jmp 0x428665 <object::load_animation(std::string, int, int)+897>
0042835F lea -0x2d(%ebp),%eax
00428362 mov %eax,(%esp)
00428365 call 0x47d490 <std::allocator<char>::allocator()>
0042836A lea -0x24(%ebp),%eax
0042836D mov -0x1c(%ebp),%edx
00428370 mov %edx,0x4(%esp)
00428374 mov %eax,(%esp)
00428377 movl $0x6,-0x88(%ebp)
00428381 call 0x42fcb3 <str(int)>
00428386 sub $0x4,%esp
00428389 lea -0x20(%ebp),%eax
0042838C movl $0x4c68ca,0x8(%esp)
00428394 mov 0xc(%ebp),%edx
00428397 mov %edx,0x4(%esp)
0042839B mov %eax,(%esp)
0042839E movl $0x5,-0x88(%ebp)
004283A8 call 0x4bfc28 <std::basic_string<char, std::char_traits<char>, std::allocator<char> > std::operator+<char, std::char_traits<char>, std::allocator<char> >(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*)>
004283AD sub $0x4,%esp
004283B0 lea -0x28(%ebp),%eax
004283B3 lea -0x24(%ebp),%edx
004283B6 mov %edx,0x8(%esp)
004283BA lea -0x20(%ebp),%edx
004283BD mov %edx,0x4(%esp)
004283C1 mov %eax,(%esp)
004283C4 movl $0x4,-0x88(%ebp)
004283CE call 0x4bfce4 <std::basic_string<char, std::char_traits<char>, std::allocator<char> > std::operator+<char, std::char_traits<char>, std::allocator<char> >(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>
004283D3 sub $0x4,%esp
004283D6 lea -0x2c(%ebp),%eax
004283D9 movl $0x4c68cc,0x8(%esp)
004283E1 lea -0x28(%ebp),%edx
004283E4 mov %edx,0x4(%esp)
004283E8 mov %eax,(%esp)
004283EB movl $0x3,-0x88(%ebp)
004283F5 call 0x4bfc28 <std::basic_string<char, std::char_traits<char>, std::allocator<char> > std::operator+<char, std::char_traits<char>, std::allocator<char> >(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*)>
004283FA sub $0x4,%esp
004283FD lea -0x2c(%ebp),%eax
00428400 mov %eax,(%esp)
00428403 movl $0x2,-0x88(%ebp)
0042840D call 0x45a690 <std::string::c_str() const>
00428412 lea -0x2d(%ebp),%edx
00428415 mov %edx,0x8(%esp)
00428419 mov %eax,0x4(%esp)
0042841D lea -0x34(%ebp),%eax
00428420 mov %eax,(%esp)
00428423 call 0x487f24 <std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)>
00428428 lea -0x34(%ebp),%eax
0042842B mov %eax,(%esp)
0042842E movl $0x1,-0x88(%ebp)
00428438 call 0x4301a4 <load_image(std::string)>
0042843D mov %eax,-0x54(%ebp)
00428440 lea -0x34(%ebp),%eax
00428443 mov %eax,(%esp)
00428446 movl $0x2,-0x88(%ebp)
00428450 call 0x4886e4 <std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()>
00428455 jmp 0x4284ca <object::load_animation(std::string, int, int)+486>
00428457 lea 0x18(%ebp),%ebp
0042845A mov -0x88(%ebp),%ecx
00428460 mov -0x84(%ebp),%eax
00428466 mov -0x80(%ebp),%edx
00428469 cmp $0x1,%ecx
0042846C je 0x4284e1 <object::load_animation(std::string, int, int)+509>
0042846E cmp $0x2,%ecx
00428471 je 0x428527 <object::load_animation(std::string, int, int)+579>
00428477 cmp $0x3,%ecx
0042847A je 0x42856d <object::load_animation(std::string, int, int)+649>
00428480 cmp $0x4,%ecx
00428483 je 0x4285b3 <object::load_animation(std::string, int, int)+719>
00428489 cmp $0x5,%ecx
0042848C je 0x42863d <object::load_animation(std::string, int, int)+857>
00428492 cmp $0x6,%ecx
00428495 je 0x4286c3 <object::load_animation(std::string, int, int)+991>
0042849B mov %edx,-0xc0(%ebp)
004284A1 mov %eax,-0xc4(%ebp)
004284A7 lea -0x34(%ebp),%eax
004284AA mov %eax,(%esp)
004284AD movl $0x0,-0x88(%ebp)
004284B7 call 0x4886e4 <std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()>
004284BC mov -0xc4(%ebp),%eax
004284C2 mov -0xc0(%ebp),%edx
004284C8 jmp 0x4284e1 <object::load_animation(std::string, int, int)+509>
004284CA lea -0x2c(%ebp),%eax
004284CD mov %eax,(%esp)
004284D0 movl $0x3,-0x88(%ebp)
004284DA call 0x4886e4 <std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()>
004284DF jmp 0x428510 <object::load_animation(std::string, int, int)+556>
004284E1 mov %edx,-0xb8(%ebp)
004284E7 mov %eax,-0xbc(%ebp)
004284ED lea -0x2c(%ebp),%eax
004284F0 mov %eax,(%esp)
004284F3 movl $0x0,-0x88(%ebp)
004284FD call 0x4886e4 <std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()>
00428502 mov -0xbc(%ebp),%eax
00428508 mov -0xb8(%ebp),%edx
0042850E jmp 0x428527 <object::load_animation(std::string, int, int)+579>
00428510 lea -0x28(%ebp),%eax
00428513 mov %eax,(%esp)
00428516 movl $0x4,-0x88(%ebp)
00428520 call 0x4886e4 <std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()>
00428525 jmp 0x428556 <object::load_animation(std::string, int, int)+626>
00428527 mov %edx,-0xb0(%ebp)
0042852D mov %eax,-0xb4(%ebp)
00428533 lea -0x28(%ebp),%eax
00428536 mov %eax,(%esp)
00428539 movl $0x0,-0x88(%ebp)
00428543 call 0x4886e4 <std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()>
00428548 mov -0xb4(%ebp),%eax
0042854E mov -0xb0(%ebp),%edx
00428554 jmp 0x42856d <object::load_animation(std::string, int, int)+649>
00428556 lea -0x20(%ebp),%eax
00428559 mov %eax,(%esp)
0042855C movl $0x5,-0x88(%ebp)
00428566 call 0x4886e4 <std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()>
0042856B jmp 0x42859c <object::load_animation(std::string, int, int)+696>
0042856D mov %edx,-0xa8(%ebp)
00428573 mov %eax,-0xac(%ebp)
00428579 lea -0x20(%ebp),%eax
0042857C mov %eax,(%esp)
0042857F movl $0x0,-0x88(%ebp)
00428589 call 0x4886e4 <std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()>
0042858E mov -0xac(%ebp),%eax
00428594 mov -0xa8(%ebp),%edx
0042859A jmp 0x4285b3 <object::load_animation(std::string, int, int)+719>
0042859C lea -0x24(%ebp),%eax
0042859F mov %eax,(%esp)
004285A2 movl $0x6,-0x88(%ebp)
004285AC call 0x4886e4 <std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()>
004285B1 jmp 0x4285e2 <object::load_animation(std::string, int, int)+766>
004285B3 mov %edx,-0xa0(%ebp)
004285B9 mov %eax,-0xa4(%ebp)
004285BF lea -0x24(%ebp),%eax
004285C2 mov %eax,(%esp)
004285C5 movl $0x0,-0x88(%ebp)
004285CF call 0x4886e4 <std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()>
004285D4 mov -0xa4(%ebp),%eax
004285DA mov -0xa0(%ebp),%edx
004285E0 jmp 0x42863d <object::load_animation(std::string, int, int)+857>
004285E2 lea -0x2d(%ebp),%eax
004285E5 mov %eax,(%esp)
004285E8 call 0x47d4a8 <std::allocator<char>::~allocator()>
004285ED mov -0x54(%ebp),%eax
004285F0 mov 0xc(%eax),%eax
004285F3 movzwl %ax,%ecx
004285F6 mov -0x54(%ebp),%eax
004285F9 mov 0x8(%eax),%eax
004285FC movzwl %ax,%edx
004285FF mov -0x54(%ebp),%eax
00428602 mov %ecx,0x8(%esp)
00428606 mov %edx,0x4(%esp)
0042860A mov %eax,(%esp)
0042860D movl $0x7,-0x88(%ebp)
00428617 call 0x435dde <ScaleSurface(SDL_Surface*, unsigned short, unsigned short)>
0042861C mov %eax,-0x50(%ebp)
0042861F lea -0x54(%ebp),%eax
00428622 mov %eax,0x4(%esp)
00428626 lea -0x4c(%ebp),%eax
00428629 mov %eax,(%esp)
0042862C movl $0x7,-0x88(%ebp)
00428636 call 0x4ae90c <std::vector<image, std::allocator<image> >::push_back(image const&)>
0042863B jmp 0x428662 <object::load_animation(std::string, int, int)+894>
0042863D mov %edx,-0x98(%ebp)
00428643 mov %eax,-0x9c(%ebp)
00428649 lea -0x2d(%ebp),%eax
0042864C mov %eax,(%esp)
0042864F call 0x47d4a8 <std::allocator<char>::~allocator()>
00428654 mov -0x9c(%ebp),%eax
0042865A mov -0x98(%ebp),%edx
00428660 jmp 0x4286c3 <object::load_animation(std::string, int, int)+991>
00428662 incl -0x1c(%ebp)
00428665 mov -0x1c(%ebp),%eax
00428668 cmp 0x10(%ebp),%eax
0042866B setl %al
0042866E test %al,%al
00428670 jne 0x42835f <object::load_animation(std::string, int, int)+123>
00428676 mov 0x8(%ebp),%eax
00428679 lea 0x30(%eax),%edx
0042867C lea -0x4c(%ebp),%eax
0042867F mov %eax,0x4(%esp)
00428683 mov %edx,(%esp)
00428686 movl $0x7,-0x88(%ebp)
00428690 call 0x4b3ad0 <std::vector<animation, std::allocator<animation> >::push_back(animation const&)>
00428695 lea -0x4c(%ebp),%eax
00428698 mov %eax,(%esp)
0042869B movl $0xffffffff,-0x88(%ebp)
004286A5 call 0x458e6c <~animation>
004286AA lea -0x8c(%ebp),%eax
004286B0 mov %eax,(%esp)
004286B3 call 0x449b1c <_Unwind_SjLj_Unregister>
004286B8 lea -0xc(%ebp),%esp
004286BB add $0x0,%esp
004286BE pop %ebx
004286BF pop %esi
004286C0 pop %edi
004286C1 leave
004286C2 ret
004286C3 mov %edx,-0x90(%ebp)
004286C9 mov %eax,-0x94(%ebp)
004286CF lea -0x4c(%ebp),%eax
004286D2 mov %eax,(%esp)
004286D5 movl $0x0,-0x88(%ebp)
004286DF call 0x458e6c <~animation>
004286E4 mov -0x94(%ebp),%eax
004286EA mov -0x90(%ebp),%edx
004286F0 mov %eax,(%esp)
004286F3 movl $0xffffffff,-0x88(%ebp)
004286FD call 0x449e10 <_Unwind_SjLj_Resume>
This is the original (I know I'm not amazing at this or anything, but that's not the point):
This is my guess of what it would look like in Python (Note: I've never done anything like this in Python):
Pretty darn similar.