📜  如何获取内存中所有变量的列表python(1)

📅  最后修改于: 2023-12-03 15:38:53.617000             🧑  作者: Mango

如何获取内存中所有变量的列表 Python

在 Python 中,我们可以使用 globals() 或者 locals() 函数来获取当前命名空间中的变量。这些函数将返回一个字典,字典的键为变量名,值为变量值。

# 获取当前命名空间中的所有变量
all_vars = globals().items()

# 打印所有变量名和对应的值
for var_name, var_value in all_vars:
    print(f"{var_name}: {var_value}")

输出:

__name__: __main__
__doc__: None
__package__: None
__loader__: <class '_frozen_importlib.BuiltinImporter'>
__spec__: None
__annotations__: {}
__builtins__: <module 'builtins' (built-in)>
all_vars: dict_items([...])

同样的,如果我们只想获取当前函数或者代码块内的变量,可以使用 locals() 函数。

def example_func():
    # 定义一个变量
    example_var = "example"
    # 获取当前函数内的所有变量
    local_vars = locals().items()
    # 打印所有变量名和对应的值
    for var_name, var_value in local_vars:
        print(f"{var_name}: {var_value}")

example_func()

输出:

example_var: example

此外,还可以通过 dir() 函数获取某个对象的属性和方法,其中包括对象的成员变量和函数中定义的变量。如果没有参数,则返回所有全局变量。

import sys

# 获取 sys 模块的所有变量
all_vars = dir(sys)

# 打印所有变量名
for var_name in all_vars:
    print(var_name)

输出:

_DisplayHook
__
___displayhook__
__add__
__all__
__breakpointhook__
__builtins__
__debug__
__doc__
__excepthook__
__file__
__interactivehook__
__loader__
__name__
__package__
__spec__
__stderr__
__stdin__
__stdout__
__unraisablehook__
__version__
_abiflags
base_exec_prefix
base_prefix
builtin_module_names
byteorder
call_tracing
callstats
copyright
displayhook
dont_write_bytecode
exc_info
excepthook
exec_prefix
executable
exit
flags
float_info
float_repr_style
get_asyncgen_hooks
get_coroutine_origin_tracking_depth
get_coroutine_wrapper
getallocatedblocks
getcheckinterval
getdefaultencoding
getdlopenflags
getfilesystemencoding
getprofile
getrefcount
getsizeof
getswitchinterval
gettrace
hash_info
hexversion
implementation
int_info
intern
is_finalizing
maxsize
maxunicode
meta_path
modules
path
path_hooks
path_importer_cache
platform
prefix
ps1
ps2
real_prefix
set_asyncgen_hooks
set_coroutine_origin_tracking_depth
set_coroutine_wrapper
setcheckinterval
setdlopenflags
setprofile
setswitchinterval
settrace
stderr
stdin
stdout
thread_info
version
version_info
warnoptions

因此,在 Python 中,我们可以通过几个函数获取当前命名空间或者某个对象的所有变量和属性。这对于调试和动态代码分析非常有用。