Articles of python internals

Lista de búsqueda más rápido que la tupla?

En el pasado, cuando he necesitado búsquedas de tipo matricial en un circuito cerrado, por lo general uso tuplas, ya que parecen tener un rendimiento extremadamente alto (cerca de usar solo n-número de variables). Sin embargo, decidí cuestionar ese supuesto hoy y encontré algunos resultados sorprendentes: In [102]: l = range(1000) In [103]: t = […]

¿Se puede definir __setattr __ () en una clase con __slots__?

Digamos que tengo una clase que define __slots__ : class Foo(object): __slots__ = [‘x’] def __init__(self, x=1): self.x = x # will the following work? def __setattr__(self, key, value): if key == ‘x’: object.__setattr__(self, name, -value) # Haha – let’s set to minus x ¿Puedo definir __setattr__() para ello? Como Foo no tiene __dict__ , […]

Objeto personalizado en el lugar que desempaqueta diferentes comportamientos con __getitem__ python 3.5 vs python 3.6

una pregunta de seguimiento sobre esta pregunta : corrí el siguiente código en python 3.5 y python 3.6, con resultados muy diferentes: class Container: KEYS = (‘a’, ‘b’, ‘c’) def __init__(self, a=None, b=None, c=None): self.a = a self.b = b self.c = c def keys(self): return Container.KEYS def __getitem__(self, key): if key not in Container.KEYS: […]

mutabilidad global () vs locals ()

En Python, globals() devuelve una representación de la tabla de símbolos global, mientras que locals() devuelve una representación del estado local. Mientras que ambos devuelven un diccionario, los cambios a globals() se efectúan en la tabla de símbolos global, mientras que los cambios a locals() no tienen efecto. ¿Por qué es este el caso?

¿Cómo asigna Python los valores después del operador de asignación ?

Está bien, una pregunta muy tonta, estoy seguro. Pero, ¿cómo Python asigna valor a las variables? Digamos que hay una variable a y se le asigna el valor a=2 . Entonces, python asigna una ubicación de memoria a la variable y a ahora apunta a la ubicación de memoria que contiene el valor 2 . […]

Comportamiento inesperado de itertools.groupby

Este es el comportamiento observado: In [4]: x = itertools.groupby(range(10), lambda x: True) In [5]: y = next(x) In [6]: next(x) ————————————————————————— StopIteration Traceback (most recent call last) in () —-> 1 next(x) StopIteration: In [7]: y Out[7]: (True, ) In [8]: list(y[1]) Out[8]: [9] La salida esperada de la list(y[1]) es [0,1,2,3,4,5,6,7,8,9] ¿Que está […]

¿Dónde tiene sus valores una lista de Python?

Desde la perspectiva de la introspección, donde los valores de lista se encuentran en el objeto de clase. Si la lista de objetos es de clase en python: >>> a = [‘one’, ‘two’] >>> type(a) Así que se almacena en algún lugar de la clase, pero ¿dónde? Por ejemplo: si definimos una clase con valores: […]

python 2 vs python 3 rendimiento de random, particularmente `random.sample` y` random.shuffle`

El problema del rendimiento del módulo de python random, y en particular, random.sample y random.shuffle surgió en esta pregunta . En mi computadora, obtengo los siguientes resultados: > python -m timeit -s ‘import random’ ‘random.randint(0,1000)’ 1000000 loops, best of 3: 1.07 usec per loop > python3 -m timeit -s ‘import random’ ‘random.randint(0,1000)’ 1000000 loops, best […]

¿Por qué una definición de clase siempre produce el mismo código de bytes?

Di que lo hago #!/usr/bin/env python # encoding: utf-8 class A(object): pass Ahora lo desmonto: python -m dis test0.py 4 0 LOAD_CONST 0 (‘A’) 3 LOAD_NAME 0 (object) 6 BUILD_TUPLE 1 9 LOAD_CONST 1 () 12 MAKE_FUNCTION 0 15 CALL_FUNCTION 0 18 BUILD_CLASS 19 STORE_NAME 1 (A) 22 LOAD_CONST 2 (None) 25 RETURN_VALUE Ahora agrego […]

Complejidad de len () con respecto a conjuntos y listas

La complejidad de len() con respecto a conjuntos y listas es igualmente O (1). ¿Por qué lleva más tiempo procesar conjuntos? ~$ python -m timeit “a=[1,2,3,4,5,6,7,8,9,10];len(a)” 10000000 loops, best of 3: 0.168 usec per loop ~$ python -m timeit “a={1,2,3,4,5,6,7,8,9,10};len(a)” 1000000 loops, best of 3: 0.375 usec per loop ¿Está relacionado con el índice de […]