Skip to content

PERF401 extend suggestion has false negatives and makes code slower #21891

@hauntsaninja

Description

@hauntsaninja

Summary

Similar in spirit to #21890

Consider:

import timeit


def main1():
    ret = []
    for x in range(8):
        for i in range(x):
            ret.append(i)


def main2():
    ret = []
    for x in range(8):
        ret.extend(range(x))


def main3():
    ret = []
    for x in range(8):
        for i in range(x):
            ret.append(str(i))  # PERF401 only complains about this


def main4():
    ret = []
    for x in range(8):
        ret.extend(str(i) for i in range(x))


if __name__ == "__main__":
    print(timeit.timeit(main1, number=10_000))
    print(timeit.timeit(main2, number=10_000))
    print(timeit.timeit(main3, number=10_000))
    print(timeit.timeit(main4, number=10_000))
λ python rf.py
0.007337332936003804
0.0059296670369803905
0.016938375076279044
0.036548584001138806

PERF401 wants to turn main3 into main4. This will make this code >2x slower.

PERF401 should want to turn main1 into main2, but doesn't.

Version

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingruleImplementing or modifying a lint rule

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions