我已經制作了一些腳本,生成行星在星系中的'planetsCount',並檢查'testsCount'時間。 (在消息的結束代碼) 一些結果:
Preparing was done in 0.0 seconds, planetsCount is 10, testsCount is 1000000
First test time is 2.50099992752 sec
Second test time is 2.5 sec
Preparing was done in 0.0160000324249 seconds, planetsCount is 1000, testsCount is 1000000
First test time is 6.97200012207 sec
Second test time is 2.54799985886 sec
Preparing was done in 0.406000137329 seconds, planetsCount is 100000, testsCount is 10000
First test time is 6.09399986267 sec
Second test time is 0.0310001373291 sec
經由屬性檢查具有穩定的時間。 通過「列表中的項目」在小列表中檢查速度更快,但在大列表中速度很慢。 代碼低於
import random
import base64
import time
class Planet(object):
def __init__(self, state, name):
self.is_discovered = state
self.name = base64.b64encode(name)
class Galaxy(object):
planets = {}
explored = []
def __init__(self, planetCount):
for planetIndex in xrange(planetCount):
planetName = base64.b64encode(str(planetIndex))
is_discovered = random.choice([True, False])
planet = Planet(is_discovered, planetName)
self.planets.update({planetName: planet})
if is_discovered:
self.explored.append(planetName)
startTime = time.time()
planetsCount = 10
testsCount = 1000000
galaxy = Galaxy(planetsCount)
print "Preparing was done in {} seconds, planetsCount is {}, testsCount is {}".format(time.time() - startTime, planetsCount, testsCount)
startTime = time.time()
for x in xrange(testsCount):
planetName = base64.b64encode(str(random.randint(0, planetsCount - 1)))
planetName in galaxy.explored
print "First test time is {} sec".format(time.time() - startTime)
startTime = time.time()
for x in xrange(testsCount):
planetName = base64.b64encode(str(random.randint(0, planetsCount - 1)))
galaxy.planets[planetName].is_discovered
print "Second test time is {} sec".format(time.time() - startTime)
'返回True如果self.name在planet.explored_by其他FALSE'應該只是'在planet.explored_by' – wim
返回self.name對於你的使用情況,無論哪種方式將是足夠快。出於性能原因,選擇其中之一是沒有意義的。選擇任何風格使代碼看起來最好。 – wim
換句話說,[過早優化是萬惡之源](http://c2.com/cgi/wiki?PrematureOptimization) – Barmar