Do not perform function call in argument defaults #74
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.
Any function call that's used in a default argument will only be performed once, at definition time.
The returned value will then be reused by all calls to the function, which can lead to unexpected behavior.
%
ruff check --select=B008
%
ruff rule B008
function-call-in-default-argument (B008)
Derived from the flake8-bugbear linter.
What it does
Checks for function calls in default function arguments.
Why is this bad?
Any function call that's used in a default argument will only be performed
once, at definition time. The returned value will then be reused by all
calls to the function, which can lead to unexpected behaviour.
Calls can be marked as an exception to this rule with the
[
lint.flake8-bugbear.extend-immutable-calls
] configuration option.Arguments with immutable type annotations will be ignored by this rule.
Types outside of the standard library can be marked as immutable with the
[
lint.flake8-bugbear.extend-immutable-calls
] configuration option as well.Example
Use instead:
If the use of a singleton is intentional, assign the result call to a
module-level variable, and use that variable in the default argument:
Options
lint.flake8-bugbear.extend-immutable-calls