- 不支持的操作数类型:'function' 和 'function'

unsupported operand type(s) for -: 'function' and 'function'

我在尝试 return 数组中 1 个标准差以内的对象计数时遇到问题。为了得到标准偏差,我创建了两个函数,但现在我不能 add/subtract 这些函数。我试图将函数转换为整数,但开始收到关于我的标准差是浮点数这一事实的错误。执行所有这些操作的更好方法是什么?

import numpy as np
import math
vac_nums=np.array([180, 172, 178, 185, 190, 195, 192, 200, 210, 190])
def variance():
    n = len(vac_nums)
    mean = sum(vac_nums)/n
    deviations = [(x - mean) ** 2 for x in vac_nums]
    variance = sum(deviations)/n
    return variance
print(variance())
def stdev():
    var = variance()
    std_dev = math.sqrt(var)
    return std_dev
print(stdev())
sum = 0 
for x in vac_nums:
    if np.array(x) >=(variance-stdev) and np.array(x) <=(variance+stdev):
        sum += 1
print(sum)

函数在 python 中 first class objects,整数、列表、类 以及您可能在短时间内想到的所有其他内容。函数可以被调用,在这种情况下它return是一个return值。使用 () 运算符调用函数,有时包含 参数 .

您在代码中创建了两个函数对象:variancestdev。这两个名称指的是函数对象。

您在它们后面的每个 print 语句中调用函数。例如 variance() 是一个调用 return 是一个 float,您可以打印它。

如您所料,两个函数对象的总和没有意义。您可以有意义地添加整数、浮点数甚至列表,但函数的总和是多少?由于每个函数的 return 值都是一个数字,您可以有意义地添加(或减去)这些值:

variance() + stdev()

通常我们将昂贵函数调用的 return 值存储到一个变量一次,然后使用该变量而不是重新运行该函数的所有操作。在 python 中,您通过使用 = 运算符将对象(如 return 值)绑定到名称来存储变量。你可以这样做:

s = stdev()
print(s)
...
v = variance()
print(v)
...
# Use v + s in an expression instead of variance + stdev