Loading

Python模块和包

模块

在Python中,一个.py的python文件就是一个模块。

导入模块的几种方式

  • import 模块名

  • from 模块名 import 功能名

  • from 模块名 import *

  • import 模块名 as 别名

  • from 模块名 import 功能名 as 别名

import

import 模块名

import 模块名1, 模块名2...

# 导入模块
import math
# 模块名.功能名()
print(math.sqrt(16))  # 4.0

from...import...

from 模块名 import 功能名

from 模块名 import 功能1, 功能2,...

from math import sqrt
print(sqrt(16))  # 4.0

from...import*

from math import *
print(sqrt(16))  # 4.0

as定义别名

import 模块名 as 别名

from 模块名 import 功能 as 别名

# import time as tt
# tt.sleep(2)
# print('hello world!')

from time import sleep as sl
sl(2)
print('hello world!')

测试自己的模块

新建my_module.py文件

def testA(a, b):
    print(a + b)

使用my_module

import my_module
my_module.testA(2, 2)  # 4 

if __name__ == '__main__'的使用

当在my_module.py文件直接执行时,模块属性__name__ 等于__main__

my_module.py

def testA(a, b):
    print(a + b)

print(__name__)  # __main__

当my_module.py文件被导入到其他文件执行时 __name__ 等于 my_module(文件名称去掉.py)

my_module.py

def testA(a, b):
    print(a + b)

print(__name__)  # my_module

其他文件使用my_module

import my_module
my_module.testA(2, 2)  # 4

导入的模块搜索顺序

首先判断这个模块是不是built-in内建模块,如果是内建模块则引入内建模块,如果不是则在sys.path返回的列表中寻找。

import sys
print(sys.path)

__all__

如果一个模块文件中有__all__,当使用from xxx import *时,只能导入这个列表中的元素。

my_module.py

__all__ = ['testA']


def testA():
    print('testA')


def testB():
    print('testB')

调用my_module

from my_module import *
testA()  # testA

包用来管理模块,将多个模块放在一个文件夹内,就形成了一个包,包中必须包含__init__.py文件。

新建包

新建mypackage包,包括以下三个文件:

-- mypackage
	-- __init__.py
	-- my_module1.py
	-- my_module2.py

my_module1.py

print('第一个模块')


def info_print1():
    print('my_module1')

my_module2.py

print('第二个模块')


def info_print2():
    print('my_module2')

导入包

方法1:

# import 包名.模块名
import mypackage.my_module1

# 包名.模块名.功能名
mypackage.my_module1.info_print1()

方法2:

__init__.py 文件中使用 __all__ = [] 加入允许导入的模块。

__init__.py

__all__ = ['my_module1']

导入mypackage

from mypackage import *
my_module1.info_print1()
posted @ 2021-07-05 09:51  charlatte  阅读(32)  评论(0编辑  收藏  举报