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

基本概念:

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值