python - 可以从导入的模块访问 __name__ 属性吗
问题描述
给定一个导入模块 B 的模块 A,模块 B 中的函数(在模块 A 中使用)是否有办法访问模块 A 中的__name__
属性,而无需显式传递(例如,函数参数)?
解决方案
是的,您可以通过一级函数调用堆栈“返回”来访问存储在框架f_globals
属性中的调用函数的全局变量。这就是我的意思:
# The main script.
import module_A
module_A.func()
# module_A.py
import module_B
def func():
module_B.func()
# module_B.py
import sys
def func():
namespace = sys._getframe(1).f_globals # caller's globals
print(f'module_B.func() was called from {namespace["__name__"]}')
运行主脚本的输出:
module_B.func() was called from module_A
我想补充一点,这是一件很老套的事情,所以在生产代码中做之前你可能要三思而后行。
推荐阅读
- rabbitmq - RabbitMQ Expired TTL 消息不进入死信交换
- javascript - 如何在不改变全局状态的情况下改变局部状态
- android - 如何从 Android 上的数据/数据文件夹中复制 SQLite db?
- javascript - 向上滚动时iPhone上的移动标题问题
- c# - 是否可以在 asp mvc Web 应用程序上记录 Https 请求的 TLS 版本?
- django - 多对多不保存在 django
- spring-security-oauth2 - OAuth2 与多个网关实例共享主体对象
- r - 使用 sf 在 R 中查找时间和空间上最近的邻居
- python - Django激活翻译项目范围而不是每个视图?
- powerbi - 在 PowerBI 中,我们如何创建一个计算列,其中值被修改为唯一?