[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