Articles of cpython

¿Por qué y dónde python internó cadenas al ejecutar `a = ‘python’ ‘mientras el código fuente no lo muestra?

Estoy tratando de aprender el mecanismo interno de python usando en la implementación del objeto string. Pero tanto en PyObject *PyString_FromString(const char *str) como en PyObject *PyString_FromStringAndSize(const char *str, Py_ssize_t size) cadenas internadas de python solo cuando su tamaño es 0 o 1. PyObject * PyString_FromString(const char *str) { fprintf(stdout, “creating %s\n”, str);————[1] //… //creating… […]

Rendimiento de coincidencia de cadenas: gcc versus CPython

Mientras investigaba las compensaciones de rendimiento entre Python y C ++, he ideado un pequeño ejemplo, que se centra principalmente en una concordancia de subcadenas tontas. Aquí está el C ++ relevante: using std::string; std::vector matches; std::copy_if(patterns.cbegin(), patterns.cend(), back_inserter(matches), [&fileContents] (const string &pattern) { return fileContents.find(pattern) != string::npos; } ); Lo anterior está construido con […]

RuntimeError: sys.stdout perdido

Estaba intentando depurar un problema con abc.ABCMeta , en particular una verificación de subclases que no funcionó como se esperaba y quería comenzar simplemente agregando una print al método __subclasscheck__ (Sé que hay mejores formas de depurar el código, pero pretender por el bien de esta pregunta que no hay alternativa). Sin embargo, al iniciar […]

¿Qué es el protocolo de secuencia de Python?

Python hace mucho con métodos mágicos y la mayoría de estos son parte de algún protocolo. Estoy familiarizado con el “protocolo iterador” y el “protocolo numérico”, pero recientemente tropecé con el término “protocolo de secuencia” . Pero incluso después de algunas investigaciones no estoy exactamente seguro de cuál es el “protocolo de secuencia”. Por ejemplo, […]

¿Por qué no puedo acceder a las incorporaciones si utilizo un dictado personalizado como funciones globales?

Tengo una subclase de dict como esta: class MyDict(dict): def __getitem__(self, name): return globals()[name] Esta clase se puede usar con eval y exec sin problemas: >>> eval(‘bytearray’, MyDict()) >>> exec(‘print(bytearray)’, MyDict()) Pero si hago una instancia de un objeto de función con el constructor types.FunctionType , la función no puede acceder a ningún componente incorporado: […]

deque.popleft () y list.pop (0). ¿Hay diferencia de rendimiento?

deque.popleft() y list.pop(0) parecen devolver el mismo resultado. ¿Hay alguna diferencia de rendimiento entre ellos y por qué?

¿Puede recuperarse de la reasignación de __builtins__ en python?

Si abro el modo interactivo y escribo: __builtins__ = 0 # breaks everything ¿He roto completamente la sesión? Si es así, ¿qué sucede detrás de escena para asignar __builtins__ al módulo integrado que el intérprete no puede manejar? Si no, ¿cómo puedo recuperarme de esto? Solo algunos de mis propios bashs de arreglarlo: Cualquier bash […]

Ofuscando el código de bytes de Python a través de la mutación del intérprete

En realidad, Dropbox lo hizo muy bien, fueron capaces de asegurar su aplicación de escritorio hecha en Python; Investigué mucho esto, pero no hay una mejor solución mejor que la ofuscación, que no es una forma segura de hacerlo, y terminarás viendo tu código cargado en algún lugar. Escuché una sesión hecha por Giovanni Bajo […]

¿Por qué el inicio de la cuerda es más lento que en?

Sorprendentemente, me parece que startswith es más lento que in : In [10]: s=”ABCD”*10 In [11]: %timeit s.startswith(“XYZ”) 1000000 loops, best of 3: 307 ns per loop In [12]: %timeit “XYZ” in s 10000000 loops, best of 3: 81.7 ns per loop Como todos sabemos, la operación in funcionamiento necesita buscar en toda la cadena […]

¿Por qué se implementa deque como una lista enlazada en lugar de una matriz circular?

CPython deque se implementa como una lista doblemente enlazada de “bloques” de tamaño de 64 elementos (arrays). Todos los bloques están llenos, excepto los que se encuentran al final de la lista enlazada. IIUC, los bloques se liberan cuando un pop / popleft elimina el último elemento del bloque; se asignan cuando append / appendleft […]