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