我没有解压缩字段列表,而是试图解包一个字段元组,并将结果传递给db()。select()函数,如下所示:
def get_record(self, record_id, fields):
try:
return self.db(self.db.t_group.id == record_id).select(*fields).first()
except Exception as e:
print e
def fun1(self, record_id):
self.get_record(record_id, (self.db.t_group.f_expiration))
这样做会迅速吞噬所有系统的内存,或多或少地使系统停止运行。但是,如果我传递了一个列表而不是一个元组,那么,如下面的语句所示,该函数按预期工作:
def fun1(self, record_id):
self.get_record(record_id, [self.db.t_group.f_expiration])
为什么将元组解压缩到db()。select()函数中会有问题?
答案 0 :(得分:1)
(self.db.t_group.f_expiration)
不是元组,只是等同于self.db.t_group.f_expiration
。
在Python中,元组是通过用逗号分隔项来定义的,而不是用带圆括号的周围项来定义的(括号并不总是需要的,只是可以在更大的上下文中定义元组表达式,就像任何其他表达式一样)。要创建单项元组,只需在项目后添加逗号(如果需要,将整个项目包装在括号中)。在这种情况下:
(self.db.t_group.f_expiration, )