Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Calling
hasattr
is just as expensive as callinggetattr
and slightly more expensive than direct attribute access. As a result callinghasattr
and then perform attribute access, we are effectively paying the cost of attribute access twice.hasattr
vs.getattr
vs. direct accessWhen we look at the overall runtime of
get_buffer_data
andget_buffer_nbytes
, we can see that attribute access makes a significant contribution to runtime of these functions overall.Runtime before of
get_buffer_data
andget_buffer_nbytes
So we can simply switch to
getattr
and add a default case ofNone
to check for. Overall this is a pretty minor change to the code here. Though the result in terms ofget_buffer_data
andget_buffer_nbytes
is quite notable, making both ~2x faster.Runtime after of
get_buffer_data
andget_buffer_nbytes
cc @pentschev @madsbk @quasiben