Code 25: locals()

Useful Built-in Function to Obtain Locals Variables & Their Values
coding
python
Author

Tony Phung

Published

February 23, 2025

1. Setup

class TreeNode:
    def __init__(self, data, left=None, right=None):
        self.data = data
        self.left = left
        self.right = right
        
node15 = TreeNode(15, left=None, right=None)
node25 = TreeNode(25, left=node15, right=None)
node35 = TreeNode(35, left=None, right=None)

2. locals(): As a Dictionary

Local variables and their values as a dictionary

def some_fn(): #blog it
    current_node = node15
    root_node = node25
    x=777
    y=x-1
    z="a cool string"
    cooldict = {'a_1205': 1206,'b_x':x,
                'c_n25':node25,
                'd_rn':root_node,
                'e_n15':node15,
                'f_n25l':node25.left,
                'g_rnl':root_node.left,
                'h_n35':node35}
    
    print(f"[local-variables dict using locals():] \n\t",locals(),end="\n\n")
    
    # local_keys_var_names = (locals().keys())
    # print(f"[local-variable-names using 'locals().keys()']: \n\t{local_keys_var_names}",end="\n\n")

    # local_variable_values = (locals().values())
    # print(f"[local-variable-values using 'locals().values()']:")
    # [print(f"\t{val}") for val in local_variable_values]
    # print()
    
    # local_variable_name_and_values = (locals().items())
    # print(f"[local-variable-values using 'locals().items()']:")
    # [print(f"\t{(k,v)}") for k,v in local_variable_name_and_values]
    # print()
    
some_fn()
[local-variables dict using locals():] 
     {'current_node': <__main__.TreeNode object at 0x7f2b8553a980>, 'root_node': <__main__.TreeNode object at 0x7f2b85538940>, 'x': 777, 'y': 776, 'z': 'a cool string', 'cooldict': {'a_1205': 1206, 'b_x': 777, 'c_n25': <__main__.TreeNode object at 0x7f2b85538940>, 'd_rn': <__main__.TreeNode object at 0x7f2b85538940>, 'e_n15': <__main__.TreeNode object at 0x7f2b8553a980>, 'f_n25l': <__main__.TreeNode object at 0x7f2b8553a980>, 'g_rnl': <__main__.TreeNode object at 0x7f2b8553a980>, 'h_n35': <__main__.TreeNode object at 0x7f2b8553ab00>}}

3. locals().items(): As A List

Outputs as dict_keys, which is an iterable, then convert variable_name-value pairs to list

def some_fn(): #blog it
    current_node = node15
    root_node = node25
    x=777
    y=x-1
    z="a cool string"
    cooldict = {'a_1205': 1206,'b_x':x,
                'c_n25':node25,
                'd_rn':root_node,
                'e_n15':node15,
                'f_n25l':node25.left,
                'g_rnl':root_node.left,
                'h_n35':node35}
    
    # print(f"[local-variables dict using locals():] \n\t",locals(),end="\n\n")
    
    # local_keys_var_names = (locals().keys())
    # print(f"[local-variable-names using 'locals().keys()']: \n\t{local_keys_var_names}",end="\n\n")

    # local_variable_values = (locals().values())
    # print(f"[local-variable-values using 'locals().values()']:")
    # [print(f"\t{val}") for val in local_variable_values]
    # print()

    local_variable_name_and_values = (locals().items())
    print(f"[local-variable-values using 'locals().items()']:")
    [print(f"\t{(k,v)}") for k,v in local_variable_name_and_values]
    print()
    
some_fn()
[local-variable-values using 'locals().items()']:
    ('current_node', <__main__.TreeNode object at 0x7f2b8553a980>)
    ('root_node', <__main__.TreeNode object at 0x7f2b85538940>)
    ('x', 777)
    ('y', 776)
    ('z', 'a cool string')
    ('cooldict', {'a_1205': 1206, 'b_x': 777, 'c_n25': <__main__.TreeNode object at 0x7f2b85538940>, 'd_rn': <__main__.TreeNode object at 0x7f2b85538940>, 'e_n15': <__main__.TreeNode object at 0x7f2b8553a980>, 'f_n25l': <__main__.TreeNode object at 0x7f2b8553a980>, 'g_rnl': <__main__.TreeNode object at 0x7f2b8553a980>, 'h_n35': <__main__.TreeNode object at 0x7f2b8553ab00>})

4. locals().keys(): Variable Names Only

Outputs as dict_keys, an iterable, containing all names of local variables

def some_fn(): #blog it
    current_node = node15
    root_node = node25
    x=777
    y=x-1
    z="a cool string"
    cooldict = {'a_1205': 1206,'b_x':x,
                'c_n25':node25,
                'd_rn':root_node,
                'e_n15':node15,
                'f_n25l':node25.left,
                'g_rnl':root_node.left,
                'h_n35':node35}
    
    # print(f"[local-variables dict using locals():] \n\t",locals(),end="\n\n")
    
    local_keys_var_names = (locals().keys())
    print(f"[local-variable-names using 'locals().keys()']: \n\t{local_keys_var_names}",end="\n\n")

    # local_variable_values = (locals().values())
    # print(f"[local-variable-values using 'locals().values()']:")
    # [print(f"\t{val}") for val in local_variable_values]
    # print()

    # local_variable_name_and_values = (locals().items())
    # print(f"[local-variable-values using 'locals().items()']:")
    # [print(f"\t{(k,v)}") for k,v in local_variable_name_and_values]
    # print()
    
some_fn()
[local-variable-names using 'locals().keys()']: 
    dict_keys(['current_node', 'root_node', 'x', 'y', 'z', 'cooldict'])

5. locals().values(): Variable Values Only

Outputs as dict_keys, an iterable, containing all values of local variables

def some_fn(): #blog it
    current_node = node15
    root_node = node25
    x=777
    y=x-1
    z="a cool string"
    cooldict = {'a_1205': 1206,'b_x':x,
                'c_n25':node25,
                'd_rn':root_node,
                'e_n15':node15,
                'f_n25l':node25.left,
                'g_rnl':root_node.left,
                'h_n35':node35}
    
    # print(f"[local-variables dict using locals():] \n\t",locals(),end="\n\n")
    
    # local_keys_var_names = (locals().keys())
    # print(f"[local-variable-names using 'locals().keys()']: \n\t{local_keys_var_names}",end="\n\n")

    local_variable_values = (locals().values())
    print(f"[local-variable-values using 'locals().values()']:")
    [print(f"\t{val}") for val in local_variable_values]
    print()

    # local_variable_name_and_values = (locals().items())
    # print(f"[local-variable-values using 'locals().items()']:")
    # [print(f"\t{(k,v)}") for k,v in local_variable_name_and_values]
    # print()
    
some_fn()
[local-variable-values using 'locals().values()']:
    <__main__.TreeNode object at 0x7f2b8553a980>
    <__main__.TreeNode object at 0x7f2b85538940>
    777
    776
    a cool string
    {'a_1205': 1206, 'b_x': 777, 'c_n25': <__main__.TreeNode object at 0x7f2b85538940>, 'd_rn': <__main__.TreeNode object at 0x7f2b85538940>, 'e_n15': <__main__.TreeNode object at 0x7f2b8553a980>, 'f_n25l': <__main__.TreeNode object at 0x7f2b8553a980>, 'g_rnl': <__main__.TreeNode object at 0x7f2b8553a980>, 'h_n35': <__main__.TreeNode object at 0x7f2b8553ab00>}