码迷,mamicode.com
首页 > 编程语言 > 详细

Python _X __all__ 模拟 导入'私有'变量 及其注意点和实例

时间:2014-12-13 18:07:07      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:python 导入 私有变量 开头下划线

开头是下划线的变量(如_X):

在特定的情况下,可以吧下划线放在变量名的签名(如_X)可以防止客户端使用from *语句导入模块名时,把其中的那些变量名复制出去;但是下划线不是‘私有‘声明:仍可以使用其他导入形式看见并且修改这类变量例如使用import

__all__(语句)

此外也可以在模块顶层把变量名的字符串列表赋值给变量__all__以达到类似_X命名惯例的隐藏效果;使用此功能,from*语句只会把列在__all__列表中的这些变量名复制出来


__all__是指出要复制的变量名,而_X时指出不要被复制的变量名;Python会先寻找模块内的__all__列表(如果定义__all__的时候,只会复制__all__内的变量名,不会复制开头没有下划线的变量名),如果没有定义的话,from * 就会复制出开头没有单下划线的所有变量名

__all__列表只对from *语句这种形式有效,并不是私有声明

例子:

#test.py

key=‘got‘

_nooutpute=‘lllllllllllllll‘

error=‘fasdfsa‘

code=‘fsadfsa‘

decode=‘324324‘

__all__=[‘error‘,‘code‘,‘decode‘]

print {‘already‘: (lambda :2+2),

 ‘got‘:(lambda :2*4),

 ‘one‘: (lambda :2**4)

 }[key]()

#_X__all__.py

from test import *

print(error)

print(key)

bubuko.com,布布扣


注意点:

可以看出__all__中的必须是变量名,并且在引用之前一定要进行赋值


#test.py更改测试__all__

error=‘fasdfsa‘

code=‘fsadfsa‘

decode=‘324324‘

__all__=[‘error‘,‘code‘,‘decode‘,‘testname‘]

#_x__all__.py

from test import *


print(error)

print(testname)

bubuko.com,布布扣




Python _X __all__ 模拟 导入'私有'变量 及其注意点和实例

标签:python 导入 私有变量 开头下划线

原文地址:http://blog.csdn.net/u012829152/article/details/41909019

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!