[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