W1 A2 Dinos Function Model - how are the parameters retrieved?

Hi, I don’t understand this:

  1. The Function model returns parameters
  2. Within the above function model another function named optimize is called and it returns some three other variables but not parameters
  3. Within the above function named optimize another function named update_parameters is called and yes, this function returns parameters
  4. However, to my simple mind, even though the parameters are returned by the function update_parameters to the function optimize, they do get lost in the function optimize because this function does not return parameters.

The question is: how come the parameters are anyhow retrieved and passed over to the function model and - in the end - returned by this function?

Hello @Agnieszka_Sawicka,

It is a great question! Thank you for elaborating your question so clearly.

The key here is that optimize accepts parameters as an input argument. There is something special about parameters - it is a dict. When you pass a dict into a function, the function does not receive a copy of that dict, but like the “address” of that dict. Therefore, when update_parameters makes changes to that dict, it modifies directly the dict passed by optimize.

Let’s get the relations clearly: model(...) creates the parameters. Let’s say model is the “owner” of that parameters. We pass the “address” of parameters to optimize(...), then to update_parameters(...) where we actually makes modifications. Since only the “address” was passed into update_parameters(...), any modification is made directly on the parameters “owned” by model(...). This is how we can update the content of a dict in a function without returning it from a function.

You might also play with the following example to see its effect:

a_dict = {'hello': 'world'}

def update_a_dict(a_dict):
    a_dict['hello'] = 'world_world'
    return None

update_a_dict(a_dict)
print(a_dict)

Cheers,
Raymond

1 Like