On 26/04/2013 01:27, Steven D'Aprano wrote: > On 26/04/13 09:56, MRAB wrote: > >> On the one hand, NoneType(None) seems a strange thing to do. > > Only when you write it out like that as constants. It's no more, > or less, strange than str('spam') or int(1) or list([]). Why > would you do that? > None is a singleton, but instances of str, int, list, etc aren't. Why can it take an argument when there's only ever one of them? That's why it seems strange to me. > But as soon as you think of it in general terms: > > some_type(some_instance) > > that's a pretty normal thing to do. And if it just so happened > that some_instance were an instance of some_type, it would be > surprising if the call failed. > > (I initially wrote "astonishing", but then I realised that some > types take more than one argument, e.g. FunctionType. So it's > merely surprising.) > >> On the other hand: >> >> type(value)(value) == value >> >> would return True for the built-in types (will certain exceptions, such >> as when value is float("NaN")). > > Not an exception, that works fine in 3.3: > >>>> value = float('nan') >>>> type(value)(value) > nan > But: >>> value = float('NaN') >>> type(value)(value) == value False That's what I mean by it being an "exception". >> Let's ask the Zen: >> >> Special cases aren't special enough to break the rules. >> >> Although practicality beats purity. > > I cannot think of any use-case where I would actively want > NoneType(None) to fail. That would be like having bool(True) > raise an exception. > > On the other hand, NoneType(x) for any other x ought to fail. > OK, so practicality (or pragmatism) wins.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4