Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Micro-optimizations #2088

Closed
wants to merge 2 commits into from
Closed

Micro-optimizations #2088

wants to merge 2 commits into from

Conversation

cclauss
Copy link
Contributor

@cclauss cclauss commented Apr 3, 2024

Ruff rules:

  • C408 Unnecessary tuple call (rewrite as a literal)
  • PERF401 Use a list comprehension to create a transformed list
  • PLR1714 Consider merging multiple comparisons. Use a set if the elements are hashable.
  • RET503 Missing explicit return at the end of function able to return non-None value
  • RUF015 Prefer next(iter(channel_layer.channels)) over single element slice
  • SIM210 Use bool(...) instead of True if ... else False

% ruff rule PERF401

manual-list-comprehension (PERF401)

Derived from the Perflint linter.

What it does

Checks for for loops that can be replaced by a list comprehension.

Why is this bad?

When creating a transformed list from an existing list using a for-loop,
prefer a list comprehension. List comprehensions are more readable and
more performant.

Using the below as an example, the list comprehension is ~10% faster on
Python 3.11, and ~25% faster on Python 3.10.

Note that, as with all perflint rules, this is only intended as a
micro-optimization, and will have a negligible impact on performance in
most cases.

Example

original = list(range(10000))
filtered = []
for i in original:
    if i % 2:
        filtered.append(i)

Use instead:

original = list(range(10000))
filtered = [x for x in original if x % 2]

If you're appending to an existing list, use the extend method instead:

original = list(range(10000))
filtered.extend(x for x in original if x % 2)

@cclauss cclauss force-pushed the ruff branch 2 times, most recently from 4a57e25 to 80de57c Compare April 3, 2024 16:19
@cclauss cclauss changed the title Micro optimizations Micro-optimizations Apr 3, 2024
@carltongibson
Copy link
Member

I'm pretty Meh about all of these if I'm honest. 🤔

@cclauss cclauss closed this Aug 15, 2024
@cclauss cclauss deleted the ruff branch August 15, 2024 21:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants