Здравствуйте, watchmaker, Вы писали:
W>Здравствуйте, IROV.., Вы писали:
W>>>Приведи пример реализации на псевдокоде такой проверки.
W>IRO>> if d->m[d->index].key == key : return d->m[d->index].value
W>
W>Где оптимизация-то?
Почему этому коду не хватает миллиарда итераций чтобы вышеприведённая строчка начала срабатывать? W>key = 'abc'
W>d = {''.join(key): "Hello"}
W>assert key in d # True
W>for i in xrange(10**9):
W> if key in d:
W> print(d[key])
W>
А в питоне оказывается уже есть такая оптимизация только она общего характера на все объекты
if (MCACHE_CACHEABLE_NAME(name) &&
PyType_HasFeature(type, Py_TPFLAGS_VALID_VERSION_TAG)) {
/* fast path */
h = MCACHE_HASH_METHOD(type, name);
if (method_cache[h].version == type->tp_version_tag &&
method_cache[h].name == name)
return method_cache[h].value;
}
это можно найти в _PyType_Lookup(PyTypeObject *type, PyObject *name)