python导入模块

python中一个.py文件是一个模块,一个拥有__init__.py文件的文件夹是一个包,也可以认为是一个模块,这两种模块都是可以导入到其它模块中的。

        首先讲讲普通A.py模块。

# A.py

def A1():
    print("this is A1")

class A2:
    name = "I am A2"

x = "A's member"

        如果要在其它模块中使用A.py模块中的类,函数,变量等,需要将模块A导入其它模块,导入方法有精确导入和模糊导入两种。对于精确导入,比如我们在模块B.py中想要使用A中的方法A1,可以用from A import A1,然后就可以在B中直接使用A1了。也可以全部导入,即form A import *,这样就可以在B中使用A中的类,函数,对象等。模糊导入,就是直接import A。

        我们可以理解为一个当前执行模块B对应了一个命名空间B,当我们用from A import A1时,就把A1加入了命名空间B。当我们用from A import *时,就把A中的所有成员都加入了命名空间B,因此在模块B.py中可以随意使用这些成员。但是要注意名字冲突的问题,特别是采用from A import *的时候,可能A中有一些我们没注意到的成员与B中成员冲突。针对from  import * 可能产生名字冲突的情况,有一种解决方案是在模块A中加入一个__all__列表,只有列表中列出来的成员,在from A import *的时候才会加入命名空间B,因此我们可以手动控制需要加入那些成员以防名字冲突。我们还可以用模糊导入,对于模糊导入,相当于我们在当前命名空间B中又加入了一个小的命名空间A,对于A中的成员都要用 A.A1()这种方式来引用。

        其次也可以导入包。

        一般一个目录下如果有_init_.py文件,那么这个目录就是一个python包。如下图一个例子,如果我们在一个test1模块中导入test模块中的成员,from test.A import A1这种情况起始就是一个.py模块的精确导入,这个跟上边一样没什么好说的,相当于把A1加入了命名空间test1,也可以from test import A,这种情况应该就相当于A.py模块模糊导入。相当于把命名空间A加入了命名空间test1。

# test包模块

__init__.py

A.py
B.py

比较麻烦的是直接导入一个包,即 import test,这个时候相当于在test1命名空间中加入了命名空间test。而因为test是一个包,而非普通的.py模块,因此有些特殊之处。即当我们import test的时候会先执行__init__.py文件,这个文件中还可以再嵌套导入一些其它的模块。比如下边例子:

这是torch包中的__init__.py中的一些片段,可以看到在__init__.py中又导入了一些其它的模块,比如from torch import nn as nn,相当于把nn加入了torch这个命名空间,当我们在自己的test1.py文件中import torch之后,会执行torch的__init__.py文件,然后会在test1命名空间中加入torch命名空间,而由于在__init__.py中的导入了nn模块,因此nn就在torch命名空间中,因此在test1.py中就可以直接torch.nn来使用nn的一些成员了。

from torch import fft as fft
from torch import futures as futures
from torch import nn as nn
import torch.nn.intrinsic
import torch.nn.quantizable
import torch.nn.quantized
from torch import optim as optim
import torch.optim._multi_tensor
from torch import multiprocessing as multiprocessing
from torch import sparse as sparse
from torch import special as special
import torch.utils.backcompat
from torch import onnx as onnx
from torch import jit as jit
from torch import linalg as linalg
from torch import hub as hub
from torch import random as random
from torch import distributions as distributions
from torch import testing as testing

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值