这节我们学习模块和包,这块呢,我们在实际使用的过程中,首先保证自己会用就可以,其次也可以加深对Python代码的理解。
开始之前,那我们思考下,之前学的过变量,函数属于一个模块吗?
模块呢,就是Python程序,简单来说,就是一个.py的文件,就是属于一个模块
那说明我们之前的函数和变量都不算一个模块,毕竟一个模块可以有很多变量和函数
其实模块是包含变量、函数、类和其他可执行代码的
那为什么要有模块呢?
这里我们通俗点讲,当我们的代码编写很多的时候,如果都写在一个.py文件里,可能会有上千行代码,如果我们排查问题,或者定位具体代码,会带来很多不便
所以我们就需要用到了模块,可以把代码按功能分类, 分别放在不同的.py文件里,这样每个文件中的代码就相对较少
而且最重要的是,我们如果想使用某个模块,只需要导入该模块,就能在其他地方使用该模块的功能代码
所以在我们实际的工程代码中,是肯定分为一个个模块的
小栗子:
在一个.py文件中编写一个say函数,输出打印Helloworld,在另一个.py文件中使用该say函数,打印输出
# hello模块
def say_hello():
print("Hello!")
上边的小栗子,我们如何在另一个.py文件使用第一个.py文件中的函数呢,这就需要导入模块
先看下官方解释:import
是用于导入模块的关键字。它允许你在当前的 Python 程序中引入其他模块中定义的对象(如变量、函数和类),以便在程序中使用它们
那python中也有一些标准库模块,我们在实际中也可以直接导入使用,我们来看一下random
标准库模块
random
是 Python 标准库中的一个模块,提供了生成随机数的功能。它包含了多种函数
random.random()
:返回一个介于 0 到 1 之间的随机浮点数。random.randint(a, b)
:返回一个介于 a 和 b 之间的随机整数(包含 a 和 b)简单看下这个模块的介绍,我们来做一个题:随机生成1到100之间的一个整数
# 导入random模块
import random
# 生成一个1-100之间的随机整数
random_integer = random.randint(1, 100)
# 打印随机整数
print(random_integer)
看我们可以直接使用random的模块,那我们实际看下这个random模块吧!
ctrl+鼠标点击random可以看到进入一个random.py文件中,那说明Python官方就已经封装好了这个模块,并且我们Ctrl+shift+减号收回代码,可以看到这里边有很多变量和类还有函数
我们来做下上边的小栗子吧
# hello模块
def say_hello():
print("Hello!")
在另一个模块中使用hello模块的函数
为什么提示报错了呢?
我们在使用import导入模块的时候,如果要使用,得模块名.函数名或者模块名.变量才可以使用
# 导入hello模块
import hello
# 调用hello模块的say_hello函数
hello.say_hello()
# 执行结果
Hello!
起别名
在导入模块的时候,我们还可以用as
给模块起别名来使用
# 导入hello模块起别名 h
import hello as h
# 必须使用起别名的模块名
h.say_hello()
# 执行结果
Hello!
导入多个模块
在我们一次性导入多个模块的时候,可以直接使用逗号隔开
import math, random
那我们导入模块,还有另外一种方式
比如,我们只需要模块中的一个方法,这样我们就不需要导入该模块, 我们只需要导入模块下中的一个方法
这里还有上边的栗子,我们在使用random模块中用到了random模块中的这个函数,那我们实际来整下:
random.random()
:返回一个介于 0 到 1 之间的随机浮点数。random.randint(a, b)
:返回一个介于 a 和 b 之间的随机整数(包含 a 和 b)# 导入随机数模块
from random import randint
# 生成一个1-10之间的随机整数
print(randint(1, 10))
那我们这样导入后,还想使用random模块的random函数,可以使用吗
# 导入随机数模块
from random import randint
# 生成一个1-10之间的随机整数
print(randint(1, 10))
print(random())
# 执行结果
NameError: name 'random' is not defined
报错了,说random没有定义,所以这种我们就可以使用某个功能模块的某个成员(类、函数、变量)
同样的,这种导入模块方式,也可以起别名和导入多个成员
注意:这里只有1个模块,所以我们只能导入多个成员
起别名
在导入模块的时候,我们还可以用as
给模块起别名来使用
# 导入随机数模块
from random import randint as r
# 生成一个1-10之间的随机整数
print(r(1, 10))
导入多个成员
在我们一次性导入多个成员的时候,可以直接使用逗号隔开
from random import randint, random
导入所有成员
from...import 语法时,可以使用星号一次导入指定模块内的所有成员
# 导入随机数模块所有成员
from random import *
# 生成一个1到10之间的随机整数
randint(1, 10)
# 生成一个0到1之间的随机数
random()
模块还没记住啊,又出现了一个包,模块说的高大上,其实就是一个.py文件,那包也是一样
包呢,其实就是一个文件夹,一个目录
这块呢,我们可以在pycham中创建一个看看
发现这里有两个,一个是目录,一个是Python软件包,这里啊,其实工具已经给我们做了区分
我们先创建一个目录看看
在创建一个包看看
那很明显,包中多了一个__init__.py文件
其实呢,我们放入一个一个名为 init.py
的特殊文件,我们就告诉了Python这是一个包,可以放各个模块的代码,而如果是文件夹,那我们放入其他非代码的文件,这样就很好的做了区分
1、创建一个文件夹
2、文件夹中创建一个__init__文件
3、文件中创建其他模块
# chang模块
def chang():
print("坤坤会唱")
# tiao 模块
def tiao():
print("坤坤会跳")
# 导入tools.tiao模块
import tools.tiao
# 调用tools.tiao模块的tiao函数
tools.tiao.tiao()
# 导入chang模块
from tools import chang
# 调用chang模块的chang函数
chang.chang()
# 导入tiao函数
from tools.tiao import tiao
# 调用tiao函数
tiao()
初级:
1.导入模块的方式有几种?分别使用一下
2.导入包的方式有几种,分别使用一下
中级:
1.创建一个名为 my_1
的模块,在其中定义一个函数 hello(name)
,用于打印出"Hello, [name]!"的问候语
然后编写一个main模块,在主程序中导入
my_1
并调用hello
函数来问候你的名字
2.创建一个名为 lianxi
的包,其中包含一个模块 chuli_string
。在 chuli_string
中定义一个函数 chuli_string(text)
,用于将给定字符串反转并返回结果
然后编写一个main模块,在main模块导入
lianxi .chuli_string
并调用chuli_string
函数,将字符串 "Hello, World!" 反转并打印结果。
高级
1.生成100个8位数的uid数,100个数保证不相同,比如83423443为一个uid