模块基础——模块简介、模块导入方式、模块查找顺序

article/2025/8/22 11:10:41

文章目录

      • 模块简介
      • 模块的使用
        • import句式
        • from...import...句式
        • 模块的补充知识
        • 判断文件类型
        • 循环导入问题
        • 模块的查找顺序(重点)
      • 面向过程编程
        • 面向过程的优缺点

模块简介

  • 什么是模块?

    模块就是一系列功能的集合。在python中,一个py文件就是一个模块,文件名为mytest.py,则模块名为mytest,导入模块就可以引用模块中已经写好的功能和变量。

  • 为什么要使用模块?

    使用模块的目的是为了提高开发效率,站在巨人的肩膀上进行开发,保证了代码的重用性,又增加了程序的可维护性。

  • 模块的分类?

    1. 内置模块:在python解释器中已经存在的,例如time模块等。
    2. 第三方模块:别人已经写到的功能,并且在网上公开给其他开发者使用的。
    3. 自定义模块:就是自己写的,自己来用的模块。
  • 模块的表现形式?

    1. 使用python编写的代码(.py文件),一个py文件就是一个模块。
    2. 已经被编译为共享库或者DLL的C或C++扩展。
    3. 包含多个py文件的文件夹叫作包,包也是模块。
    4. 使用C编写并链接到python解释器的内置模块。

模块的使用

​ 使用模块的目的是为了提高开发的效率,那么我们该如何导入模块来供我们使用呢?下面介绍模块的导入方式。

import句式

​ 通过import加模块名,则表示对模块的导入。

有如下代码文件:

# test1.py  导入文件
num = 100
def get_num():print(x)def change():global numnum = 0# start.py  执行文件
# 在学习模块的时候,首先分清楚谁是执行文件,谁是导入文件
import test1  # 导入的模块test1,注意不要加后缀num = 200
x = test1.num  # 引用模块test1中num的值赋值给当前名称空间中的变量x
print(x)
test1.get_num()  # 调用模块test1中的get_num()函数
test1.change()  # 调用模块test1中的change()函数
  • 模块被导入时注意:

    模块会执行,但是导入多次,只会执行一次。

  • 模块首次导入时发生了哪些事?

    1. 运行执行文件,产生一个执行文件的全局名称空间。
    2. 运行被导入文件,产生一个模块的全局名称空间。
    3. 模块中的名字放入到模块的名称空间中。
    4. 在执行文件的名称空间中有一个test1的名称指向模块的名称空间。

    图解:
    image-20220115194307453

    注意:在start.py的名称空间中有与test1.py的名称空间中有相同的名字,但是在使用模块名称空间中的名字时,会通过test1.加名字来引用,所以不会出现名称冲突的问题。

from…import…句式

​ from…import…与import语句基本一致,唯一不同的是:使用import test1导入模块后,引用模块中的名字都需要加上test1.作为前缀,而使用from test1 import num,get_num,change来导入,start则可以在当前执行文件中直接引用模块test1中的名字,如下代码所示:

from test1 import num
from test1 import get_num,changeprint(num)
get_num()
change()
  • 使用from…import…导入模块时注意:

    文件作为模块被导入时,模块文件会执行。

  • from…import句式首次被导入时发生了什么?

    1. 产生一个执行文件的名称空间。
    2. 运行导入文件。
    3. 产生一个导入文件的名称空间。
    4. 在执行文件中产生num,get_num, change,执行导入文件中的相应变量。导入文件中的名称若没有被导入,在执行文件中就无法使用,若要使用,则必须再次导入该名称。
  • 连续导入:

    from test1 import num,get_num,change

模块的补充知识

  • 使用as来起别名

    as既可以给模块起别名,也可以给模块中的某一个名字其别名

    示例:

    # my_first_model.py
    num = 100
    def get_num():print(x)def change():global numnum = 0# start.py
    import my_first_model as model
    print(model.num)
    model.get_num()
    model.change()from test1 import num as a
    print(a)
    
  • 连续导入

    可以一个句式导入多个模块,每个模块之间用逗号隔开。

    示例:

    # 方式一:
    import time
    import os
    import sys# 方式二:
    import time,os,sys
    
  • 通用导入

    在使用from…import…句式时,可以使用*号来表示导入模块中的所有名称。

from test1 import *print(num)
get_num()
change()

注意:模块的编写者可以通过在自己的文件中定义__all__变量来控制*号代表的意思。

# first.py
num = 100
def get_num():print(x)def change():global numnum = 0
__all__ = ['num','get_num']   # start.py
from first import *
print(num)  # 可用
get_num() # 可用
change()  # 不可用

判断文件类型

​ 因为一个python文件,可以是执行文件,也可以是被导入文件,那么我们该如何来区分呢?python中通过__name__的内容来进行区分。

​ 注意:

​ 如果在执行文件中,__name__的值是__main__,并且是字符串类型。

​ 如果作为模块时,__name__的值被赋予模块名。

作为模块的开发者,可以在文件末尾基于__name__在不同应用场景下的值的不同来控制文件执行不同的逻辑。

# test.py
if __name__ == '__main__':test.py被当做脚本执行时运行的代码
else:test.py被当做模块导入时运行的代码

循环导入问题

​ 循环导入指的是在一个模块导入的过程中导入另外一个模块,而在另外一个模块中又返回来导入第一个模块中的名字,由于第一个模块尚未加载完毕,所以引用失败、抛出异常,究其根源就是在python中,同一个模块只会在第一次导入时执行其内部代码,再次导入该模块时,即便是该模块尚未完全加载完毕也不会去重复执行内部代码。我们从以下例子来做出分析:

# m1.py
print('正在导入m1')
from m2 import yx='m1'# m2.py
print('正在导入m2')
from m1 import xy='m2'# start.py
import m1

运行start.py:
image-20220115213740757
分析:

​ 先执行start.py,执行import m1,开始导入m1,并运行其内部代码,打印内容"正在导入m1",然后执行from m2 import y 开始导入m2并运行其内部代码,打印内容“正在导入m2”,再执行from m1 import x,由于m1已经被导入过了,所以不会重新导入,所以直接去m1中拿x,然而x此时并没有存在于m1中,所以报错。

解决方案:在文件的最后导入模块

# m1.py
print('正在导入m1')x='m1'
from m2 import y# m2.py
print('正在导入m2')y='m2'
from m1 import x# start.py
import m1

结论:

​ 循环导入问题是不允许出现的,如果出现,则是程序设计不合理。

模块的查找顺序(重点)

  1. 先从内存中查找
  2. 再从内置中查找
  3. 最后从sys.path,按照从左到右的顺序,依次查找。

如果在你的执行文件中找不到模块的时候,解决方案:把模块所在的路径加到sys.path中。

面向过程编程

​ 面向过程编程, 核心是”过程“二字,即先干什么,在干什么,最后干什么,表示一件事的执行步骤。面向过程编程不是一门技术,而是一种思想。

举例:把大象放冰箱分几步?

  1. 打开冰箱门
  2. 把大象塞进去
  3. 把冰箱门关上

面向过程的优缺点

  • 优点:使复杂的问题简单化

  • 缺点:扩展性差

  • 使用场景:在对扩展性要求不高的项目中可以使用面向过程的思想。


http://chatgpt.dhexx.cn/article/ILNu6hGV.shtml

相关文章

Linux下iptables防火墙配置

目录 一.Linux防火墙基础 1.1 防火墙概述 1.2 四表五链 二. iptables--命令 2.1 iptables的安装 2.2 iptables的配置方法 三.配置Filter表防火墙 3.1 列出(fliter)表中的所有链 iptables -L 3.2 使用数字形式(fliter)表…

linux防火墙添加开放端口

linux防火墙添加开放端口 --添加开放端口 sudo firewall-cmd --zonepublic --add-port开放的端口号/协议[tcp/udp] --permanent --permanent 添加的端口号永久生效 --使新增的端口配置立即生效 sudo firewall-cmd --reload ​​​​​​​

Linux修改防火墙

linux环境-CentOS 7.6 64位 查看是否配置防火墙:ifconfig 2.查看是否开启防火墙:service iptables status 3.查看防火墙配置规则:iptables -L -n 4.查看ssh当前端口占用:sudo netstat -atlunp | grep sshd 5.修改进入ssh目录&a…

linux 防火墙配置规则

基础知识 Linux系统内核内建了netfilter防火墙机制。Netfilter(数据包过滤机制),所谓的数据包过滤,就是分析进入主机的网络数据包,将数据包的头部数据提取出来进行分析,以决该连接为放行或阻挡的机制。Net…

Linux防火墙配置及放行端口

文章目录 一、firewalld的基本使用(系统防火墙)二、配置firewalld-cmd三、通过firewall-cmd(放行端口) 一、firewalld的基本使用(系统防火墙) 查看防火墙状态: systemctl status firewalld.se…

linux显示 防火墙配置文件,怎么查看Linux防火墙配置方法

当Linux系统的防火墙的状态和信息时候,我们可以用哪些命令查看呢。下面由学习啦小编为大家整理了查看Linux系统防火墙的命令详解,希望对大家有帮助! 查看Linux系统防火墙的命令详解 查看Linux系统防火墙的命令一、service方式 查看防火墙状态: [root@centos6 ~]# service ip…

Linux 配置防火墙

Linux 配置防火墙 一、图形化的形式 1.开启LAMP systemctl start httpd2.查看本地IP地址 ip addr3.本地IP为 192.168.31.150本地访问 外部浏览器就无法访问 4.此时配置防火墙 firewall-config此时,出现图形化界面,需要输入密码 改变服务http R…

Linux 防火墙配置(iptables和firewalld)

目录 防火墙基本概念 Iptables讲解 Iptables表 Iptables规则链 Iptables控制类型 Iptables命令配置 firewalld讲解 Firewalld区域概念 Firewalld两种配置方法 firewall-cmd命令行基础配置 firewall-config图形化配置 防火墙基本概念 防火墙就是根据系统管理员设定的…

UI设计师如何应对面试 哪些细节问题不可忽视

UI设计师如何应对面试?哪些细节问题不可忽视?有互联网的地方就会有UI设计师,越来越多的人转行从事UI设计加剧了求职竞争,如何才能脱颖而出获得高薪呢?专业技能很重要,面试技巧也不可忽视,下面就给大家分享…

UI设计师如何脱颖而出 面试过程中要注意什么

UI设计师如何脱颖而出?面试过程中要注意什么?有互联网的地方就会有UI设计师,越来越多的人转行从事UI设计加剧了求职竞争。专业技能很重要,面试技巧也不可忽视,下面就给大家分享一些UI设计师在面试过程中不可忽视的四个…

UI设计师这些面试技巧你知道吗?

随着互联网产业的飞速发展,UI设计师岗位缺口不断攀升,有意入行的人群也不在少数。那么学成之后,自然而然要进入到面试环节,为了提前做好准备,千锋今天向您分享几招UI设计师的面试技巧。 ​ 通顺的逻辑思维和表达能力 …

企业招聘UI设计常见面试题分享

对于想要加入互联网行业却又不愿意敲代码的人来说,UI设计是一个非常不错的选择。随着用户体验度即审美要求的提升,UI设计师地位进一步提升,很多企业都乐意薪资较高的招聘专业的设计人才。下面就给大家详细介绍一下。 目前UI设计热度呈现持续上…

2018年UI设计师经典面试题及答案总结

2018年马上就要结束了,给大家总结了一些UI设计出现比较多的面试题,很多时候我们有足够的技术,但是可能就断送在了面试上,大家如果去面试,可以多了解看看以下的这些UI设计师经典面试题及答案,毕竟知己知彼才能更好的发挥自己的特长,提高面试的机率嘛。 1、推动一个项目的…

android ui设计 面试问题,2019新版UI设计面试题汇总附答案

原标题:2019新版UI设计面试题汇总附答案 问题一、Android手机的常用设计尺寸有_________.怎么适配ios和安卓。 答案:安卓320 X 480是常规模拟器、但现在的开发都是用360x640做一倍率。480 X 800(1.5倍率)、720 X 1280(2倍率)、1920*1080(3倍率) ios用ske…

2019UI设计岗位最常见的面试题

UI作为门槛较低的互联网职业,每天都有很多人涌进UI设计行业,其实UI设计行业结构是和传统行业是一样的,不缺新人,或者水平一般的人,但是要成为技术娴熟却不容易。 而且并不是说你会了个工作流程,就很牛了。…

UI设计师作品准备以及面试攻略

链接:https://www.jianshu.com/p/a3ba265998fa 引言 众所周知设计师的面试分两个部分,一个是作品集,一个是面试过程。作品集是敲门砖,也是面试过程中贯穿全程的内容,如果你的作品集只有70分,那么你可以通过面试让自己…

上海数据交易中心交易系统开放

10月7日,上海数据交易中心正式宣布开放交易系统,实现24小时去中心化线上数据交易。同时,二十家首批会员也正式宣布入驻交易系统。其中,电信、联通等公司作为数据供应方加入了交易平台。数据公司晶赞科技、星际大数据和东方航空、安…

上海联通大数据服务再突破

大数据是运营商的核心战略资产,正成为上海联通数字化转型的核心、创新型收入的来源、重构生态圈的基石 日前,由上海市信息投资股份有限公司、中国联合网络通信集团有限公司(简称“中国联通”)、中国电子信息产业集团有限公司等9家机构联合发起成立的上海…

上海数据交易中心发布《数据互联规则》

9月7日,上海数据交易中心经过对数据交易的大量研究与实践探索,发布了《数据互联规则》(以下简称《规则》)。从国家宏观战略层面来看,《规则》的制定,不但与中国政府正大力推进的“互联网”行动计划、大数据…

ISACA与上海大数据应用创新中心签署DMM全球第一个战略合作备忘录

-领域合作优化数据资产管理策略 行业标准助力未来商业目标 上海2018年9月18日电 /美通社/ -- 在9月17日开幕的“2018世界人工智能大会”上,全球著名信息安全专业机构 ISACA 旗下 CMMI 研究院进行了数据管理成熟度模型(DMM)的主题分享&#xf…