我认为这可能非常简单,但我很欣赏这一提示:
我使用python列表来保存一些数据库插入语句:
list = [ "table_to_insert_to" ],["column1","column2"],[getValue.value1],["value2"]]
问题是其中一个值直到运行时才被评估 - 所以在页面运行之前,它会在尝试导入函数时中断。
你是如何处理的?
答案 0 :(得分:3)
你刚刚指出了全局变量中的一个(非常多)问题:不使用全局变量是解决这个问题的最佳解决方案。如果您仍然错误地认为必须使用全局变量,请将占位符(例如None
)放在您尚不知道的值所在的位置,并在最终知道它时分配正确的值。 / p>
答案 1 :(得分:2)
只需将其包装在函数中,并在有数据初始化时调用该函数。
# module.py
def setstatement(value1):
global sql
sql = ['select', 'column1', 'column2', value1]
# some other file
import module
module.setstatement(1)
# now you can use it.
>>> module.sql
['select', 'column1', 'column2', 1]
答案 2 :(得分:1)
可以放置函数而不是值,这些函数应该在运行时调用,并给出正确的结果,例如。
def getValue1Func():
return getValue.value1
my_list = [ "table_to_insert_to" ],["column1","column2"],[getValue1Func],["value2"]]
现在我不知道你如何使用这个列表(我认为如果你陈述整个问题会有更好的选择),所以在使用list时只检查值是否可调用并调用它来获取值
e.g。
if isinstance(val, collections.Callable):
val = val()
编辑:for python< 2.6,你应该使用operator.isCallable