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!这正是我想要的。(投票结果)谢谢!这正是我想要的。(投票结果)谢谢,很好的解决方案,但不是我现在正在寻找的(投赞成票)谢谢,很好的解决方案,但不是我现在正在寻找的(投赞成票)