我是Python新手,看到很多源代码使用单独的变量来处理x和y坐标或最小值和最大值等事物。
离。
COORD_X = 45
COORD_Y = 65
SIZE_MIN = 1
SIZE_MAX = 10
我想知道人们为什么不使用字典?如果我应该跟随他们的领导或做些对我感觉更好的事情?
离。
COORDS = {'x': 45, 'y': 65}
SIZE = {'min': 1, 'max': 10}
这是性能问题还是我遗漏了什么?字典似乎是更好的选择,特别是如果你有很多这些变量集。它将变量减半,你只需要将一个变量传递给函数而不是两个。
答案 0 :(得分:4)
在许多情况下,它只取决于个人风格偏好。但是,请注意,您正在创建更多对象来保存对象,这会消耗更多内存并且具有创建性能,并且查找速度稍慢,因此会出现实例(大量对象,长时间运行的嵌套循环等)只有多重绑定才有益。
对于您的示例,我可能会使用namedtuple
。这个例子几乎是你的COORDS
实例:
>>> Point = namedtuple('Point', ['x', 'y'], verbose=True)
>>> p = Point(11, y=22)
>>> p.x + p.y
33
答案 1 :(得分:1)
当您使用全部大写字母时,通常表示该变量是常量。这意味着你保持这种方式更好。在您的情况下,为两个键:值对创建字典是过度的。字典应该用于更长的对。
如果您在这种情况下热衷于使用字典,以下是更好的方法:
CONSTANTS = {'COORD_X': 45, 'COORD_Y': 65, 'SIZE_MIN': 1, 'SIZE_MAX': 10}
然后你可以做以下事情:
>>> CONSTANTS['COORD_X']
45
>>> print CONSTANTS.keys()
('COORD_X', 'COORD_Y', 'SIZE_MIN', 'SIZE_MAX')
答案 2 :(得分:1)
我认为这个答案还应该考虑变量的最终目的。我发现尽管明智地使用了字典,但如果使用得当,字典可以导致更简洁的代码。
例如: 假设您正在使用python处理JSONP,为此您将返回以下类型:
return 'jsonCallback(' + json.dumps([{'results': results}]) + ');'
结果可以是诸如“ deliverable”之类的字符串,但是如果您需要将更多数据传递给jsonCallback ,但是该数据并非总是在所有情况下都定义,该怎么办。添加另一个变量将导致在返回值中添加另一个自变量,例如:
return 'jsonCallback(' + json.dumps([{'results': results, 'sometimes': data}]) + ');'
在这种情况下,始终必须定义'sometimes': data
,而将dict集合用于 results 变量会导致代码更简洁,因为您将不断传递具有变量内容的dict变量数据。
答案 3 :(得分:0)
没有必要,它降低了可读性,它只是变量的另一个抽象层。您想要设置COORD_X=5
和COORD_Y=10
。所以你设置它。每个人都希望你设置它。没有理由设置
COORDS={'x':5, 'y':10}
另外,考虑一下你的函数调用注释,它会缩小你的功能。想象一下这个简单的函数
def show_args(*args):
print args
现在我想展示我所有的坐标,你不能只把你的字典传给你,去吧,它会有所不同,你仍然必须通过每个COORDS[key]
。我看到它实际制作它的唯一方法就是你只需要传递一个变量(字典名称),如果你硬编码你的函数
def show_args(varDict):
print varDict['x'], varDict['y']
然后你必须为每个变量写一个,并在每次添加变量时重写该函数的一部分。你可以循环遍历所有键,但是你说你不想打印每一个键?还是有点粗略。
它将你的变量削减了一半
不,它没有,它增加了更多。而不是COORD_X
和COORD_Y
,你有包含它们的字典,然后是它们的键:)