Ipython: рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдПрдореНрдмреЗрдбреЗрдб ipython рдЦреЛрд▓ рдХреЗ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 10 рдордИ 2010  ┬╖  39рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: ipython/ipython

рдореВрд▓ рд▓реЙрдиреНрдЪрдкреИрдб рдмрдЧ 399627: https://bugs.launchpad.net/ipython/+bug/399627
рдЗрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рд░рд┐рдкреЛрд░реНрдЯ рдХреА рдЧрдИ: h-fangohr (рд╣рдВрд╕ рдлреИрдВрдЧреЛрд╣реНрд░)ред

рддреНрд░реБрдЯрд┐ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

  1. рдкрд╛рдпрдерди рд╢реБрд░реВ рдХрд░реЗрдВ, рдФрд░ рдПрдореНрдмреЗрдбреЗрдб ipython рд╕рддреНрд░ рд╢реБрд░реВ рдХрд░реЗрдВред рдЖрдИрдкреАрдереЙрди рдХреЗ рдореИрдиреБрдЕрд▓ рдХреЗ рдмрд╛рдж, рд╣рдо рдХрд░рддреЗ рд╣реИрдВ
fangohr<strong i="11">@eta</strong>:~$ python
Python 2.4.3 (#1, Jun  8 2009, 14:09:06) 
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from IPython.Shell import IPShellEmbed
>>> ipshell=IPShellEmbed()
>>> ipshell()

рдЕрднреА-рдЕрднреА рд╢реБрд░реВ рдХрд┐рдП рдЧрдП рдЖрдИрдкреАрдереЙрди рд╕рддреНрд░ рдХреЗ рднреАрддрд░, рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХрднреА-рдХрднреА рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред рджреЛ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ:

рдЙрджрд╛рд╣рд░рдг 1:

In [1]: a=1

In [2]: def f(x):
   ...:     return a*x
   ...: 

In [3]: f(2)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)

/home/fangohr/<ipython console> 

/home/fangohr/<ipython console> in f(x)

NameError: global name 'a' is not defined

рдЙрджрд╛рд╣рд░рдг 2:

In [4]: b=1

In [5]: (lambda :b)()
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)

/home/fangohr/<ipython console> 

/home/fangohr/<ipython console> in <lambda>()

NameError: global name 'b' is not defined

рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ рдЕрдЧрд░ "b = 1; (lambda: b) ()" рдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ ipython рдХреЗ "рд░рди" рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ рдЕрдЧрд░ "рдмреА = 1; (рд▓рдВрдмреЛрджрд░: рдмреА) ()" ipython рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдЖрддреА рд╣реИ рдпрджрд┐ рдПрдХ рдПрдореНрдмреЗрдбреЗрдб IPython рд╢реЗрд▓ рдХреЛ рдкрд╛рдпрдерди рдкреНрд░реЙрдореНрдкреНрдЯ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХрдорд╛рдВрдб рдХреЛ рдкреНрд░реЙрдореНрдкреНрдЯ рдкрд░ рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВ рдПрдХ рд╣реА рддреНрд░реБрдЯрд┐ рдЬрдм ipython-0.9.1 (python2.4 рдХреЗ рд╕рд╛рде) рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред

рдмрдЧ рдХреЛ рдУрд▓рд┐рд╡рд┐рдпрд░ рдХреНрд▓реЗрди рдиреЗ nmag рдЯреАрдо (http://nmag.soton.ac.uk) рдХреЛ рд░рд┐рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдерд╛ред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЬреИрд╕рд╛ рдХрд┐ https://github.com/inducer/pudb/issues/103 рдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдХ рдПрдореНрдмреЗрдбреЗрдб рд╢реЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди рд╣реИ: globals().update(locals()) (рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдХреЗрд╡рд▓)ред

рд╕рднреА 39 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

[рдПрд▓рдкреА рдЯрд┐рдкреНрдкрдгреА рез: реирежрезреж-режрек-реирел реирей: рейрем: рейрем.рем66рез 1рем + режреж: режреж: режреж рдкрд░ рдлрд░реНрдирд╛рдВрдбреЛ рдкреЗрд░реЗрдЬрд╝

рдареАрдХ рд╣реИ, рдореИрдВ рд╕рдорд╕реНрдпрд╛ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ (рдЯреНрд░рдВрдХ рдкрд░ рднреА), рд▓реЗрдХрд┐рди рдпрд╣ рдХрдард┐рди рд╣реИред рдореИрдВ рдЕрднреА рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реВрдВ рдХрд┐ рдЗрд╕ рдмрдЧ рдХреА рдкреБрд╖реНрдЯрд┐ рд╣реЛ рдЬрд╛рдП рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдЯреНрд░реИрдХ рдХрд░рддреЗ рд░рд╣реЗрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдПрдореНрдмреЗрдбреЗрдб рдЧреЛрд▓реЗ рдореЗрдВ, рд╣рдо рдЖрд╕рдкрд╛рд╕ рдХреЗ рджрд╛рдпрд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реИрд╢реНрд╡рд┐рдХ рдирд╛рдо рд╕реНрдерд╛рди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ (рдпрд╣ рдПрдХ рдПрдореНрдмреЗрдбреЗрдб рд╢реЗрд▓ рдХрд╛ рдмрд┐рдВрджреБ рд╣реИ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдЖрд╕-рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИ)ред рд▓реЗрдХрд┐рди рдпрд╣ рддрдм рдЕрдЬрдЧрд░ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ рдЬрдм рдиреЗрд╕реНрдЯреЗрдб рдЪреАрдЬреЛрдВ (рдЬреИрд╕реЗ рд╕реНрдерд╛рдиреАрдп рдХрд╛рд░реНрдпреЛрдВ) рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ ipython рдЗрдВрдЯрд░реЗрдХреНрдЯрд┐рд╡ рдиреЗрдорд╕реНрдкреЗрд╕ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдПрдореНрдмреЗрдбреЗрдб рд╢реЗрд▓ рдХрд╛ рдореЗрдирд▓реЛрдк () рд╡рд┐рдзрд┐ рджреЗрдЦреЗрдВред

рдореБрдЭреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд╕реЛрдЪрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдХрд┐рд╕реА рднреА рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдмрд╣реБрдд рд╕реНрд╡рд╛рдЧрдд рд╣реИред

рд▓реЙрдиреНрдЪрдкреИрдб рдкрд░ ...

рдЪреЗрдпрд░рдореИрди рдиреЗ 20 рдШрдВрдЯреЗ рдкрд╣рд▓реЗ рд▓рд┐рдЦрд╛ рдерд╛:

рдореИрдВ рднреАред рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдмрдЧ рдЬрдирд░реЗрдЯрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рднреА рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред

рдЯреНрд░рдВрдХ рдореЗрдВ рд╕рдорддреБрд▓реНрдп рдШрдЯрдХ IPython.frontend.terminal.InteractiveShellEmbed рд▓рдЧрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЬрд╛рд╣рд┐рд░ рддреМрд░ рдкрд░ рдЬреНрдпрд╛рджрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕рдХрд╛ рднрд╡рд┐рд╖реНрдп рдХреНрдпрд╛ рд╣реИ?

рдХреНрдпрд╛ рдпрд╣ # 136 рдЬреИрд╕рд╛ рд╣реА рдореБрджреНрджрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

рдпрд╣ рдЕрдм рдареАрдХ рд╣реЛ рдЧрдпрд╛ рд╣реИ:

amirbar[ipython]> python
Python 2.7.2+ (default, Oct  4 2011, 20:06:09) 
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from IPython import embed
>>> embed()
Python 2.7.2+ (default, Oct  4 2011, 20:06:09) 
Type "copyright", "credits" or "license" for more information.

IPython 0.12.dev -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: a = 1

In [2]: def f(x):
   ...:     return a*x
   ...: 

In [3]: f(3)
Out[3]: 3

In [4]: b = 1

In [5]: (lambda : b)()
Out[5]: 1

In [6]: 

рдХреНрдпрд╛ рдХреЛрдИ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдФрд░ рд╕рдордЭрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдХреНрдпрд╛ рддрдп рд╣реБрдЖ? рдореИрдВ рдЕрднреА рднреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЬрдм рдореИрдВ рдПрдХ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдкрд░рдд рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реВрдВ, рдФрд░ рдХреЗрд╡рд▓ рдЕрдЧрд░ рдореИрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ, рддреЛ рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдирд╣реАрдВред

OSX 10.6.8 рдкрд░ рдЕрдЬрдЧрд░ 2.7.2, ipython 0.11 рдФрд░ 0.12 рджреЛрдиреЛрдВ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд▓рд┐рдП 0.12 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)

рдпрд╣ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬреЛ рдПрдХ рдкреНрд░рдореБрдЦ IPython рд╢реЗрд▓ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ (рдкреНрд░рдореБрдЦрддрд╛ рд╕реЗ) рд╣реИред

testembed.py

from IPython import embed

def hi():
    embed()

if __name__ == '__main__':
    #embed()
    hi()

python testembed.py рд╕рд╛рде рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдЗрд╕реЗ рдЪрд▓рд╛рдПрдВ рдФрд░ рдЗрд╕ рд╕рддреНрд░ рдХреЛ рджреЗрдЦреЗрдВ:

Python 2.7.2 (default, Aug 29 2011, 12:33:18) 
Type "copyright", "credits" or "license" for more information.

IPython 0.12 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: import time

In [2]: def tim():
   ...:     print time.time()
   ...:     

In [3]: tim()
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
[snip] in <module>()
----> 1 tim()

[snip] in tim()
      1 def tim():
----> 2     print time.time()
      3 

NameError: global name 'time' is not defined

In [4]: 

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреЙрд▓ рдХреЛ hi() рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ embed() рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ:

Python 2.7.2 (default, Aug 29 2011, 12:33:18) 
Type "copyright", "credits" or "license" for more information.

IPython 0.12 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: import time

In [2]: def tim():
    print time.time()
   ...:     

In [3]: tim()
1328639444.29

In [4]: 

рдЗрдзрд░-рдЙрдзрд░ рддрд╛рдХрдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдпрд╣рд╛рдБ рдФрд░ рдЗрд╕ рдмреНрд▓реЙрдХ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП stack_depth рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рд╣реИ: https://github.com/ipython/ipython/blob/master/IPython/frontend/nmminal/embed.py # L185

рд╡рд┐рдЪрд╛рд░?

рдпрд╣ рдХреБрдЫ рд╣рдж рддрдХ рдЬрдЯрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдкрд╛рдпрдерди рдореЗрдВ рд╣реА рдкреНрд░рддрд┐рдмрдВрдз рд╣реИред

рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рджрд┐рдЦрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЕрд╕рдлрд▓ рдорд╛рдорд▓реЗ рдореЗрдВ, time рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ embed рдХреЛ hi рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╣рд╛ рд╣реИ, рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдмрдирд╛рдП рдЧрдП рдирдП рдЪрд░ рд╕реНрдерд╛рдиреАрдп рд╣реИрдВ рд╕рдорд╛рд░реЛрд╣ред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, tim() рдХреЛ рд╕рдордп рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдмрдВрдж рдХрд░рддреЗ рд╣реБрдП, рдПрдХ рдХреНрд▓реЛрдЬрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреНрд▓реЛрдЬрд░ рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░рддреЗ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ рдЬрдм рдпреБрдХреНрдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореИрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдмрдВрдж рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ:

def outer():
    import time
    exec("def inner(): return time.time()")
    return inner

outer()()

рдпрд╣ рд╕рдВрднрд╡рддрдГ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдиреЗрд╕реНрдЯреЗрдб рд╕реНрдХреЛрдкреНрд╕ рдХреЛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рджреЗрд░ рд╕реЗ рдкрд╛рдпрдерди рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ (рд╡реЗ 2.1 рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдХреЗ рдЖрдпрд╛рдд рдереЗ, рдФрд░ рд╣рдореЗрд╢рд╛ 2.2 рдореЗрдВ)ред

рдареАрдХ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдбрдВрдкрд┐рдВрдЧ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореИрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдХреНрдпрд╛ рд▓рд┐рдЦреВрдВрдЧрд╛ рдФрд░ рдлрд┐рд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╡рд╛рдкрд╕ рдкрдврд╝рдирд╛ред рд╕рдВрднрд╡рдд: рд╣рдо рдЬреЛ рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж, btwред

рдпрд╣рд╛рдБ рдкрд░ рдкрд░реЗрд╢рд╛рди рдХрд░рддреЗ рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рдЗрдВрдЯрд░реЗрдХреНрдЯрд┐рд╡ рд╕рддреНрд░реЛрдВ рдХреЛ рдмрд╣реБрдд рд╣реА рднрджреНрджрд╛ рд▓рдЧрддрд╛ рд╣реИ:

рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЕрдЬрдЧрд░:

>>> d={'one':1, 'two':2}
>>> getkeys=lambda: d.keys()
>>> getkeys()
['two', 'one']

рдирд┐рдпрдорд┐рдд рдЖрдИрдкреАрдереЙрди:

In [1]: d={'one':1, 'two':2}

In [2]: getkeys=lambda: d.keys()

In [3]: getkeys()
Out[3]: ['two', 'one']

рдПрдВрдмреЗрдбреЗрдб IPython:

>>> from IPython import embed
>>> embed()
Python 2.7.2 (default, Aug 29 2011, 12:33:18) 
Type "copyright", "credits" or "license" for more information.

IPython 0.12.dev -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: d={'one':1, 'two':2}

In [2]: getkeys=lambda: d.keys()

In [3]: getkeys()
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
/Users/asadeveloper/Documents/Dev/code/pyon/bin/python in <module>()
----> 1 getkeys()

/Users/asadeveloper/Documents/Dev/code/pyon/bin/python in <lambda>()
----> 1 getkeys=lambda: d.keys()

NameError: global name 'd' is not defined

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЕрдЬрдЧрд░ / рдЖрдИрдкрд┐рдерди рдореЗрдВ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдмрдВрдж рдХреНрдпреЛрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдПрдореНрдмреЗрдбреЗрдб рд╕рдВрд╕реНрдХрд░рдг рдирд╣реАрдВред

рдкрд╛рдпрдерди рд╕реНрдХреВрдкрд┐рдВрдЧ рдХреА рд╡рд┐рд╖рдорддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛, рдорд╛рдирдХ рдкрд╛рдпрдерди / рдЖрдИрдкреАрдереЙрди рдореЗрдВ, рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдХреНрд▓реЛрдЬрд░ рдирд╣реАрдВ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред d рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рд╣реИ, рдФрд░ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рд╕реЗ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рдирд┐рдпрдоред рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рд╡реИрд╢реНрд╡рд┐рдХ рдирд╛рдорд╕реНрдерд╛рди рдХрд╛ рд╕рдВрджрд░реНрдн рд░рдЦрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЗрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ( getkeys.func_globals ), рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╡рд╣рд╛рдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рд╕реА рднреА рдЪрд░ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬрдм рдЖрдк рдПрдХ рдмрдВрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкрд╛рдпрдерди рдкреНрд░рддреНрдпреЗрдХ рдЪрд░ рдХреЗ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдпрд╣ рдмрдВрдж рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЖрдВрддрд░рд┐рдХ рдФрд░ рдмрд╛рд╣рд░реА рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ:

In [8]: def outer():
    a = 1
    def inner():
        return a
    return inner
   ...: 

In [9]: f = outer()

In [10]: f
Out[10]: <function __main__.inner>

In [11]: f.func_closure
Out[11]: (<cell at 0x9f5e344: int object at 0x9a830b0>,)

рдпрд╣ рд╕рдВрднрд╡рддрдГ рдореЗрдореЛрд░реА рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдпрджрд┐ рдХреНрд▓реЛрдЬрд░ рдХреЛ рд╕реНрдерд╛рдиреАрдп рд╕реНрдХреЛрдк рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЗрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЙрд╕ рд╕реНрдХреЛрдк рд╕реЗ рдХреЛрдИ рднреА рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рдореБрдХреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдмрдХрд┐ рдХреНрд▓реЛрдЬрд░ рд▓рд╛рдЗрд╡ рдерд╛ред

рдореИрдВ OSX 10.7.3 рдкрд░ рдкрд╛рдпрдерди 2.7.2 рдФрд░ IPython 0.12.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЕрднреА рднреА рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдЬрдм рдореИрдВ Django рдХреЗ ./manage.py shell рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рдЬреЛ IPython.embed() , рддреЛ рд╕рдорд╕реНрдпрд╛ рд╣реЛрддреА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкрд╛рдпрдерди рд╢реЗрд▓ рдореЗрдВ рдпрд╛ рд╕рд░рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рд╕реЗ embed() рдХрд╛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЪрд╛рд▓рд╛рди рдХрд░рдирд╛, рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред

рдРрд╕рд╛ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╣рдо рд╕реАрдзреЗ рдЙрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рд╕рдВрднрд╡рддрдГ рдЧреИрд░-рддреБрдЪреНрдЫ рдЙрдкрдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП embed рд╕реЗ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

@takluyver рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕реАрдзреЗ ipython рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ?

Django рдХреЗ рд▓рд┐рдП IPython рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдЬреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╣ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдо рдЖрд╕рд╛рди рдмрдирд╛рддреЗ рд╣реИрдВред рд╕рдорд╕реНрдпрд╛ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм IPython рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд╛рдиреАрдп рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ рдХрд┐ Django рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд╛рдиреАрдп рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣реА рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ embed() рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИред

рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ Django рдореЗрдВ рдХреЛрдб рд╣реИ:
https://code.djangoproject.com/browser/django/trunk/django/core/management/commands/shell.py

@takluyver рдЬреЛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ Django рдЯрд┐рдХрдЯ рдЦреЛрд▓ рд░рд╣рд╛ рд╣реВрдВред

@takluyver , рдЕрдм рдЬрдм рд╣рдордиреЗ рдПрдореНрдмреЗрдб_рдХрд╛реЕрд░реНрди рдХрд╛ рд╡рд┐рд▓рдп рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рддреЛ рд╕рднреА рдореБрдЦреНрдп рдЯреБрдХрдбрд╝реЗ рдЬрдЧрд╣ рдореЗрдВ рд╣реИрдВ, рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рд╕рд╛рдл рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдФрд░ рдареАрдХ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

рдореИрдВ рдЗрд╕ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реВрдВрдЧрд╛ рдХрд┐ рдХреМрди рд╕рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рдореИрдВ рдЕрднреА рднреА рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рдкрд░реЗрд╢рд╛рди рд╣реВрдВред рдореИрдВрдиреЗ рдЗрд╕реЗ рдареАрдХ рд╕реЗ рдХрдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ, рдЬреЛ рдЗрд╕реЗ рдкреИрджрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдореИрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ Ubuntu 12.04 рдкрд░ рд╣реЛрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЕрдиреНрдп рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рд╕рднреА рдирд╡реАрдирддрдо рд░рд┐рд▓реАрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ, рдФрд░ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рднреА рдореИрдВ рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреЛ ipython рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкреЗрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП% cpaste рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрддрд░ рддрдХ рдХреЛрдИ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдпрд╣ рдордХреНрдЦреА рдкрд░ рд▓реЗрдЦрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреБрдЫ рднреА рдЙрдкрдпреЛрдЧреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рд░реВрдк рд╕реЗ рдЕрд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред

рдореИрдВ рдЕрднреА рднреА IPython 0.13 рдХреЗ рд╕рд╛рде рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдЬрдм рдЗрд╕реЗ рдЕрдиреНрдп рдЙрдкрдХрд░рдгреЛрдВ (рдЬреИрд╕реЗ Django рдХреЗ рдбрд┐рдмрдЧрд╕рдХреНрд▓реЗрд╢ рдХрдорд╛рдВрдб) рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдмрд╣реБрдд рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд╣реИ рдХрд┐ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдмреБрдирд┐рдпрд╛рджреА рдХреБрдЫ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдореНрдмреЗрдб () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЧрд▓рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред рдПрдореНрдмреЗрдб () рд╣реИ
рдПрдХ рдЪрд▓ рд░рд╣реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЗрд░рд╛рджрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд╛рдиреАрдп рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ рдирд╛рдорд╕реНрдерд╛рдиред рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЧреЛрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, ipython
рдПрдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдордп рдирд╣реАрдВ рд╣реИ
рдпрд╣ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

Ubuntu рд╣реА рдирд╣реАрдВред рдбреЗрдмрд┐рдпрди рдордЯреНрдард╛ рднреА рджрд┐рдЦрд╛рддрд╛ рд╣реИред

FYI рдХрд░реЗрдВ, рдКрдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ Django рдЯрд┐рдХрдЯ @liokm https://code.djangoproject.com/ticket/18204 рд╣реИ , рдЬреЛ рдЕрдм https://code.djangoproject.com/ticket/17078 рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЯреНрд░рдВрдХ рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ ред рдпрд╣ 1.5 рдореЗрдВ рдЙрддрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ Ipython 0.13.2 рдХреЗ рд╕рд╛рде Ubuntu рдкрд░ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд░рд╣рд╛ рд╣реВрдБ
screenshot from 2013-08-07 18 13 33

@bkvirendra рдЬреЛ рдХрд┐ django 1.6 рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рд▓реЗрдХрд┐рди 1.6 рдЕрднреА рднреА рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реИ!

рд▓реЗрдХрд┐рди 1.6 рдЕрднреА рднреА рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реИ!

рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд╣рдореЗрд╢рд╛ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рдмреАрдЪ рдЕрднреА рднреА рдмрдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдИрдкреАрдереЙрди рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рд╣рдо рдпрд╣рд╛рдВ рдХреБрдЫ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рддрдп рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ IPython рдореЗрдВ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА ipython == 4.2.0 рдореЗрдВ рдмрдиреА рд╣реБрдИ рд╣реИред рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдХреЗ рдиреАрдЪреЗ рдпрд╣ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди ubuntu рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рде рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг:

from ipywidgets import interact, FloatSlider, IntSlider,RadioButtons, Dropdown

@interact(sv1 = radio_1, Scenario = drop_1, sv2 = slider_2)
def update_map(sv1,sv2, Scenario):

рд╕рдорд╕реНрдпрд╛ рдмрдиреА рд╣реБрдИ рд╣реИред рдЖрдИрдкреАрдереЙрди 3.1.0, рдбреЗрдмрд┐рдпрди рд╡реНрд╣реАрдЬрд╝реАред

рдЕрдЧрд░ рдореБрдЭреЗ рд╕рд╣реА рд╕реЗ рдпрд╛рдж рд╣реИ, рддреЛ рдпрд╣ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ (рдпрд╣рд╛рдБ macOS рдкрд░ IPython 5.1.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреБрди: рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛: https://git.io/vPDrJ)ред

(рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореИрдВ рдлрд┐рдХреНрд╕ рдХреЛ рдпрд╛рдж рдХрд░ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдПрдореНрдмреЗрдб рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрдЬрд╛рдп рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдХреА рдЬрд░реВрд░рдд рдХреА рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛)

рдмрд╕ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдХрд┐рд╕реА рдХреЛ рднреА рдорджрдж рдХрд░рддрд╛ рд╣реИ рдореИрдВ рдХреЛрдб рдХреЗ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ

    def fix_embed_globals(N=0):
        # Get the parent frame
        import inspect
        frame_level0 = inspect.currentframe()
        frame_cur = frame_level0
        N = 2  # I may have this value off by one. I rewrote this function to use only standard calls
        strict = False
        for _ix in range(N + 1):
            frame_next = frame_cur.f_back
            if frame_next is None:
                if strict:
                    raise AssertionError('Frame level %r is root' % _ix)
                else:
                    break
            frame_cur = frame_next
        parent_frame = frame_cur
        # Add locals to parent globals
        parent_frame.f_locals.update(parent_frame.f_globals)
        parent_frame.f_globals['_didfixipyglobals'] = True

рдЬрдм рднреА рдореБрдЭреЗ рдирд╛рдо рдореЗрдВ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ рдореИрдВ рдмрд╕ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рдЖрдкрдХреЗ рд╡рд░реНрддрдорд╛рди рдлреНрд░реЗрдо рдореЗрдВ рд╕рднреА рд╕реНрдерд╛рдиреАрдп рд▓реЛрдЧреЛрдВ рдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рд░рдЦрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рд╣реИрдХреА рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ https://github.com/inducer/pudb/issues/103 рдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдХ рдПрдореНрдмреЗрдбреЗрдб рд╢реЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди рд╣реИ: globals().update(locals()) (рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдХреЗрд╡рд▓)ред

рд╣рдореНрдо, рдХреНрдпрд╛ рдЗрд╕ рдмрдЧ рдХрд╛ рдореАрд▓ рдХрд╛ рдкрддреНрдерд░ рдЕрдЧрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рдХрд┐рдпрд╛ рд╣реБрдЖред

рдХреНрдпрд╛ рдпрд╣ рдХрднреА рдареАрдХ рд╣реЛ рдкрд╛рдПрдЧрд╛?

AFAIK, рдХреБрдЫ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдХреА рдореЗрд░реА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рд╕реНрдЯреИрдВрдб:

  1. рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдкрд╛рдЗрдерди рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╕реЗ рд╣рдо рд╕реАрдорд┐рдд рд╣реИрдВред рдХреНрд▓реЛрдЬрд╝рд░ рдФрд░ рдбрд╛рдпрдиреЗрдорд┐рдХ рдореВрд▓реНрдпрд╛рдВрдХрди рдПрдХ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдЦреЗрд▓рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдИрдкреАрдереЙрди рдЗрд╕реЗ рдареАрдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд▓реЛрдЧреЛрдВ рдиреЗ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ рдирд╛рдо рд╕реНрдерд╛рди рдкрд░ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдкрд╛рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рд╣реИрдХ рд╣реИрдВ рдЬреЛ рдЕрдиреНрдп рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╡реИрд╢реНрд╡рд┐рдХ рдирд╛рдо рд╕реНрдерд╛рди рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ IPython рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ workarounds рдбрд╛рд▓рдиреЗ рдкрд░ рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рд╣реИ; рдореИрдВ рдмрд▓реНрдХрд┐ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдЫреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рд╣рдо рдмрд╣реБрдд рдЪрд╛рд▓рд╛рдХ рд╣реЛрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

  2. рдХрдИ рдЬрдЧрд╣ рдЬрд╣рд╛рдВ рд▓реЛрдЧреЛрдВ рдХреЛ рд▓рдЧрд╛ рдХрд┐ рд╡реЗ embed() , рдЙрдиреНрд╣реЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ start_ipython() рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдореБрджреНрджреЗ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рд╕рдордЭ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдпрд╣ рдореБрдЭреЗ рдЧреБрд╕реНрд╕рд╛ рджрд┐рд▓рд╛рддрд╛ рд╣реИред

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореБрдЭреЗ рдЗрд╕ рдмрд╛рдд рдХреА рдирд┐рд░рд╛рд╢рд╛ рдереА рдХрд┐ рдпрджрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЦрд╛рд▓реА .py рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╡реЗ рдпрд╣рд╛рдБ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ

рд▓реЗрдХрд┐рди рдЗрддрд┐рд╣рд╛рд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рддреЗ рд╣реБрдП, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ Django рдХреЗ manage.py shell рд╕рд╛рде рдПрдХ рдореБрджреНрджрд╛ рд╣реИ, рдЙрд╕ рд╕рдордп рдХрд╛ 90% рдЬрдм рдореИрдВ ipython рдореЗрдВ рд╣реВрдВ рдЬреЛ рдореИрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдпрд╣ рднреВрд▓ рдЬрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ

рд╢рд░реНрдордирд╛рдХ рд░реВрдк рд╕реЗ рдореИрдВ Django (1.4) рдХреЗ рдЕрдкреНрд░рдЪрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдмрд╣реБрдд рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ

рдкрд╣рд▓реЗ рдХреА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдЕрдиреБрд╕рд╛рд░, Django рд╢реЗрд▓ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ ipython рдХрд╛ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ? рдЙрджрд╛ред https://code.djangoproject.com/ticket/17078

рдЧрд▓рддрдлрд╣рдореА рдХреЗ рд▓рд┐рдП рдорд╛рдлреА

рд╣рд╛рдБ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ Django 1.6 рдХреЗ рд▓рд┐рдП рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрджрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдиреНрдирдпрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдареАрдХ рд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдРрд╕рд╛ рдерд╛: https://github.com/django/django/commit/3570ff734e93f493e023b912c9a97101f605f7f5

рдореБрдЭреЗ рдЖрдЬ рдПрдХ рд╡рд░реНрдХ рдЕрд░рд╛рдЙрдВрдб рдорд┐рд▓рд╛, рдЬреЛ # 10695 рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдЙрдкрдЪрд╛рд░ рдЬрд╣рд╛рдВ IPython рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдПрдореНрдмреЗрдбреЗрдб рдирд╣реАрдВ рд╣реИ, рдЗрд╕ рдереНрд░реЗрдб рдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореИрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдХреГрдкрдпрд╛ рд╡реИрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

frenzymadness picture frenzymadness  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

lewisacidic picture lewisacidic  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ericdill picture ericdill  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

henryiii picture henryiii  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gregcaporaso picture gregcaporaso  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ