How to keep Dict[str, List] default method parameter as local to the method?
Peter J. Holzer
hjp-python at hjp.at
Sun Jun 14 13:44:32 EDT 2020
On 2020-06-14 08:20:46 -0700, zljubisic at gmail.com wrote:
> consider this example:
>
> from typing import Dict, List
>
>
> class chk_params:
> def execute(self, params: Dict[str, List] = None):
> if params is None:
> params = {}
>
> for k, v in params.items():
> params[k] = [val + 10 for val in v]
>
> return params.values()
>
> params = {
> 'A' : [1],
> 'B': [2],
> 'C': [3],
> 'D': [4],
> 'E': [5]
> }
> print(params)
> params_obj = chk_params()
>
> print(params_obj.execute(params = params))
> print(params)
>
> Output is:
> {'A': [1], 'B': [2], 'C': [3], 'D': [4], 'E': [5]}
> dict_values([[11], [12], [13], [14], [15]])
> {'A': [11], 'B': [12], 'C': [13], 'D': [14], 'E': [15]}
>
> I expected that last print statement will show original parameters
> A=1, B=2... but this is not the case.
Others have already explained that.
> How to construct the method parameters, with params parameter as type
> of Dict[str, List], but at the same time keep params as local
> dictionary to the chk_params.execute() method?
Take one step back. What you really want is for chk_params.execute to
return the new values and not to modify the old dict. Whether or not
params is a "local dictionary" (that doesn't really make much sense in
Python[1]) is an irrelevant implementation detail.
So lets do that:
class chk_params:
def execute(self, params: Dict[str, List] = None):
if params is None:
params = {}
result = {}
for k, v in params.items():
result[k] = [val + 10 for val in v]
return result.values()
Of course at this point I notice that you are building a dict which you
don't need, so I would simplify that further:
class chk_params:
def execute(self, params: Dict[str, List] = None):
if params is None:
params = {}
result = []
for k, v in params.items():
result.append([val + 10 for val in v])
return result
hp
[1] There is a very good talk by Raymond Hettinger on how variables and
objects in Python work. Unfortunately I can't find it at the moment.
--
_ | Peter J. Holzer | Story must make more sense than reality.
|_|_) | |
| | | hjp at hjp.at | -- Charles Stross, "Creative writing
__/ | http://www.hjp.at/ | challenge!"
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/python-list/attachments/20200614/34aa0641/attachment.sig>
More information about the Python-list
mailing list