这个问题与python有关,但它实际上对很多语言都很常见。看看那段代码:
import sys
people = ['John', 'Jack', 'Charles']
cities = ['London', 'Liverpool', 'Manchester']
if (len(cities) != len(people)):
print "Error! Length of cities list \
(%s) differs from length of people list (%s)" % (len(cities), len(people))
sys.exit(1)
for i in xrange (len(cities)):
print "Hello, %s from %s" %(people[i], cities[i])
似乎正确。但是在这个小片段len被称为3到5次(如果列表长度相等则为3次,如果列表长度不同则为5次)。我们需要重写这样的代码吗?
import sys
people = ['John', 'Jack', 'Charles']
cities = ['London', 'Liverpool', 'Manchester']
people_count = len(people)
cities_count = len(cities)
if (cities_count != people_count):
print "Error! Length of cities list \
(%s) differs from length of people list (%s)" % (cities_count, people_count)
sys.exit(1)
for i in xrange (cities_count):
print "Hello, %s from %s" % (people[i], cities[i])
换句话说:在哪些情况下我们需要临时变量来存储列表长度,在哪些情况下不需要它?
答案 0 :(得分:3)
我认为这属于不要重复自己:如果你想改变使用那个长度,你必须改变五件事,但如果你使用一个变量,它可能就是那个。
答案 1 :(得分:2)
如果你需要计算长度,你很可能做错了。在您的具体情况下,我会改为使用它:
for p, c in zip(people, cities):
print "Hello, %s from %s" % (p, c)
但一般情况下,只要len(somelist)
在同一列表的代码中出现两次,我就会将其粘贴到变量中。
答案 2 :(得分:1)
从一个干净的代码,我相信重复len(城市)更清洁。
答案 3 :(得分:0)
这听起来像是过早优化。如果频繁发生len()
次调用,则值得将它们放在单独的变量中。否则,您可以将len()
电话留在那里以便于编码。
另一方面,编码风格(或编码策略)更喜欢用于存储需要仅计算一次的工作的附加变量。在这种情况下,这样做不会有明显的性能提升,但这是一个不同的讨论。