Python Forum
pop methods - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: General (https://python-forum.io/forum-1.html)
+--- Forum: News and Discussions (https://python-forum.io/forum-31.html)
+--- Thread: pop methods (/thread-31033.html)



pop methods - Skaperen - Nov-19-2020

/of all the types/classes that have a pop() method, it seems only dict/pop() implements an optional 2nd argument for default. why is it limited to just dict.pop()


RE: pop methods - Gribouillis - Nov-19-2020

Which classes should also have a default argument?


RE: pop methods - DeaD_EyE - Nov-19-2020

If you change the behavior of pop, you'll break all existing code.
You can inherit from UserList a make your own special type.
The point is, that a dict has key-values, where the pop method must access explicit a key.
The pop of sequences is different. It takes the last value from the list, if no argument is supplied.
Otherwise, it will return the element with the given index.

from collections import UserList


class DefaultPop(UserList):
    def pop(self, index=-1, default=None):
        try:
            return super().pop(index)
        except IndexError:
            return default


my_list = DefaultPop([1,2,3])


while True:
    value = my_list.pop(default=42)
    print(value)
    if value == 42:
        break
In collections, you've UserDict, UserList and UserString for inheritance.
Don't try this with dict, list and str. Often this won't work as expected.


RE: pop methods - Skaperen - Nov-20-2020

(Nov-19-2020, 09:22 AM)Gribouillis Wrote: Which classes should also have a default argument?

how about list and set.


RE: pop methods - Skaperen - Nov-20-2020

what code has a 2nd argument that it expects to provide something other than a default value for list and set?