python第十八天 模块

发布于:2022-12-20 ⋅ 阅读:(408) ⋅ 点赞:(0)

目录

模块的定义与分类

import导入模块

import模块发生三件事情

被导入的模块有独立的名称空间

为模块起别名

导入多个模块

from … Import …导入模块

3.1 简单使用

import 与from import对比

from import 起别名

一行导入多个名字

py文件的两种功能

模块的搜索路径


模块的定义与分类

  • 模块是什么?

    一个函数封装一个功能,一个模块就是一个py文件,这个py文件里面存储这很多公共的功能。一个模块就是由多个功能(函数或类)组成的一个py文件。

    一个真正的后端项目可能会有几十万行代码,不可能都放在一个py文件中,我们要分文件、分目录开发,比如我们分了10py文件,构建一个大项目。

    vX122q.png

  • 为什么要使用模块?

    • 拿来主义。避免重复造轮子,减少代码的重复使用,提升开发效率。
    • 让我们项目文件组织结构更清晰,方便管理。
  • 模块的分类

    python中的模块分三类。

    • 标准库,内置模块。(time, os 等等)我们下载python解释器自带的模块,200多种模块。
    • 第三方库。通过pip install这个命令安装的就是第三方库。6000多种。
    • 自定义模块。我们自己构建的,一般是服务于项目。

我们自己定义个模块,供下面的知识点学习使用。

print('from the tbjx.py')
name = '太白金星'

def read1():
    print('tbjx模块:',name)

def read2():
    print('tbjx模块')
    read1()

def change():
    global name
    name = 'barry'

import导入模块

import模块发生三件事情

import引入,导入的意思。

import taibaijinxing
import taibaijinxing
import taibaijinxing
import taibaijinxing
import taibaijinxing
import taibaijinxing

import一次模块,会执行此模块里面的所有的代码,如果在引入此模块,则不会重复执行。但是这个代码会一直加载到内存。

引入一个模块会发生三件事:

import taibaijinxing
# print(taibaijinxing.name)
taibaijinxing.read1()
  • 会在内存中创建一个以此模块名命名的全局名称空间。
  • 执行此模块中的代码,将所有代码加载到此空间中。
  • 通过模块名点的方式调用此模块中的所有的名字(变量,函数名,类名)。

vX1kbF.png

被导入的模块有独立的名称空间

import taibaijinxing


# name = 'barry'
# print(taibaijinxing.name)

def read1():
    print(' in import  read1')


def read2():
    print(' in import  read2')


taibaijinxing.read2()

为模块起别名

  • 方便使用。

    比如我们现在的模块名taibaijinxing 太长了.

    import taibaijinxing as tb
    print(tb.name)
    

导入多个模块

import time
import os
import taibaijinxing

from … Import …导入模块

3.1 简单使用

from taibaijinxing import name, read1
print(name)

通过from这种引用,我们可以直接使用引用的变量。

import 与from import对比

vX1ugx.png

  • from import 方式 比直接import用起来更加简便。
  • from import方式容易与本空间的变量起冲突。
# 测试一
from taibaijinxing import name

# print(name)
# name = 'barry'
# print(name)

# name = 'barry'
# from taibaijinxing import name
# print(name)


# 被引用的模块有独立的空间,引用的read2函数是模块空间的,找寻read1函数时,从模块空间找。
# 测试二

from taibaijinxing import read1, read2

def read1():
    print('in from import read1')

# read1()
read2()  # taibaijinxing read2 函数 

# 测试三
from taibaijinxing import change

name = '姚聪'
change()
print(name)

from import 起别名

from taibaijinxing import change as ca

一行导入多个名字

# 通过from import的方式,可以使用一行代码导入多个名字。
from taibaijinxing import name, read1, read2, change

*获取所有名字

from taibaijinxing import *
print(name)
read1()
read2()

我们尽量不要使用※,如果你非要使用※,那么一般都要与__all__配合使用。

from taibaijinxing import *
print(name)
read1()
read2()
# change()

# taibaijinxing 模块中:
print('from the tbjx.py')

__all__ = ['name', 'read1']  # 控制*的取值范围。
name = '太白金星'


def read1():
    print('tbjx模块:', name)


def read2():
    print('tbjx模块')
    read1()


def change():
    global name
    name = 'barry'
    print('in change')

py文件的两种功能

python中的py文件是有两种角色的:

  • 脚本。一个py文件完成了一个功能(内部管理系统,购物车),并且是主动执行的称之为脚本。
  • 模块。一个py文件里面有很多公共的功能,并且是被其他py文件引用的。

非常重要的语法:

if __name__ == '__main__':
关键节点在于__name__方法:这个方法可以判断此py文件是脚本,还是模块。

如果一个py文件是脚本: __name__ == '__main__'
如果一个py文件是模块: __name__ == '模块名'
  • if __name__ == '__main__'有两个作用:

    • 在模块中测试某些模块的功能。
      print('from the tbjx.py')
    
      __all__ = ['name', 'read1']
      name = '太白金星'
        def read1():
          print('tbjx模块:', name)
    
    
      def read2():
          print('tbjx模块')
          read1()
    
    
      def change():
          global name
          name = 'barry'
          print('in change')
    
    
      # print(__name__)  # '__main__'
    
      if __name__ == '__main__':
          change()
    
    • 用于项目的启动文件使用。

    模块的搜索路径

    我们引用一个模块,有的是可以引用到的,有的是默认不能引用的。

    vX1rVg.png

    我们引用一个模块,是有一个顺序的,import或者from … import这两个命令一执行,他先会从内存中寻找有没有该模块的名称空间,内存中没有从内置模块中找,如果内置模块在没有,它会从sys.path这个里面寻找。

    内存 -----> 内置模块 -------> sys.path

    sys.path是什么?sys是python中的一个模块,在运行python程序前,sys默认会将指定的某些目录加载到内存中,这些指定的目录就在sys.path这个列表中。

    import sys
    # print(sys.path)
    
    # 如何引用day22/tbjx.py这个模块?
    sys.path.append('/Users/barry/PycharmProjects/蒲公英四期/day22')
    import tbjx
    print(tbjx.name)

网站公告

今日签到

点亮在社区的每一天
去签到