Cache __builtin__ name lookups so they are performed on module load rather than at every use.
The code "__Pyx_GetName(__pyx_b, __pyx_n_[string])" is performed in several thousand places throughout the sage library, and can be quite expensive (a dictionary lookup, possibly raising an error, etc.) This is redundant as the result will always be the same. I perform the lookup once (on loading the module), then have a pointer to the result for all subsequent use. The most common examples are bool/str/int (both as function calls and in isinstance), True/False, and raisign errors. A side feature is that on loading a module with an illegal __builtin__ name, it will complain at load time rather than at run time.
Showing
Please register or sign in to comment