On 01/10/2018 10:23 PM, Yury Selivanov wrote: > On Thu, Jan 11, 2018 at 4:44 AM, Nathaniel Smith wrote: >> It may have gotten lost in that email, but my actual favorite approach >> is that we make the signatures: >> >> ContextVar(name, *, initial_value) # or even (*, name, initial_value) >> ContextVar.get() >> ContextVar.set(value) >> >> so that when you create a ContextVar you always state the initial >> value, whatever makes sense in a particular case. (Obviously None will >> be a very popular choice, but this way it won't be implicit, and >> no-one will be surprised to see it returned from get().) > > Alright, you've shown that most of the time when we use > threading.local in the standard library we subclass it in order to > provide a default value (and avoid AttributeError being thrown). This > is a solid argument in favour of keeping the 'default' parameter for > the ContextVar constructor. Let's keep it. [...] > I think that when you have an int stored in a context variable it > would usually make sense to give it a 0 default (or some other > number). However, for a complex object (like current request object) > there is *no* sensible default value sometimes. Forcing the user to > set it to None feels like a badly designed API that forces the user to > work around it. > > Therefore I'm still in favour of keeping the current PEP 567 > behaviour. To be clear: We'll now be able to specify a default when we create the variable, but we can also leave it out so a LookupError can be raised later? -- ~Ethan~
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