python11——模块与包

1.模块

模块是事先写好的文件,用来实现某些特定的功能,当需要使用的时候用import来导入模块

分类:内置模块(python官方自己写的模块)、第三方模块(一些组织等提供的模块可以公开使用和下载)、自定义模块(自己定义的模块)

2.模块的导入:
import:

import time
import os

start = time.perf_counter()
print(os.listdir())
end = time.perf_counter()
print(end - start)

当使用某个模块的函数方法的时候直接用模块.函数方法即可

from…import:即从某个模块导入某个方法,这种方法可以直接使用函数名

from time import perf_counter as counter, sleep#用逗号表示调用多个方法
#若调用time模块的所有方法:
#from time import *
from os import listdir
start = counter()
sleep(1)
print(listdir())
end = counter()
print(end - start)
#使用from就不用用模块.函数的形式了,可以直接使用函数

当模块的函数名字过于复杂,可以用as来为该函数取一个别名来简化操作,之后函数的使用可以直接使用别名

在这里插入图片描述
在这里插入图片描述

3.导入自定义模块
相当于自己写了一个python文件,然后使用import 来导入该python文件所在的路径,该路径可以是绝对路径也可以是相对路径,如这里使用的是相对路径:

在这里插入图片描述
相对路径和绝对路径是针对包而言的,所以导入时能使用包外的文件来导入包内的文件,但是不能直接运行包内的文件,因为不能把包内的文件当做主文件

4.模块内的测试:当我们在某个模块中写了一个函数的时候,想要测试,若直接把模块导入要运行的文件中再进行测试过于麻烦,可以使用这种方式:

def add(x, y):
    return x+y
def sub(x,y):
    return x-y

if __name__ == '__main__':
    print(__name__)#当该模块被其它模块导入的时候就不是__main__了,故该方法可做调试用
    print(add(1,2))

当运行模块的时候,该模块的名字是__main__,所以可以对该模块进行测试。然后当要运行的文件导入该模块的时候,该模块的名字就不是__main__了,运行的文件名是__main__。(相当于c语言中的main函数,即主要运行的函数)

而一般导入一个模块的时候会事先执行该模块的内容,所以导入该模块的时候由于名字不是__main__,就会自动跳过这个if下面要执行的内容。所以使用if __name == 'main’可以对该模块进行测试,而导入该模块的时候又可以跳过这个测试过程。

5.包中的__init__文件:
包:将一些功能类似的模块集中在一起管理
从包中导入某个模块:

from package1 import module1
from package2 import module3

print(dir(module1))
print(module1.__name__)
print(module1.__package__)

当开始创建一个包的时候,一般也会创建一个__init__文件,来将一些必要的文件导入,这样管理者不用记住哪个方法在哪个模块下然后再一一导入。

然后主文件直接调用这个包中的一些方法即可使用,调用包的时候先去查找这个包下面是否有__init__文件,如果有就执行,所以init文件也被称为初始化文件。

如package2的__init__文件

from package2.module3 import *
from package2.module4 import *

module3文件:

print("this is module3.py file")

__all__ = ["add","subtraction","multiplication","division","test"]
#__all__用来选择可以导入的方法,不在__all__里的方法无法导入

def add():
    print("this is add function")

def subtraction():
    print("this is subtraction function")

def multiplication():
    print("this is subtraction function")

def division():
    print("this is division function")

def test():
    print("this is test function")

module4文件:

class Student(object):
    def __init__(self,name):
        self.name = name

    def get_student_name(self):
        print(f"学生姓名是{self.name}")

运行的主文件:

from package2 import add,subtraction,multiplication,division,Student,test

add()
subtraction()
multiplication()
division()
test()

student = Student("Andy")
student.get_student_name()

这样管理者就不需要记下add, substraction,test等方法在哪个模块,直接导入方法即可

__init__文件的应用场景:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45486992/article/details/113758542