Kaydet (Commit) c38c5da5 authored tarafından Barry Warsaw's avatar Barry Warsaw

dict_get(): New method for item access with different semantics than

__getitem__().  This method never raises an exception; if the key is
not in the dictionary, the second (optional) argument is returned.  If
the second argument is not provided and the key is missing, None is
returned.

mapp_methods: added "get" method.
üst 596db316
...@@ -952,6 +952,43 @@ dict_has_key(mp, args) ...@@ -952,6 +952,43 @@ dict_has_key(mp, args)
return PyInt_FromLong(ok); return PyInt_FromLong(ok);
} }
static PyObject *
dict_get(mp, args)
register dictobject *mp;
PyObject *args;
{
PyObject *key;
PyObject *failobj = NULL;
PyObject *val = NULL;
long hash;
if (mp->ma_table == NULL)
goto finally;
if (!PyArg_ParseTuple(args, "O|O", &key, &failobj))
return NULL;
if (failobj == NULL)
failobj = Py_None;
#ifdef CACHE_HASH
if (!PyString_Check(key) ||
(hash = ((PyStringObject *) key)->ob_shash) == -1)
#endif
{
hash = PyObject_Hash(key);
if (hash == -1)
return NULL;
}
val = lookdict(mp, key, hash)->me_value;
finally:
if (val == NULL)
val = failobj;
Py_INCREF(val);
return val;
}
static PyObject * static PyObject *
dict_clear(mp, args) dict_clear(mp, args)
register dictobject *mp; register dictobject *mp;
...@@ -972,6 +1009,7 @@ static PyMethodDef mapp_methods[] = { ...@@ -972,6 +1009,7 @@ static PyMethodDef mapp_methods[] = {
{"update", (PyCFunction)dict_update}, {"update", (PyCFunction)dict_update},
{"clear", (PyCFunction)dict_clear}, {"clear", (PyCFunction)dict_clear},
{"copy", (PyCFunction)dict_copy}, {"copy", (PyCFunction)dict_copy},
{"get", (PyCFunction)dict_get, 1},
{NULL, NULL} /* sentinel */ {NULL, NULL} /* sentinel */
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment