Any difference between dir() and locals() in Python?
python
Solution
The output of `dir()` when called without arguments is almost same as `locals()`, but `dir()` returns a list of strings and `locals()` returns a dictionary and you can update that dictionary to add new variables.
dir(...)
dir([object]) -> list of strings
If called without an argument, return the names in the current scope.
locals(...)
locals() -> dictionary
Update and return a dictionary containing the current scope's local variables.
Type:
>>> type(locals())
<type 'dict'>
>>> type(dir())
<type 'list'>
Update or add new variables using `locals()`:
In [2]: locals()['a']=2
In [3]: a
Out[3]: 2
using `dir()`, however, this doesn't work:
In [7]: dir()[-2]
Out[7]: 'a'
In [8]: dir()[-2]=10
In [9]: dir()[-2]
Out[9]: 'a'
In [10]: a
Out[10]: 2
Problem
According to Python documentation, both `dir()` (without args) and `locals()` evaluates to the list of variables in something called `local scope`. First one returns list of names, second returns a dictionary of name-value pairs. Is it the only difference? Is this always valid? ``` assert dir() == sorted( locals().keys() ) ```