我有一个 YAML 配置文件,其中包含一个字典,如下所示:
"COLUMN_NAME": column_function
Run Code Online (Sandbox Code Playgroud)
它将字符串映射到函数(存在并且应该被调用)。
但是,当我使用 加载它时yaml,我看到加载的字典现在将字符串映射到字符串:
'COLUMN_NAME': 'column_function'
Run Code Online (Sandbox Code Playgroud)
现在我不能按预期使用它 -'column_function'不指向column_function.
加载 mydict以便映射到我的函数的好方法是什么?在对这个问题进行了一些搜索和阅读之后,我对使用eval或类似的东西非常谨慎,因为配置文件是用户编辑的。
我认为这个线程是关于我的问题,但我不确定解决它的最佳方法。
getattr并且setattr我认为是因为它们对实例化的对象进行操作,而我有一个简单的脚本。globals(),vars()并locals()为我提供dicts 个变量,我想我应该globals()根据this 使用。我应该为我的配置中的每个键值对查找其中的字符串dict吗?这是一个好方法吗:
for (key, val) in STRING_DICTIONARY.items():
try:
STRING_DICTIONARY[key] = globals()[val]
except KeyError:
print("The config file specifies a function \"" + val
+ "\" for column \"" + key
+ "\". No such function …Run Code Online (Sandbox Code Playgroud) 我有一份字典中的股票价格清单和价值清单.我想通过列表来获取每天股票的价值,但是当我使用变量访问数据时,我无法解析列表中的位置.
这是一个例子:
goog = [12,132,124,234,234]
msft = [432,23,234,54,23]
num_days = 5
stocks_i_own = {'goog':50, 'msft':50}
for days in range(0,num_days):
for stock in stocks_i_own:
print days, stock, stocks_i_own[stock]
print stock[days] #prints just 'g' not the value on day0
print 'vaue on ', days, ' is ', stock[days] * stocks_i_own[stock]
Run Code Online (Sandbox Code Playgroud)
问题是当我stock[days]用来获取数据时.我知道库存有正确的值('goog'或'msft'),天数有正确的值(范围为0-4),但是当它们一起使用时,我不会从列表中获取数据,而是获取位置关于这个词本身.它是有道理的,因为像:
name = 'google'
name[0]
Run Code Online (Sandbox Code Playgroud)
会返回g(它在我的情况下做)但是有没有办法让python不要看到我提供它作为一个字符串而是引用列表?
我手头有一个非常棘手的情况(就我的标准而言)。我有一个脚本需要从ConfigParser读取脚本变量名称。例如,我需要阅读
self.post.id
Run Code Online (Sandbox Code Playgroud)
从 .cfg 文件并将其用作脚本中的变量。我如何实现这一目标?
我想我的查询不清楚。.cfg 文件类似于:
[head]
test: me
some variable : self.post.id
Run Code Online (Sandbox Code Playgroud)
这个 self.post.id 将在运行时被替换,从脚本中获取值。