我有以下输入:
[['0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'],
['0', '0', '10', '10', '0', '0', '10', '10', '0', '0', '0', '10', '10', '10', '10', '10', '0', '0', '0'],
['0', '0', '10', '10', '0', '0', '10', '10', '0', '0', '0', '0', '0', '0', '0', '10', '10', '0', '0'],
['0', '0', '10', '10', '0', '0', '10', '10', '0', '0', '0', '0', '0', '0', '0', '10', '10', '0', '0'],
['0', '0', '10', '10', '10', '10', '10', '10', '0', '0', '0', '0', '10', '10', '10', '10', '0', '0', '0'],
['0', '0', '0', '10', '10', '10', '10', '10', '0', '0', '0', '10', '10', '0', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '0', '10', '10', '0', '0', '0', '10', '10', '0', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '0', '10', '10', '0', '0', '0', '10', '10', '10', '10', '10', '10', '0', '0'],
['0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0']]
字符串
对于以下功能:
def assign_points(lists):
"""
Assigns points from a list of lists to Vec4 objects.
...
"""
z_max = float('-inf')
z_min = float('inf')
points = []
for y, l in enumerate(lists):
for x, point in enumerate(l):
try:
z, color = parse_point(point)
if color is None:
color = no_color(z)
points.append(Vec4(x, y, z, 0, color))
# Update z_max and z_min if necessary
if z > z_max:
z_max = z
if z < z_min:
z_min = z
except MyWarning as e:
exit(f"Error on line {str(y)}, item {str(x)}: {e}")
return points, z_max, z_min
型
但是,
我的问题是:
1.我觉得assign_points
太臃肿,做/返回太多。
1.输入列表可能会变得相当大,我认为在它们中循环不止一次是浪费的
1.我不确定global vars是最佳实践
我想做一个函数来存储值,并(取决于作为参数的标志)返回在assign_points
之外调用的最大值。但我很确定python没有静态变量(对吧?)
你将如何处理这个问题?我应该让它保持原样,还是做全局变量,还是做第三个选项?
1条答案
按热度按时间vuv7lop31#
正如注解中所建议的,定义自己的类将允许您根据自己的喜好示例化和操作对象。
因为似乎有三个相关的值(
points
,z_max
和z_min
),所以可以让类继承namedtuple
。assign_points
可以创建为类的方法:字符串
您可以定义其他方法。例如,一个只需要一个列表和一个
y
值,以避免在所有列表上循环,因此一次添加更少的点。使用你的类看起来像:
型