Fix Deepsource issues (#2085)
* DeepSource issue: Built-in function `len` used as condition Using the `len` function to check if a sequence is empty is not idiomatic and can be less performant than checking the truthiness of the object. `len` doesn't know the context in which it is called, so if computing the length means traversing the entire sequence, it must; it doesn't know that the result is just being compared to 0. Computing the boolean value can stop after it sees the first element, regardless of how long the sequence actually is. * DeepSource issue: Consider using literal syntax to create the data structure Using the literal syntax can give minor performance bumps compared to using function calls to create `dict`, `list` and `tuple`. This is because here, the name dict must be looked up in the global scope in case it has been rebound. Same goes for the other two types `list()` and `tuple()`. * DeepSource issue: Consider decorating method with `@staticmethod` The method doesn't use its bound instance. Decorate this method with `@staticmethod` decorator, so that Python does not have to instantiate a bound method for every instance of this class thereby saving memory and computation. Read more about staticmethods here. * DeepSource issue: Consider using `in` To check if a variable is equal to one of many values, combine the values into a tuple and check if the variable is contained `in` it instead of checking for equality against each of the values. This is faster, less verbose, and more readable. * DeepSource issue: Implicit enumerate calls found Using `range(len(...))` is not pythonic. Python does not have not index-based loops. Instead, it uses collection iterators. Python has a built-in method enumerate which adds a counter to an iterable. Using this, you can access the counter and the value from the iterable at the same time. It is therefore recommended to replace `range(len(...))` with `enumerate(...)`.
Loading
Please register or sign in to comment