如何在 python 中使用合适的容器
How to use proper container in python
对于以下代码,我想使用一个结构,以便不必为每个元素最小值和最大值提供 2 个值,而且我希望有一个容器(如果存在)可以提供一个值和另一个值剩下一个 None。例如只有最小元素的权力。因此,对于功率来说,有一个包含 2 个元素(最小值和最大值)和相同温度的容器。 python 这怎么可能?请帮忙,谢谢!
def result_final(
power_min,
power_max,
temperature_min,
temperature_max
) -> str:
def _result_min(value) -> str:
return "<min>" "<value>" + str(value) + "</value>" + "</min>"
def _result_max(value) -> str:
return "<max>" "<value>" + str(value) + "</value>" +" </max>"
def _measure_result(unit_id, min_value, max_value) -> str:
return (
"<measure_result>"
"<unit-id>" + str(unit_id) + "</unit-id>"
"" + _result_min(min_value) + ""
"" + _result_max(max_value) + ""
"</measure_result>"
)
def _stats(object, min_value, max_value) -> str:
return (
"<stats>"
"<object>" + object + "</object>"
"" + _measure_result(0, min_value, max_value) + ""
"" + _measure_result(1, min_value, max_value) + ""
"</stats>"
)
content = (
'<result-stats>'
"" + _stats("POWER", power_min, power_max) + ""
"" + _stats("TEMPERATURE", temperature_min, temperature_max) + ""
"</result-stats>"
)
return content
x = result_final(power_min = 12, power_max = 125, temperature_min = 12, temperature_max = 12)
print(x)
我建议你看看Python dataclasses
.
from dataclasses import dataclass
@dataclass
class MyContainer:
power_min: int = None
power_max: int = None
temperature_min: int = None
temperature_max: int = None
dataclass
包装器提供了一种方便的方法来定义仅存储一些数据的 class。 dataclasses
在标准库中(即,您不需要安装任何东西)。
默认情况下,我定义的 class 对所有属性使用 None
。或者您可以为您需要的属性指定值。
a_container = MyContainer(power_max=5, temperature_min=3)
我还建议选择一个比 MyContainer
更好的名字:我用那个名字是因为我不知道你想要达到什么目的!
您还可以决定为 TemperatureExtremes
和 PowerExtremes
定义两个单独的 classes,如果这对您来说更有意义的话!
我建议只对每个 min/max 对使用元组:
from typing import Optional, Tuple
Stats = Tuple[Optional[int], Optional[int]] # min, max
def result_final(power: Stats, temperature: Stats) -> str:
def _result_min(value: Optional[int]) -> str:
return "" if value is None else f"<min><value>{value}</value></min>"
def _result_max(value: Optional[int]) -> str:
return "" if value is None else f"<max><value>{value}</value></max>"
def _measure_result(unit_id: int, value: Stats) -> str:
min_value, max_value = value
return (
"<measure_result>"
f"<unit-id>{unit_id}</unit-id>"
f"{_result_min(min_value)}"
f"{_result_max(max_value)}"
"</measure_result>"
)
def _stats(obj: str, value: Stats) -> str:
return (
"<stats>"
f"<object>{object}</object>"
f"{_measure_result(0, value)}"
f"{_measure_result(1, value)}"
"</stats>"
)
return (
"<result-stats>"
f"{_stats('POWER', power)}"
f"{_stats('TEMPERATURE', temperature)}"
"</result-stats>"
)
print(result_final((12, 125), (12, 12)))
对于以下代码,我想使用一个结构,以便不必为每个元素最小值和最大值提供 2 个值,而且我希望有一个容器(如果存在)可以提供一个值和另一个值剩下一个 None。例如只有最小元素的权力。因此,对于功率来说,有一个包含 2 个元素(最小值和最大值)和相同温度的容器。 python 这怎么可能?请帮忙,谢谢!
def result_final(
power_min,
power_max,
temperature_min,
temperature_max
) -> str:
def _result_min(value) -> str:
return "<min>" "<value>" + str(value) + "</value>" + "</min>"
def _result_max(value) -> str:
return "<max>" "<value>" + str(value) + "</value>" +" </max>"
def _measure_result(unit_id, min_value, max_value) -> str:
return (
"<measure_result>"
"<unit-id>" + str(unit_id) + "</unit-id>"
"" + _result_min(min_value) + ""
"" + _result_max(max_value) + ""
"</measure_result>"
)
def _stats(object, min_value, max_value) -> str:
return (
"<stats>"
"<object>" + object + "</object>"
"" + _measure_result(0, min_value, max_value) + ""
"" + _measure_result(1, min_value, max_value) + ""
"</stats>"
)
content = (
'<result-stats>'
"" + _stats("POWER", power_min, power_max) + ""
"" + _stats("TEMPERATURE", temperature_min, temperature_max) + ""
"</result-stats>"
)
return content
x = result_final(power_min = 12, power_max = 125, temperature_min = 12, temperature_max = 12)
print(x)
我建议你看看Python dataclasses
.
from dataclasses import dataclass
@dataclass
class MyContainer:
power_min: int = None
power_max: int = None
temperature_min: int = None
temperature_max: int = None
dataclass
包装器提供了一种方便的方法来定义仅存储一些数据的 class。 dataclasses
在标准库中(即,您不需要安装任何东西)。
默认情况下,我定义的 class 对所有属性使用 None
。或者您可以为您需要的属性指定值。
a_container = MyContainer(power_max=5, temperature_min=3)
我还建议选择一个比 MyContainer
更好的名字:我用那个名字是因为我不知道你想要达到什么目的!
您还可以决定为 TemperatureExtremes
和 PowerExtremes
定义两个单独的 classes,如果这对您来说更有意义的话!
我建议只对每个 min/max 对使用元组:
from typing import Optional, Tuple
Stats = Tuple[Optional[int], Optional[int]] # min, max
def result_final(power: Stats, temperature: Stats) -> str:
def _result_min(value: Optional[int]) -> str:
return "" if value is None else f"<min><value>{value}</value></min>"
def _result_max(value: Optional[int]) -> str:
return "" if value is None else f"<max><value>{value}</value></max>"
def _measure_result(unit_id: int, value: Stats) -> str:
min_value, max_value = value
return (
"<measure_result>"
f"<unit-id>{unit_id}</unit-id>"
f"{_result_min(min_value)}"
f"{_result_max(max_value)}"
"</measure_result>"
)
def _stats(obj: str, value: Stats) -> str:
return (
"<stats>"
f"<object>{object}</object>"
f"{_measure_result(0, value)}"
f"{_measure_result(1, value)}"
"</stats>"
)
return (
"<result-stats>"
f"{_stats('POWER', power)}"
f"{_stats('TEMPERATURE', temperature)}"
"</result-stats>"
)
print(result_final((12, 125), (12, 12)))