[Python-ideas] 'Injecting' objects as function-local constants

Jan Kaliszewski zuo at chopin.edu.pl
Tue Jun 14 12:17:55 CEST 2011


Bruce Leban dixit (2011年06月13日, 18:45):
> It seems to me this discussion is mixing some different issues.
>> (1) having secret parameters that don't show in help().
[...]
> I think these should be thought about separately.
>> *For secret parameters:* help() could have a convention that it doesn't
> display variables with that start with _ or something like that, but that

No, the idea is that after-**-constans are not only hidden-in-help-
-arguments but that they also cannot be specified/overriden in a
function call. So their usage would not be a hack that causes risk of
incidental override by caller or that makes function signatures
obfuscated (they would have to be defined separately, after **|**kwargs,
in the righmost signature part).
 def compute(num1, num2, **, MAX_CACHE_LEN=100, cache=dict()):
 try:
 return cache[(num1, num2)]
 except KeyError:
 if len(cache) >= MAX_CACHE_LEN:
 cache.popitem()
 cache[(num1, num2)] = result = _compute(num1, num2)
 return result
 help(compute) # -> "... compute(num1, num2)"
 compute(1, 2) # OK
 compute(1, 2, MAX_CACHE_LEN=3) # would raise TypeError
 compute(1, 2, cache={}) # would raise TypeError
----
Open question:
It's obvious that such a repetition must be prohibited (SyntaxError, at
compile time):
 def sth(my_var, **, my_var): "do something"
But in case of:
 def sth(*args, **kwargs, my_var='foo'): "do something"
-- should 'my_var' in kwargs be allowed? (it's a runtime question)
There is no real conflict here, so at the first sight I'd say: yes. 
Regards.
*j


More information about the Python-ideas mailing list

AltStyle によって変換されたページ (->オリジナル) /