1

我是 python3 的新手,并试图构建一个命名为任何名称的 sqlobject 类。然后我创建了一个函数来计算一列的平均值。以下是部分代码。

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))

但它返回错误:

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)函数呢?

4

1 回答 1

0

请注意,这是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

于 2018-04-09T22:39:22.777 回答