两个import语义有差异
import xxx
import datetime print(datetime.datetime.now())是引入整个datetime包
引入之后datetime这个包可见,但是想用这个包里的类还要加上这个包的前缀
from xxx import xxx
from datetime import datetime print(datetime.now())是只引入datetime包里的datetime类
引入之后datetime.datetime这个类可见。再用这个类就不用加上包的前缀了
尽量不要使用 from *** import *
这样有的地方也叫模糊导入,*代表导入所有
因为这样容易造成函数名的重复,既危险又耗资源
用from *** import *** 特定的写导入某个模块
from 具体某个包 import 具体某个包 是ok的,不要用*的模糊导入
import 自己的库(文件夹)
如果你只是写了一个文件,即你要用的函数都在一个python文件里面,叫utils.py
那你就直接import utils 或 from utils import 函数
记住.py后缀省略省略省略
如果你要导入的在一个文件夹中
例如,目录下有client文件夹,文件夹里有foo.py文件。需要import这个foo.py,发现提示找不到该文件
这种情况需要在client文件夹里,添加__init__.py(内容为空)即可解决。
任何的库都需要这么一个文件,python才会认为这是库。
举个例子
utils.py本来写的是空的,应该是python自己给添的
然后我们所有有用的函数都在utils.py里
然后我们在程序之中
这样utils.py里面的所有函数就都可以使用了
而且只要d2l的名字,根本不会出现utils的名字
绝对导入 & 相对导入
绝对导入:所有的模块import都从“根节点”开始。根节点的位置由sys.path中的路径决定,项目的根目录一般自动在sys.path中。如果希望程序能处处执行,需手动修改sys.path。
例1:c.py中导入B包/B1子包/b1.py模块
import sys,os BASE_DIR = os.path.dirname(os.path.abspath(__file__))#存放c.py所在的绝对路径 sys.path.append(BASE_DIR) from B.B1 import b1#导入B包中子包B1中的模块b1例2:b1.py中导入b2.py模块
from B.B1 import b2#从B包中的子包B1中导入模块b2相对导入:只关心相对自己当前目录的模块位置就好。不能在包(package)的内部直接执行(会报错)。不管根节点在哪儿,包内的模块相对位置都是正确的。
#from . import b2 #这种导入方式会报错。 import b2#正确 b2.print_b2()





2983

被折叠的 条评论
为什么被折叠?



