[pyar] [video] En Python tenemos nombres, no variables.

Claudio Freire klaussfreire en gmail.com
Mie Jun 4 17:28:48 ART 2014


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)


More information about the pyar mailing list