我开始使用Python编写各种项目代码(包括Django Web开发和Panda3D游戏开发).
为了帮助我理解正在发生的事情,我想基本上"查看"Python对象内部以查看它们如何勾选 - 就像它们的方法和属性一样.
所以说我有一个Python对象,我需要打印出它的内容?这甚至可能吗?
Python提供了globals()访问所有全局变量的字典的功能.为什么这是一个函数而不是一个变量?以下作品:
g = globals()
g["foo"] = "bar"
print foo # Works and outputs "bar"
Run Code Online (Sandbox Code Playgroud)
在函数中隐藏全局变量的理由是什么?最好只调用一次并在某处存储引用,还是应该在每次需要时调用它?
恕我直言,这不是Python中globals()的Reason的重复?,因为我不是问为什么globals()存在,而是为什么它必须是一个函数(而不是一个变量__globals__).
我最近在我们的代码中遇到了许多这样的地方
...
globals()['machine'] = otherlib.Machine()
globals()['logger'] = otherlib.getLogger()
globals()['logfile'] = datetime.datetime.now().strftim('logfiles_%Y_%m_%d.log')
Run Code Online (Sandbox Code Playgroud)
而且我对人们为什么这样做而不是做的感到有点困惑
global machine
machine = otherlib.Machine()
Run Code Online (Sandbox Code Playgroud)
等等.
这是一个稍微匿名的功能,完整地执行此操作:
def openlog(num)
log_file = '/log_dir/thisprogram.' + num
if os.path.exists(log_file):
os.rename(log_file, log_file + '.old')
try:
globals()["log"] = open(log_file, 'w')
return log
except:
print 'Unable to open ' + log_file
sys.exit(1)
Run Code Online (Sandbox Code Playgroud)
它混淆了pylint(0.25)以及我.
是否有任何理由对其进行编码?在我们的代码中使用最少的eval,这不在库中
PS我在python中检查了globals()的原因,但它并没有真正回答为什么你用这个来设置程序中的全局变量
我有一个变量,它是函数的确切名称,但是以字符串格式.例如...
ran_test_opt = "random_aoi"
Run Code Online (Sandbox Code Playgroud)
而且功能是
def random_aoi():
logging.info("Random AOI Test").
Run Code Online (Sandbox Code Playgroud)
从配置文件接收,因此无法更改.有没有办法可以将字符串转换为我可以调用函数的格式?即
ran_test_opt()
Run Code Online (Sandbox Code Playgroud)
这将运行random_aoi函数.