mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Use FASTCALL for __import__ (GH-31752)
This commit is contained in:
parent
f84c867dd7
commit
6f3b9e2243
2 changed files with 111 additions and 29 deletions
|
@ -243,38 +243,41 @@ PyDoc_STRVAR(build_class_doc,
|
|||
\n\
|
||||
Internal helper function used by the class statement.");
|
||||
|
||||
static PyObject *
|
||||
builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
|
||||
{
|
||||
static char *kwlist[] = {"name", "globals", "locals", "fromlist",
|
||||
"level", 0};
|
||||
PyObject *name, *globals = NULL, *locals = NULL, *fromlist = NULL;
|
||||
int level = 0;
|
||||
/*[clinic input]
|
||||
__import__ as builtin___import__
|
||||
|
||||
if (!PyArg_ParseTupleAndKeywords(args, kwds, "U|OOOi:__import__",
|
||||
kwlist, &name, &globals, &locals, &fromlist, &level))
|
||||
return NULL;
|
||||
name: object
|
||||
globals: object(c_default="NULL") = None
|
||||
locals: object(c_default="NULL") = None
|
||||
fromlist: object(c_default="NULL") = ()
|
||||
level: int = 0
|
||||
|
||||
Import a module.
|
||||
|
||||
Because this function is meant for use by the Python
|
||||
interpreter and not for general use, it is better to use
|
||||
importlib.import_module() to programmatically import a module.
|
||||
|
||||
The globals argument is only used to determine the context;
|
||||
they are not modified. The locals argument is unused. The fromlist
|
||||
should be a list of names to emulate ``from name import ...'', or an
|
||||
empty list to emulate ``import name''.
|
||||
When importing a module from a package, note that __import__('A.B', ...)
|
||||
returns package A when fromlist is empty, but its submodule B when
|
||||
fromlist is not empty. The level argument is used to determine whether to
|
||||
perform absolute or relative imports: 0 is absolute, while a positive number
|
||||
is the number of parent directories to search relative to the current module.
|
||||
[clinic start generated code]*/
|
||||
|
||||
static PyObject *
|
||||
builtin___import___impl(PyObject *module, PyObject *name, PyObject *globals,
|
||||
PyObject *locals, PyObject *fromlist, int level)
|
||||
/*[clinic end generated code: output=4febeda88a0cd245 input=35e9a6460412430f]*/
|
||||
{
|
||||
return PyImport_ImportModuleLevelObject(name, globals, locals,
|
||||
fromlist, level);
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(import_doc,
|
||||
"__import__(name, globals=None, locals=None, fromlist=(), level=0) -> module\n\
|
||||
\n\
|
||||
Import a module. Because this function is meant for use by the Python\n\
|
||||
interpreter and not for general use, it is better to use\n\
|
||||
importlib.import_module() to programmatically import a module.\n\
|
||||
\n\
|
||||
The globals argument is only used to determine the context;\n\
|
||||
they are not modified. The locals argument is unused. The fromlist\n\
|
||||
should be a list of names to emulate ``from name import ...'', or an\n\
|
||||
empty list to emulate ``import name''.\n\
|
||||
When importing a module from a package, note that __import__('A.B', ...)\n\
|
||||
returns package A when fromlist is empty, but its submodule B when\n\
|
||||
fromlist is not empty. The level argument is used to determine whether to\n\
|
||||
perform absolute or relative imports: 0 is absolute, while a positive number\n\
|
||||
is the number of parent directories to search relative to the current module.");
|
||||
|
||||
|
||||
/*[clinic input]
|
||||
abs as builtin_abs
|
||||
|
@ -2903,7 +2906,7 @@ PyTypeObject PyZip_Type = {
|
|||
static PyMethodDef builtin_methods[] = {
|
||||
{"__build_class__", (PyCFunction)(void(*)(void))builtin___build_class__,
|
||||
METH_FASTCALL | METH_KEYWORDS, build_class_doc},
|
||||
{"__import__", (PyCFunction)(void(*)(void))builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
|
||||
BUILTIN___IMPORT___METHODDEF
|
||||
BUILTIN_ABS_METHODDEF
|
||||
BUILTIN_ALL_METHODDEF
|
||||
BUILTIN_ANY_METHODDEF
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue