Python 使用产量打印输出

Python 使用产量打印输出,python,yield,Python,Yield,这是本书的延续 我使用的是yield语句,而不是return 代码如下: class Measurements(): def __init__(self, value, other): self.value = value self.other = other class Criteria(): def __init__(self, new_value, measurements): self.new_value = new_v

这是本书的延续

我使用的是
yield
语句,而不是
return

代码如下:

class Measurements():
    def __init__(self, value, other):
        self.value = value
        self.other = other


class Criteria():
    def __init__(self, new_value, measurements):
        self.new_value = new_value
        self.measurements = measurements

    def method(self):
        for measurement in self.measurements:
            if 20 < measurement.value < 110:
                measurement.value = self.new_value
        return self.measurements

class Evaluate():
    def __init__(self, criteria):
        self.criteria = criteria

    def execute(self):
        for c in self.criteria:
            c.method()
            yield c.measurements


def main():
    criteria = [
        Criteria(999, [Measurements(100, 0.3), Measurements(33, 0.5)]),
        Criteria(999, [Measurements(150, 0.3), Measurements(35, 0.5)]),
    ]

    compare =  [
        Measurements(999, 0.3), Measurements(999, 0.5),
        Measurements(100, 0.3), Measurements(999, 0.5)
    ]

    obs = Evaluate(criteria).execute()

    # here compare

if __name__ == "__main__":
    main()
class测量()
定义初始值(自身、值、其他):
自我价值=价值
其他的
类标准():
定义初始值(自身、新值、测量值):
self.new\u值=new\u值
自我测量=测量
def方法(自我):
对于自测量中的测量:
如果20<测量值<110:
测量值=自身新值
返回自我测量
类求值():
定义初始(自我,标准):
self.criteria=标准
def执行(自我):
对于self.criteria中的c:
c、 方法()
产量测量
def main():
标准=[
标准(999、[测量值(100,0.3)、测量值(33,0.5)]),
标准(999、[测量值(150,0.3)、测量值(35,0.5)]),
]
比较=[
测量值(999,0.3),测量值(999,0.5),
测量值(100,0.3),测量值(999,0.5)
]
obs=评估(标准).execute()
#这里比较
如果名称=“\uuuuu main\uuuuuuuu”:
main()

我想将来自
obs
的输出值与
compare
中的值进行比较。我指的是
测量部分

因此,从
obs
,我们有(对于运行代码后的变量值):
999999150999
(因为如果20
compare
中,我们发现:
999999100999

仍然有点不确定您想要执行什么检查,但下面是一个示例,应该可以让您开始。进行了几项更改

# Made compare a list contain lists of Measurements to match criteria
compare =  [
    [Measurements(999, 0.3), Measurements(999, 0.5)],
    [Measurements(100, 0.3), Measurements(999, 0.5)]
]

我建议在有类实例列表的情况下这样做,这会使调试更容易,因为您得到的不是这些,而是更有意义的东西

<__main__.Measurements object at 0x0000000003E2C438>

仍然有点不确定您想要执行什么检查,但这里有一个示例可以让您开始

# Made compare a list contain lists of Measurements to match criteria
compare =  [
    [Measurements(999, 0.3), Measurements(999, 0.5)],
    [Measurements(100, 0.3), Measurements(999, 0.5)]
]

我建议在有类实例列表的情况下这样做,这会使调试更容易,因为您得到的不是这些,而是更有意义的东西

<__main__.Measurements object at 0x0000000003E2C438>

我不知道你是否真的需要测量的二维结构,这将把它变成numpy中的三维结构。如果没有必要,你可以去掉额外的维度

import numpy as np

lower = 20
upper = 110

meas = np.array([[[100, 0.3], [33, 0.5]], [[150, 0.3], [35, 0.5]]])
crit = np.array([[999, 999]])
comp = np.array([[[100, 0.3], [33, 0.5]], [[150, 0.3], [35, 0.5]]])

mask = (meas[:,:,0] > lower) * (meas[:,:,0] < upper)

meas[mask,0] = (mask * crit)[mask] # apply mask to inner first column

out = (meas == comp).all(axis=2) # compare each measurement to respective one in comp

print(out)

我不知道你是否真的需要测量的二维结构,这将把它变成numpy中的三维结构。如果没有必要,你可以去掉额外的维度

import numpy as np

lower = 20
upper = 110

meas = np.array([[[100, 0.3], [33, 0.5]], [[150, 0.3], [35, 0.5]]])
crit = np.array([[999, 999]])
comp = np.array([[[100, 0.3], [33, 0.5]], [[150, 0.3], [35, 0.5]]])

mask = (meas[:,:,0] > lower) * (meas[:,:,0] < upper)

meas[mask,0] = (mask * crit)[mask] # apply mask to inner first column

out = (meas == comp).all(axis=2) # compare each measurement to respective one in comp

print(out)

从什么继续?实际的问题是什么?@Christofterasa:我编辑过,但它是独立的。您想如何比较它们?
obs
是一个生成器,您可以遍历这些值。“我想将obs的输出值与比较中的值进行比较”。请解释为什么
列表(obs)==compare
不符合您的需要。@scytale:是的,我尝试将for循环与enumerate一起使用,但无法从什么开始计算连续性?实际的问题是什么?@Christofterasa:我编辑过,但它仍然是独立的。您希望如何比较它们?
obs
是一个生成器,因此您可以迭代这些值。“我想将obs中的输出值与比较中的值进行比较”。请解释为什么
list(obs)==compare
不能满足您的需要。@scytale:是的,我尝试使用for-loop和enumerate,但我无法计算出ks!这正是我想要的。(投票结果)谢谢!这正是我想要的。(投票结果)谢谢,很好的解决方案,但不是我现在正在寻找的(投赞成票)谢谢,很好的解决方案,但不是我现在正在寻找的(投赞成票)