2016-12-15 11 views
2

Мое понимание изменяемости и неизменности в Python есть, скажем, у нас есть переменная foo, если существует способ, чтобы изменить как foo выглядит (с помощью print), не изменяя его id, то foo изменчиво. В противном случае это непреложно.Как показать, что функция изменена в Python?


Например, вы можете сделать это для list,

foo = [1, 2, 3] 
print(foo, id(foo)) 
foo[0] = 100 
print(foo, id(foo)) 

но никак не для int.


Но как насчет функции? Прежде всего, правильны ли мои определения изменчивости и неизменности? Если да, можете ли вы найти способ изменить функцию без изменения ее id, чтобы доказать, что она изменчива?

ответ

1

Вы можете явно изменить код функции, не затрагивая его идентификатор (здесь код, используя Python 2.7):

>>> def f(): 
...  print "f" 
... 
>>> def g(): 
...  print "g" 
... 
>>> id(f) 
140305904690672 
>>> f() 
f 
>>> f.func_code = g.func_code 
>>> id(f) 
140305904690672 
>>> f() 
g