首页 > 技术文章 > Python module

hi3254014978 2021-09-21 22:20 原文

Python 模块导入

请注意,通常不赞成*从模块或包中导入的做法,因为它通常会导致代码可读性差。但是,可以使用它来保存交互式会话中的输入。

import fibo    # 隐式相对导入
from fibo import fibo1, fibo2    # 绝对路径导入
import fibo as fib    # 重命名
from fibo import fib as fibonacci

笔记

出于效率原因,每个模块在每个解释器会话中仅导入一次。因此,如果您更改您的模块,您必须重新启动解释器——或者,如果它只是您想要交互式测试的一个模块,请使用importlib.reload(),例如.

import importlib; 
importlib.reload(modulename)

from package import item,item可以是package的子module,也可以是子package, 还可以是其他各种定义在这个包里面的变量、类和函数。

import item.subitem.subsubitem ,这种语法则要求最后一层item必须是子package,或者子module,不能是item中定义的变量、类或者函数。如果最后一层是一个变量、类或者函数,则在编译改文件的时候会报错ModuleNotFoundError: No module named 'xxx'; 'xxx' is not a package

from <module> import *

包外的可见效是通过在包里面的__init.py__里面设置__all__来控制包内的对象和方法等对包外的可见性,如:如果设置了__all__,如果这个包内的类或方法不在__all__里面,外面的包就不能正常使用这些方法和类。如果没有设置__all__,那么外面可以通过包内的约定来显示可见性。python通过private对应两个下划线__,protected对应一个下划线_,public 对应没有下划线,来约定类似于java的可见性控制。

__all__作用是是限制from <module> import *import的包名。需要注意的是 __all__ 只影响到了 from <module> import * 这种导入方式,对于 from <module> import <member> 导入方式并没有影响,仍然可以从外部导入。

all__如果在module文件中,则限制的是module中变量、类和函数的可见性,所以这种情况下__all__变量的元素都是变量名、类名和函数名;如果是在__init.py中,则设置的是该package下的module的可见性,这种情况下,__all__变量的元素都是module名。

参考: python中的_all_用法Python中__all__到底干啥的

一个

推荐阅读