python3 与 SQLObject class 传递参数
python3 with SQLObject class pass parameters
我是 python3 的新手,正在尝试构建一个名为 whatever 的 sqlobject class。然后我创建了一个函数来计算一列的平均值。以下是部分代码。
class whatever(sqlobject.SQLObject):
_connection = connection
f1 = sqlobject.FloatCol()
f2 = sqlobject.FloatCol()
wid=sqlobject.IntCol(default=None)
def avg(col, num):
l1 = []
for i in range(1,num):
e = whatever.get(i).col
l1.append(a)
return statistics.mean(l1)
print (avg(f1, 5))
但是returns错误:
Traceback (most recent call last):
File "test1.py", line 58, in <module>
print (avg(f1, 5))
NameError: name 'f1' is not defined
然而,当我直接写下这样的代码时:
class whatever(sqlobject.SQLObject):
_connection = connection
f1 = sqlobject.FloatCol()
f2 = sqlobject.FloatCol()
wid=sqlobject.IntCol(default=None)
l1 = []
for i in range(1,5):
e = whatever.get(i).f1
l1.append(e)
print (statistics.mean(l1))
它工作正常。那么def avg(col, num)
函数该怎么办呢?
请注意 whatever.get(i).f1
有效 — 这是因为您明确命名了该列。如果您想按名称获取列,您必须:
- 传递列的名称,即
avg('f1', 5)
;
- 使用
getattr
获取列的值。
所以固定码是:
def avg(col, num):
l1 = []
for i in range(1, num):
e = getattr(whatever.get(i), col)
l1.append(a)
return statistics.mean(l1)
print(avg('f1', 5))
PS。您的代码中的下一个错误将是 NameError: a
。 a
是什么?你是说 e
吗?
我是 python3 的新手,正在尝试构建一个名为 whatever 的 sqlobject class。然后我创建了一个函数来计算一列的平均值。以下是部分代码。
class whatever(sqlobject.SQLObject):
_connection = connection
f1 = sqlobject.FloatCol()
f2 = sqlobject.FloatCol()
wid=sqlobject.IntCol(default=None)
def avg(col, num):
l1 = []
for i in range(1,num):
e = whatever.get(i).col
l1.append(a)
return statistics.mean(l1)
print (avg(f1, 5))
但是returns错误:
Traceback (most recent call last):
File "test1.py", line 58, in <module>
print (avg(f1, 5))
NameError: name 'f1' is not defined
然而,当我直接写下这样的代码时:
class whatever(sqlobject.SQLObject):
_connection = connection
f1 = sqlobject.FloatCol()
f2 = sqlobject.FloatCol()
wid=sqlobject.IntCol(default=None)
l1 = []
for i in range(1,5):
e = whatever.get(i).f1
l1.append(e)
print (statistics.mean(l1))
它工作正常。那么def avg(col, num)
函数该怎么办呢?
请注意 whatever.get(i).f1
有效 — 这是因为您明确命名了该列。如果您想按名称获取列,您必须:
- 传递列的名称,即
avg('f1', 5)
; - 使用
getattr
获取列的值。
所以固定码是:
def avg(col, num):
l1 = []
for i in range(1, num):
e = getattr(whatever.get(i), col)
l1.append(a)
return statistics.mean(l1)
print(avg('f1', 5))
PS。您的代码中的下一个错误将是 NameError: a
。 a
是什么?你是说 e
吗?