python模块

    本文主要介绍一些python module的一些有用的用法。
1. 使用_X和__all__
    在引用模块时,有两种方法,一种是"import ...",另外一种是"from ... import ...".在使用后者时,有时因为 引用的名称较多,我们会选择”from ... import *",即将模块中的所有变量、函数及类全部导入到当前模块中。这样有时会造成命名空间污染,为了减小因“from ... import *”引起的污染问题,我们可以使用_X和__all__。例如:
# unders.py
a, _b, c, _d = 1, 2, 3, 4
>>> from unders import * # Load non _X names only
>>> a, c
(1, 3)
>>> _b
NameError: name '_b' is not defined

# alls.py
__all__ = ['a', '_c'] # __all__ has precedence over _X
a, b, _c, _d = 1, 2, 3, 4
>>> from alls import * # Load __all__ names only
>>> a, _c
(1, 3)
>>> b
NameError: name 'b' is not defined
但要说明的是,python中没有类似C++的私有的概念,这两种方法只适用于"from ... imort *"的导入方法,并没有方法来组织模块中某个名称的导出。无论是哪种方法,我们都可以使用import ...或者from ... import ...方法来模块中的任何名称。
2. __name__
    每个python模块都有__name__属性,当模块独立运行时,这个属性会被设置为"__main__",否则它名称为模块的名称(如文件名)。通常,模块会根据"__name__"是否等于"__main__"来决定是否运行一些单元测试代码。
3. 使用as重命名导入的模块或变量及方法名称
    在导入时,可以使用as为导入的模块或名称进行重命名,如:
    import sys as system
4.模块本身即对象
    要获取一个模块的属性,事实上有很多种方式。如以下的所有方式都是用于获取模块M的name属性的:
    M.name
    M.__dict__['name']
    sys.modules['M'].name
    getattr(M, 'name')
    其中第二种方法是因为python将模块中的所有名称及其内存的位置都存入了一个内部的字典__dict__中;而第三个是因为在python运行时,会将所有jiazai de 的模块及模块对象存入sys.modules这个字典中,并且提供了内置的getattr函数来获取指定模块的某个名称的属性值。这些也是dir的工作基础。
5.根据字符串导入模块
    在实际的编程中,我们有时在编写程序过程中不能确定要导入的模块名称(例如名称需要在界面上输入),因此我们需要在运行时导入。这种情况可以使用以下方法来解决:
    modname = 'string'
    exec('import ' + modname)
    或者:
    modname = 'string'
    string  = __import__(modname)
    或者通过importlib.import_module来完成:
    import importlib
    modname = 'string'
    string = importlib.import_module(modname)

    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值