Python中如何仅修改一处定义即可打印当前使用的数组名称
实现方法
Python中普通变量赋值是对象引用绑定,无法直接从引用变量反推原始变量名,最稳妥的实现方式是把数组选择的配置和名称绑定统一维护,全程不需要修改打印语句,仅改配置行就能切换数组、输出正确名称。
方案1:命名空间映射(推荐,生产可用)
核心逻辑是单独用一个常量存当前选中的数组名,通过命名空间字典取到对应数组对象赋值给XYZ,打印时直接读取这个常量即可,后续切换数组只需要改常量的赋值。
# 先定义所有需要用到的候选数组 my_array = [1, 2, 3] another_array = [4, 5, 6] test_array = [7, 8, 9] # -------------------------- # 仅修改这一行即可切换数组 CURRENT_USE_ARR = "my_array" # -------------------------- # 自动从作用域取对应数组绑定给XYZ,不需要修改 XYZ = locals().get(CURRENT_USE_ARR, globals().get(CURRENT_USE_ARR)) # 中间任意业务代码... # 打印语句固定,不需要随数组切换修改 print(f'the name of array I am using is {CURRENT_USE_ARR}')
这个方案全Python版本兼容,不受代码格式、打包部署影响,稳定性最高。
方案2:源码解析(仅适合快速脚本场景)
如果非要把配置压缩到XYZ=xxx这一行,不想单独存名称常量,可以借助inspect模块读取赋值行的源码,自动解析等号右侧的原始数组名,属于奇技淫巧,不推荐生产环境使用。
import inspect def fetch_assign_right_name(): # 读取上一层调用的代码行 code_line = inspect.stack()[1].code_context[0].strip() # 解析等号右侧、注释前的变量名 return code_line.split("=", 1)[1].split("#")[0].strip() # 候选数组定义 my_array = [1, 2, 3] another_array = [4, 5, 6] # -------------------------- # 仅修改这一行即可切换数组 XYZ = my_array # -------------------------- arr_name = fetch_assign_right_name() # 中间任意业务代码... # 打印语句固定 print(f'the name of array I am using is {arr_name}')
注意:这个方案依赖源码行的文本格式,如果赋值行写了复杂表达式、代码被混淆压缩、运行环境拿不到源码上下文,会直接失效。
内容的提问来源于stack exchange,提问作者Von
相关产品推荐
相关产品推荐

