Modifying list methods like append, sort, extend, remove, clear, and reverse typically return None rather than the modified list itself. This design decision is rooted in Python's overarching principle that functions that modify objects in-place should return None.
According to Guido van Rossum, the Python architect, this choice serves to emphasize that a new object is not being created. By not returning the modified list, it discourages the use of chained side effects, such as:
x.compress().chop(y).sort(z)
which can be confusing and hamper readability. Instead, Python prefers the more explicit form:
x.compress() x.chop(y) x.sort(z)
This separation makes it clear that each method is acting on the same object.
While chaining side-effect calls is discouraged, Python allows it for operations that return new values, such as string processing operations:
y = x.rstrip("\n").split(":").lower()
This design decision has drawbacks. It prevents intuitive "chaining" of list processing, such as:
mylist.reverse().append('a string')[:someLimit]
Alternatives like list comprehension and other data structures can provide similar functionality without breaking the "no side-effect returns" convention.
The above is the detailed content of Why Do Python's List Modification Methods Return `None`?. For more information, please follow other related articles on the PHP Chinese website!