二十·模块

本文探讨了如何在Python中通过import和from...import语句组织和引用模块,介绍了模块化编程的优势,标准库与第三方库的区别,以及如何有效利用已安装的库。通过实例展示了模块引用的规则和潜在问题。
摘要由CSDN通过智能技术生成

之前我们都是在一个py文件中写所有的代码,这样比较杂乱,就像是在一个箱子里,放了所有的生活用品一样。

我们最好是把相同功能的代码放在一个py文件中,这样分类好,有助于我们查询并管理自己的代码。

但是这就产生了一个问题,我们如何在A文件中去使用B文件的代码。

这就是我们今天[模块]要讨论的内容。


我们可以将一个py文件叫做模块,这个模块中,定义好了相关的变量和函数,方便其他文件使用。

别人可以将他们自己写好的功能的几个模块,集成起来,我们一般叫它——,把库发布到网上,可以让别人安装使用。

我们安装Python后,会自带有一些库,这些库叫标准库,是Python的官方库。

我们自己别外安装的库,叫做第三方库


在我们安装好Python后,标准库就在我们的电脑上了。

第三方库,需要我们自己安装到电脑上(安装比较麻烦,后面我们单独出一期来讲解)

之前让大家安装的Anaconda,就已经安装好了大量的常用的第三方库,可以节省大家的时间。

想要使用已经安装好的库,我们需要先引用它,然后才能使用。

引用一般使用import和from...import两种方式。


import引用

  • 首先我们新建一个模块ModelA.py

  • 然后我们再新建一个模块ModelB.py

  • 接着我们在另一个py文件中引用这两个模块,并使用它们的变量和函数

import ModelA

import ModelB

print(ModelA.add(2, 3))

print(ModelB.add(2, 3))

print(ModelA.a_parameter_1)

print(ModelB.b_parameter_2)

print(ModelB.a_parameter_3)

结果为:

6

Model_A_parameter

[6, 7, 8, 9, 10]

Traceback (most recent call last):

 File "C:/Users/MingJue/PycharmProjects/untitled/Test/test.py", line 8, in

print(ModelB.a_parameter_3)

AttributeError: module 'ModelB' has no attribute 'a_parameter_3'

  • 我们先后import了ModelA和ModelB
  • 然后先调用了ModelA的add函数(逻辑为加法),参数设置为2和3,结果是5
  • 然后再调用了ModelB的add函数(逻辑为乘法),参数设置为2和3,结果是6
  • 又打印了ModelA和ModelB的一些变量
  • 最后尝试去调用ModelB中不存在的变量,然后就报错了

通过这个例子,我们可以看出,import是直接把整个模块都引入了进来。

我们可以使用from...import的方法,只引用指定的东西


from...import引用

还是使用ModelA.py和ModelB.py。

我们修改了一下test.py的内容:

from ModelA import add

from ModelB import add

from ModelB import b_parameter_2

print(add(2, 3))

print(add(2, 3))

print(b_parameter_2)

print(ModelA.a_parameter_1)

结果为:

6

6

[6, 7, 8, 9, 10]

Traceback (most recent call last):

 File "C:/Users/MingJue/PycharmProjects/untitled/Test/test.py", line 8, in

print(a_parameter_1)

NameError: name 'a_parameter_1' is not defined

  • 我们先使用from,声明我们要从ModelA中去import引用add函数
  • 我们又使用from,声明我们要从ModelB中去import引用add函数
  • 这个时候,我们就会发现,有两个add函数!
  • 重复的函数名称,会以最后引用的add函数为主,所以结果都是2*3=6
  • 然后我们使用from,声明我们要从ModelB中去import引用b_parameter_2变量,就可以直接使用了
  • 如果我们没有引用的东西,我们是不能使用的,会报错


注意!!!

  • 我们还可以使用from ModelB import * 来引用ModelB模块中所有的东西
  • 是不是跟我们的import ModelB一样呢?其实并不是,还是有区别的
  • 假设,我们在ModelB.py模块中,使用了import ModelA,那么我们就可以在ModelB.py模块中去调用ModelA.a_parameter_1了
  • 这个时候,我们在test.py模块中,使用from ModelB import *的话,我们也可以在test.py中去使用ModelA.a_parameter_1了
  • 这是因为from ModelB import *,在引用的时候,除了会把ModelB模块中的所有变量和函数引用了,也会把ModelB模块在引用的其它模块,也引用到test.py中去。
  • 如果我们在test.py模块中,使用的是import ModelB的话,就不能使用ModelA.a_parameter_1了


之后我们会讲解一下常用的标准库函数,和第三方库的函数,都会使用到引用模块这一做法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值