Python学习笔记:Python的名字空间

来源:互联网 发布:mac python 编辑:程序博客网 时间:2024/03/29 19:18

基本概念:

1. Python的世界是名字和对象的世界。

2.名字空间是名字到对象的映射。

3.赋值是名字与对象的绑定, 不拷贝数据。


例子说明:

<pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:'宋体';font-size:9.0pt;"><span style="color:#cc7832;"><strong>def </strong></span><span style="font-weight:bold;">scope_test</span>():    <span style="color:#cc7832;"><strong>def </strong></span><span style="font-weight:bold;">do_local</span>():        <span style="color:#808080;"># "local ssam" 对象绑定到 local namespace的spam</span><span style="color:#808080;">        spam </span>= <span style="color:#008080;">"local spam"</span><span style="color:#008080;"></span><span style="color:#008080;">    </span><span style="color:#cc7832;"><strong>def </strong></span><span style="font-weight:bold;">do_nonlocal</span>():        <span style="color:#808080;">#  声明不要让spam绑定到local namespace</span><span style="color:#808080;">        </span><span style="color:#cc7832;"><strong>nonlocal </strong></span>spam        spam = <span style="color:#008080;">"nonlocal spam"</span><span style="color:#008080;"></span><span style="color:#008080;">    </span><span style="color:#cc7832;"><strong>def </strong></span><span style="font-weight:bold;">do_global</span>():        <span style="color:#808080;"># 声明将spam绑定到module 的global namespace</span><span style="color:#808080;">        </span><span style="color:#cc7832;"><strong>global </strong></span>spam        spam = <span style="color:#008080;">"global spam"</span><span style="color:#008080;"></span><span style="color:#008080;">    </span><span style="color:#808080;"># 在scope_test()的local namespace里将spam与"test spam"绑定</span><span style="color:#808080;">    </span>spam = <span style="color:#008080;">"test spam"</span><span style="color:#008080;">    </span><span style="color:#808080;"># 调用do_local(), 会在do_local()的生命周期里将do_local()的local namespace与"local spam"绑定, 调用结束后删除绑定</span><span style="color:#808080;">    </span>do_local()    <span style="color:#808080;"># 打印scope_test()的local namespace里的spam</span><span style="color:#808080;">    </span><span style="color:#8888c6;">print</span>(<span style="color:#008080;">"After local assignment:"</span><span style="color:#cc7832;">, </span>spam)    <span style="color:#808080;"># 调用do_nolocal(), 在do_nolocal里声明了不要将spam与do_nolacal()的local namespace绑定, python会在外层绑定,</span><span style="color:#808080;">    # scope_test()的local namespace的spam将会被绑定到"nolocal spam"</span><span style="color:#808080;">    </span>do_nonlocal()    <span style="color:#808080;"># 打印scope_test()的local namespace的spam</span><span style="color:#808080;">    </span><span style="color:#8888c6;">print</span>(<span style="color:#008080;">"After nonlocal assignment:"</span><span style="color:#cc7832;">, </span>spam)    <span style="color:#808080;"># 调用do_global(), do_global()里将"global spam"于模块的global namespace的spam绑定,</span><span style="color:#808080;">    </span>do_global()    <span style="color:#808080;"># 打印scope_test()的local namespace的spam</span><span style="color:#808080;">    </span><span style="color:#8888c6;">print</span>(<span style="color:#008080;">"After global assignment:"</span><span style="color:#cc7832;">, </span>spam)scope_test()<span style="color:#808080;"># 打印模块global namespace的spam</span><span style="color:#8888c6;">print</span>(<span style="color:#008080;">"In global scope:"</span><span style="color:#cc7832;">, </span>spam)


输出结果:

After local assignment: test spam
After nonlocal assignment: nonlocal spam
After global assignment: nonlocal spam
In global scope: global spam


0 0
原创粉丝点击