Añadir la función embebida "millones"a Python

El informe es una versión resumida.
Los detalles técnicos comienzan con Añadir a la función Python "millones" - blog narupo.

A ñadir un elemento de función incrustado


Hola, soy narupo.
Si utiliza Python durante mucho tiempo, sólo se cansará de las funciones embebidas comunes.
Así que decidimos a ñadir una nueva función embebida "millones"a Python.
La programación diaria puede ser aún más emocionante si se a ñade un millón de funciones a Python.

¿Qué es un millonario?


"Millionaire"es uno de los mantras utilizados en la serie japonesa RPG "Brave Fighting Dragons".
El hombre que leyó el mantra se explotó a sí mismo, destruyendo su entorno y dejándolo sin aliento.

Obtener cpython


Python tiene una amplia variedad de encarnaciones, incluyendo CPython y Jython, esta transformación es la encarnación más popular de CPython.
  • Python / cpython: el lenguaje de programación de Python
  • Clonar el proyecto cpython usando Git.
    $ git clone https://github.com/python/cpython.git
    
    Luego está configure, make para establecer Python.
    El entorno utiliza el wsl de Windows 10. Ubuntu 16. ¿04, verdad? Por lo tanto, la Python generada es python.exe.
    $ cd cpython
    $ ./configure
    $ make
    $ python.exe
    

    Transformar cpython


    Al a ñadir una función de millón, me gustaría referirme a la función embebida existente print.
    La función embebida print se define como la función Python\bltinmodule.c de builtin_print.
    static PyObject *
    builtin_print(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
    {
        ...
    }
    
    Esta función está registrada en el archivo builtin_methods.builtin_methods es una disposición del tipo PyMethodDef.
    static PyMethodDef builtin_methods[] = {
        ...
        {"print",           (PyCFunction)(void(*)(void))builtin_print,      METH_FASTCALL | METH_KEYWORDS, print_doc},
        ...
    };
    

    Definir una función de millón


    Pulse ↓ en Python\bltinmodule.c para definir una función de millón.
    static PyObject *
    builtin_megante(PyObject *self, PyObject *arg)
    {
        const char *msg = PyUnicode_AsUTF8(arg);
        if (!msg) {
            Py_RETURN_NONE;
        }
    
        fflush(stdout);
        fprintf(stderr, "%s\n", msg);
        fprintf(stderr, "自爆しました。\n");
        fflush(stderr);
        exit(1);
    
        Py_RETURN_NONE;
    }
    
    El contenido de la información de parámetros de salida como error estándar, "auto - explosión"Y salida.
    Luego, forzar el final del programa.
    También es necesario definir la documentación para esta función de millón.
    PyDoc_STRVAR(megante_doc,
    "megante(message)\n\
    メガンテ(message)\n\
    \n\
    messageを叫んでから自爆します。\n\
    プログラムは強制終了されます。");
    
    Por último, la función mega y builtin_methods se registran en megante_doc de acuerdo con ↓.
    El "millón"japonés también se puede llamar.
    static PyMethodDef builtin_methods[] = {
        ...
        {"megante",          (PyCFunction)(void(*)(void))builtin_megante, METH_O, megante_doc},
        {"メガンテ",           (PyCFunction)(void(*)(void))builtin_megante, METH_O, megante_doc},
        ...
    };
    

    Paisaje de acción


    Función embebida "millones"de escenas de acción.

    Observaciones finales


    Las funciones embebidas se pueden añadir fácilmente en Python.
    Sin embargo, esta función embebida en megabytes no es útil.
    También aproveche esta oportunidad para añadir funciones embebidas originales a Python para sorprender a la gente a su alrededor.
    Eso es narupo.

    Informes conexos

  • Transformar el intérprete de Python en el intérprete de Shaw - qita