[pyar] [video] En Python tenemos nombres, no variables.
Roberto Alsina
ralsina en netmanagers.com.ar
Mie Jun 4 17:57:29 ART 2014
On 04/06/14 17:28, Claudio Freire wrote:
> 2014-06-04 17:06 GMT-03:00 Roberto Alsina <ralsina en netmanagers.com.ar>:
>> On 04/06/14 16:59, Claudio Freire wrote:
>>> 2014-06-04 16:54 GMT-03:00 Daniel Moisset <dmoisset en machinalis.com>:
>>>> y depende como definis "todo". los bloques de código (por ej el cuerpo
>>>> de
>>>> un if) no son objetos, cosa que en ruby por ejemplo si
>>>
>>> El cuerpo de un if no está diferenciado del resto de las funciones,
>>> pero el código de la función sí es un objeto. Un CodeObject.
>>>
>>> Y podés extraer el cuerpo del if si querés y construir un CodeObject con
>>> eso.
>>>
>>> Así que diría que sí todo es un objeto.
>>
>> No porque el CodeObject no va a tener el scope correcto. CREO. O sea,
>> mostrame :-)
>
>>>> def f(x):
> ... if x > 3:
> ... x *= 2
> ... return x
> ...
>>>> import dis
>>>> dis.dis(f)
> 2 0 LOAD_FAST 0 (x)
> 3 LOAD_CONST 1 (3)
> 6 COMPARE_OP 4 (>)
> 9 POP_JUMP_IF_FALSE 25
>
> 3 12 LOAD_FAST 0 (x)
> 15 LOAD_CONST 2 (2)
> 18 INPLACE_MULTIPLY
> 19 STORE_FAST 0 (x)
> 22 JUMP_FORWARD 0 (to 25)
>
> 4 >> 25 LOAD_FAST 0 (x)
> 28 RETURN_VALUE
>>>> import types
>>>> help(types.CodeType)
>>>> func_code = f.func_code
>>>> if_code = types.CodeType(func_code.co_argcount, func_code.co_nlocals, func_code.co_stacksize, func_code.co_flags, func_code.co_code[12:25], func_code.co_consts, func_code.co_names, func_code.co_varnames, func_code.co_filename, func_code.co_name, func_code.co_firstlineno, func_code.co_lnotab[2:4], func_code.co_freevars, func_code.co_cellvars)
>>>> dis.dis(if_code)
> 1 0 LOAD_FAST 0 (x)
> 3 LOAD_CONST 2 (2)
> 6 INPLACE_MULTIPLY
> 7 STORE_FAST 0 (x)
> 10 JUMP_FORWARD 0 (to 13)
> ______________________________________________
No creo que "puedo crear una función con el mísmo código que está en el
if y sacar el codeobject de esa función" sea lo mismo que decir "el
codigo adentro de un if es un objeto".
More information about the pyar
mailing list