Python之模块1

 模块简介

1. 什么是模块?
        模块就是一些列功能的集合,模块中就是提前写好了很多的功能,直接拿来使用。Python模块是用于组织Python代码的一种方式,可以将相似功能的代码封装在一个模块中,方便使用和维护。Python模块通常以.py结尾,包含了一些函数、类、变量和常量等内容。


2. 为什么要用模块?
        站在巨人的肩膀上,别人写好的一些功能我们把它下载下来直接用在我们自己的项目中,大大提高开发效率

Python标准库中包含了大量的模块,涵盖了文件处理、网络编程、日期和时间、数学计算、图形用户界面等多个领域。此外,还可以通过第三方库或自定义模块扩展Python的功能。

Python模块的使用通常需要先导入,可以使用import语句实现导入。比如,要导入Python标准库中的math模块,可以使用以下代码:

import math

导入后,可以使用该模块中的函数和变量。比如,要计算圆的面积,可以使用math模块中的pi常量和pow函数,代码如下:

r = 2.5
area = math.pi * math.pow(r, 2)
print(area)

除了使用import语句导入整个模块,也可以使用from语句导入指定的函数、类、变量等内容。比如,要导入math模块中的pi常量和sqrt函数,可以使用以下代码:

from math import pi, sqrt

导入后,可以直接使用pi和sqrt变量和函数。比如,要计算2的平方根,可以使用sqrt函数,代码如下:

result = sqrt(2)
print(result)

3. 模块的分类

Python模块可以分为三类:

  1. 内置模块:Python自带的模块,例如math、random等。
  2. 第三方模块:由第三方开发者开发的模块,需要使用pip等工具进行安装,例如numpy、pandas等。
  3. 自定义模块:用户自己编写的模块,可以在程序中引用。自定义模块可以按照需要进行组织和管理。       

4. 模块存在的形式

Python模块可以以多种形式存在,包括:

  1. Python源文件:这是最常见的一种形式,即以.py为后缀的Python代码文件。可以使用import语句导入该文件作为一个模块。

  2. 编译扩展模块:Python支持使用C或C++编写的扩展模块,这些模块通常使用Python的API来和Python解释器进行交互,可以提供比Python更高效的算法和数据结构实现。

  3. 标准库模块:Python标准库中包含了大量的模块,这些模块是Python自带的,可以直接使用,无需额外安装。

  4. 第三方模块:Python社区中有大量的第三方模块,这些模块由各种个人和组织提供,可以使用pip等包管理器进行安装和使用。

  5. 内置模块:Python解释器中还内置了一些模块,例如sys、os等,可以直接使用,无需额外导入。


模块的导入方式之import句式

        Python模块的使用通常需要先导入,可以使用import语句实现导入。比如,要导入Python标准库中的math模块,可以使用以下代码:

import math

        导入后,可以使用该模块中的函数和变量。比如,要计算圆的面积,可以使用math模块中的pi常量和pow函数,代码如下:

r = 2.5
area = math.pi * math.pow(r, 2)
print(area)

        除了使用import语句导入整个模块,也可以使用from语句导入指定的函数、类、变量等内容。比如,要导入math模块中的pi常量和sqrt函数,可以使用以下代码:

from math import pi, sqrt

        导入后,可以直接使用pi和sqrt变量和函数。比如,要计算2的平方根,可以使用sqrt函数,代码如下:

result = sqrt(2)
print(result)

 

模块 from...import...句式

        "from...import" 句式用于导入 Python 模块中的特定函数、变量或者类。它的语法如下:

from module_name import name1, name2, ...

        这个语句将会从指定的模块中导入指定的函数、变量或类。它们可以直接在代码中使用,而不用前缀模块名。

例如,我们可以使用以下代码来导入 Python 标准库中的 os 模块中的 getcwd() 函数:

from os import getcwd

current_dir = getcwd()
print(current_dir)

        这里,我们仅导入了 os 模块中的 getcwd() 函数,因此在使用的时候就可以直接使用函数名,而不用使用前缀模块名。

总结from...import...句式

from...import...句式
        导入模块也会执行导入文件,多次导入也只会执行一次,跟import句式一样
    
    导入文件的时候发生了什么事儿?
        1. 首先会运行执行文件,产生执行文件的全局名称空间
        2. 运行导入文件md
        3. 会产生导入文件的全局名称空间,把导入文件中的名字都丢到全局名称空间中
        4. 会在执行文件中产生一个名字money指向导入文件的名称空间中得money
        
    如果使用from...import...句式的情况,在执行文件中会出现名字冲突的情况(在执行文件中出现了和导入的名字一样的时候)
        出现冲突的时候离谁近用谁的
    
    以后所有的导入语句都写在文件的开头

"""
# money = 999
# print(money)
# from md import money
# print(money)

# print(read1)
# read2()
# change()
def read1():
    print('from read1')
read1()

模块导入语句的其他用法

        除了常规的导入模块的语法 import 模块名,Python还提供了其他用法,如下所示:

1.导入模块并给模块起别名:

import 模块名 as 别名
  from md import money as m
    from md import read1 as r1
    from md import read2 as r2
    import md

    def read1():
        print('from read1')
    read1()
    r1()

    md.read1()

2.导入模块中的指定函数或变量: 

from 模块名 import 函数名/变量名

3. 连续导入

    import md
    import time
    import os
    import sys
    
    import md,time,os,sys

4.导入模块中的所有函数和变量:

from 模块名 import *
from md import *
    from md import *
    read1()
    change()

__all__ = ['money', 'read1', 'change']

 5.判断模块是否是主程序:(判断执行函数还是导入函数)

if __name__ == '__main__':
    # 在此处编写主程序的代码
5.1判断文件类型(执行文件、导入文件)
if __name__ == '__main__': # md
    read2()

if __name__ == '__main__':
    '''在这个判断里面写的代码,只有是以执行文件运行的时候,才会被执行,当被当成导入文件的时候,不会被运行'''

这个用法通过两种方式执行Python代码:

        一种是作为脚本执行,另一种是作为模块导入。当脚本被执行时,__name__被赋值为__main__,如果它是作为模块导入,__name__被赋值为模块名。这个用法可用于在模块中定义或测试函数。

        另外,在Python中,标准库中有一些特殊的模块,如timeossys等,这些模块通常不需要安装即可直接使用。

6 循环导入

        循环导入是一种常见的Python问题,它发生在两个或多个模块中导入彼此的情况下。如果不处理循环导入,程序可能会遇到导入错误或无限递归。

以下是一些处理Python循环导入的方法:

  1. 重新组织代码结构:重构代码结构是解决循环导入的最佳方法之一。可以将共享的函数、变量和类提取到单独的模块中,以避免循环导入。

  2. 延迟导入:延迟导入是一种技术,它延迟了模块的导入。在需要导入的时候,在模块的函数或方法中导入模块,而不是在模块的顶部导入。这可以避免循环导入。

  3. 导入模块的部分:一种方法是只导入模块的一部分,而不是整个模块。例如,可以只导入模块的函数或类,而不是整个模块。这可以避免循环导入。

  4. 使用全局变量:如果必须在模块之间共享变量,可以将变量定义为全局变量。这可以避免循环导入。

总之,处理Python循环导入需要仔细的设计和策略。尽量避免循环导入,以确保程序的正确性和可靠性。

以c1c2为例:

在你编码的过程中,循环导入是不能允许出现的
如果你的代码出现了循环导入问题,那就是你的代码设计不合理,及时更正

c1 c2为导入文件,设置错误的调用方式from c2 import y,from c1 import y导致循环导入执行文件

修改后的循环导入(仅修改,无实际作用)

 

END 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值