python程序开发——第七章模块与包(代码片段)

晚风(●•σ) 晚风(●•σ)     2023-01-31     156

关键词:

一、模块的定义

简单的来说,模块就是每个以.py为后缀的Python文件,可以通过在一个Python文件中导入其它Python文件,从而使用该模块中的类、函数、变量等等,模块可分为内置模块、第三方模块以及自定义模块。

每一个python文件都可作为一个模块存在,文件名即为模块名,在程序开发中,会将耦合度较低的多个功能写入不同的文件中,制作成模块,并在其它文件中以导入模块的方式使用自定义模块中的内容。

二、导入模块、调用模块

(一)import语句

通过import语句可以一次导入一个或多个模块,多个模块中各模块使用逗号隔开,如下:

import 模块
import 模块1,模块2,,模块n

另外可通过.来使用导入的模块中的类或函数,即模块名称.类名称/函数名称()的形式。
若模块名称较长,还可通过as对模块起别名,在调用时即可通过别名来调用模块中的内容,即import 模块名称 as 别名
下列python代码,这是一个名为module.py的文件,作为模块:

def input_number():
    print("HELLO WORLD!")
print("该模块被调用!")

下列python代码,这是一个名为123.py的文件,在该文件中引用module.py模块文件中的input_number()函数,即module.input_number():

import module
module.input_number()

运行结果如下:

(二)from…import语句

from…import…语句的格式如下:

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

和import语句一样,可一次导入多个类、变量或函数,中间使用逗号隔开。另外还可以通过from … import *导入模块中的全部内容。

三、标准模块库

python中自带一些标准模块库,比如sys模块、os模块、random模块以及time模块等等,以下简单地介绍这几种标准模块库。

(一)sys模块

sys模块用于python运行时的环境操作,比如
sys.agrv获取命令行参数列表,列表中第一个元素是该程序本身所在路径;
sys.path用于获取模块的搜索路径;
sys.exit()函数用于退出当前程序,其后的代码不再执行,正常退出返回值为0。
下列python代码,通过import sys引用sys模块:

import sys

print(sys.argv)
print(sys.path)
print("退出程序:")
sys.exit()

运行结果如下:

(二)os模块

os模块提供访问操作系统(OS)服务的功能,比如os.getcwd()函数用于获取当前脚本的工作路径;os.chdir()函数用于改变当前脚本的工作路径;os.remove()用于删除指定文件;
os._exit()用于终止python程序,与sys.exit()不同,sys.exit()在执行后会引发一个SystemExit异常,若捕获该异常则仍然会执行sys.exit()之后的代码。
下列python代码,通过import os引用os模块:

import os

print(os.getcwdb())

运行结果如下:

(三)random模块

random模块用于产生随机数,比如
random.random()用于返回(0,1]之间的随机实数;
random.randint(x,y)用于返回[x,y]之间的随机整数;
random.uniform(x,y)用于返回[x,y]之间的随机浮点数;
random.choice(seq)用于从序列seq中随机返回一个元素。
下列python代码,通过import random引用random模块:

import random

print(random.random())
print(random.randint(1, 10))
print(random.uniform(1, 10))
number = [1, 0, 10, -10, 3]
print(random.choice(number))

运行结果如下:

(四)time模块

time模块提供一系列关于时间处理的函数,比如
1、time.time()用于获取当前时间,可通过该函数计算程序的执行时间
下列python代码,这里计算10000!,即10000的阶乘,通过time()函数计算计算10000的阶乘所耗费的时间:

import time

begin = time.time()
print(begin)
i = 1
result = 1
while i <= 10000:
    result = result * i
    i = i + 1
end = time.time()
print(end)
spend_time = end - begin
print(f"程序执行时间为:spend_time")

运行结果如下:

2、time.sleep(secs)函数使程序进入休眠态,休眠时间由secs参数决定,单位为秒,通过该函数可使程序中某个功能代码设置休眠时间,即设置一段时间间隔后执行;
下列python代码,通过random和time模块库,使用random.choice()函数随机选择列表中的一个元素,使用time.sleep(2)表示每隔2秒执行一次循环,另外remove() 函数用于移除列表中某个值的第一个匹配项:

import random, time

class_name = ["1班", "2班", "3班", "4班"]
for i in range(len(class_name)):
    if len(class_name) != 0:
        name = random.choice(class_name)
        print(f"本次随机选择的班级是:name")
        class_name.remove(name)
        print(f"被选择的name已被移除,2s后将进行下一次随机选择!")
        time.sleep(2)
print("已随机选择完成!")

运行结果如下:

3、time.strptime()函数用于将一个时间格式的字符串解析为时间元组,而time.mktime()函数用于将时间元组转换为秒数,通过这两个模块函数即可自定义时间戳
下列python代码,time…strptime()函数将2021-11-10 22:21:41转换为时间元组,time.mktime()函数将时间元组转换为时间戳:

import time

str_time = "2021-11-10 22:21:41"
time_struct = time.strptime(str_time, "%Y-%m-%d %H:%M:%S")
print(time_struct)
timestamp = time.mktime(time_struct)
print(timestamp)

运行结果如下:

四、模块导入特性

(一)__all__属性

通过在python模块的开头定义一个__all__属性,可以说这个属性是一个列表,其中包含的元素规定了在通过使用from…import*语句导入模块时所包含的模块内内容。
下列python代码,module.py模块中设置了__all__属性,即规定导入该模块时只能使用out_number和out_page两个函数:

#module.py模块
__all__ = ["out_number", "out_page"]


def out_word():
    print("HELLO WORLD!")


def out_number():
    a = input("请输入一个数字:")
    print(f"输入的数字为a")


def out_page(x, y):
    return x * y

下列python文件test.py中导入module模块:

#test.py
from module import *
print(out_page(2, 0))
out_number()
out_word()

这里使用了out_word(),所以程序会报错,显示未定义:

正确的运行结果如下,去掉out_word() ,因为module.py模块中__all__属性中只允许使用out_number和out_page两个函数:

(二)__name__属性

__name__属性用于在导入一个模块时,使该模块中的某一程序块不执行,通常该属性与if-else语句共同使用,若当前模块是启动模块,即非测试时,设定其值为__name__=="__main__"

__name__属性用于在项目开发整合前避免项目运行时执行测试代码。

下列python代码,使用if-else条件语句:

#module.py模块
def out_word():
    print("HELLO WORLD!")


def out_number():
    a = input("请输入一个数字:")
    print(f"输入的数字为a")


def out_page(x, y):
    return x * y


if __name__ == "__main__":
    out_word()
    print(out_page(2, 0))
    out_number()
else:
    print("另一模块")

运行结果如下:

在另一个模块,即test.py中导入该模块:

#test.py模块
from module import *

out_word()
print(out_page(2, 0))
out_number()

运行结果如下,可看到“另一模块”:

五、dir() 模块查找函数

dir()函数是一个内置函数,可以通过它查找到模块内所有定义的名称,并且以字符串列表的形式返回。

#module.py模块
__all__ = ["out_number", "out_page"]


def out_word():
    print("HELLO WORLD!")


def out_number():
    a = input("请输入一个数字:")
    print(f"输入的数字为a")


def out_page(x, y):
    return x * y

查找module模块中所有定义的名称,可分为有参和无参,无参时则会返回所有定义的名称:

#test.py
import module

print(dir())
print(dir(module))

运行结果如下:

六、包

(一)包的定义

为了更好理清python代码,根据不同类别将模块归类划分,并将功能相近的模块放在同一个目录下,使其层次化,从而形成了包,包是一个包含__init__.py文件的目录,且该文件必须存在但可以为空,另外目录下还有子包以及一些模块。

包的存在可在一定程度上避免合作开发中模块重名的问题,包中的init文件作用是标识当前目录是一个python包以及模糊导入,即当该文件中没有声明__all__属性时,则使用from…import*导入的内容为空。

(二)包的创建

这里只介绍PyCharm中如何创建一个包的步骤,版本为 Community Edition 2021.2.1。
1、点击左上角的新建:

或在项目中右键新建:

2、选择python软件包(python package),点击设置文件名称。

3、可在项目栏看到创建的package1软件包。
可以展开看到有个默认的__init__.py文件:

(三)包的导入

包的导入与模块的导入一样,使用import语句以及from…import语句,但在导入包中的模块时,使用时需要在模块名称前加上包的名称,即包的名称.模块名称,若是使用已导入模块中的函数则通过包的名称.模块名称.函数名称实现。
下列python代码,创建package1软件包,其中包括__init__.py文件、module1.py和module2.py文件:

#__init__.py
#module1.py
def out_word():
    print("HELLO WORLD!")

#module2.py
def out_number():
    a = input("请输入一个数字:")
    print(f"输入的数字为a")


def out_page(x, y):
    return x * y
    

项目栏中:

使用另一个模块test.py导入该包,且通过import语句导入该包:

#test.py
import package1.module1
import package1.module2

package1.module1.out_word()
package1.module2.out_number()
print(package1.module2.out_page(2, 3))

运行结果如下:

python笔记——模块与包(代码片段)

模块1、定义:在python中一个扩展名为.py的文件就是一个模块2、结构:一个python程序有多个模块(.py文件),一个模块可以包含多个函数、类和语句。3、使用模块的好处方便其他程序和脚本的导入和使用(不用在意... 查看详情

模块与包(代码片段)

...复用模块里的功能。一个模块就是一个包含了一组功能的python文件,比如spam.py,模块名为spam,可以通过importspam使用。在python中,模块的使用方式都是一样的,但其实细说的话,模块可以分为四个通用类别:1.使用python编写的.py文... 查看详情

模块与包(代码片段)

一、模块常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀,但其实import加载的模块分为四个通用类别:使用python编写的代码(.py文件)已被编译为共享或DLL的C或C++扩展包好一组... 查看详情

第一篇:python的模块与包(代码片段)

...,我们的程序可以导入模块来复用模块里的功能。每一个Python脚本.py文件都可以被当成是一个模块。模块以磁盘文件的形式存在。当一个模块变得过大,并且驱动了太多功能的话,就应该考虑拆一些代码出来另外建一个模块。模... 查看详情

python--模块与包(代码片段)

...rt *import模块名 as别名from模块名import功能名as别名#Python中的模块就是可以将别人写好的,或者自己以前写好的功能直接导入新的文件或工程内,导入后可以直接调用例如:randomtimeos​#我们没有实现模块中的功能,但是 查看详情

模块与包(代码片段)

模块一个模块就是一个包含了一组功能的python文件,比如spam.py,模块名为spam,可以通过importspam使用。 模块的4种存在方式1.使用c编写并链接到python解释器的内置模块2.使用python编写的。py文件3.包:一堆py文件集合体q4.已被编... 查看详情

python模块与包(代码片段)

1.构建一个模块的层级包在文件系统上组织你的代码,并确保每个目录都定义了一个__init__.py文件graphics/__init__.pyprimitive/__init__.pyline.pyfill.pytext.pyformats/__init__.pypng.pyjpg.py以下三种导入包形式:importgraphics.primitive.linefro 查看详情

python中的模块与包(代码片段)

目录1模块1.1.导入模块1.1.1导入模块的方式1.1.2导入方式详解1.1.2.1import1.1.2.2from..import..1.1.2.3from..import*1.1.2.4as定义别名1.2.制作模块1.2.1定义模块1.2.2测试模块1.2.3调用模块1.2.4注意事项1.3.模块定位顺序1.4.`__all__`2包2.1制作包2.1.... 查看详情

python-模块与包(代码片段)

...文件夹,就是你之前写的代码有功能的都可以叫模块1、python模块的历史python刚开始的时候,所有搞其他编程语言的的程序员都看不起,甚至给起了python器起了个外号叫:调包侠(贬义词)随着时间的发展项目的复杂度,上面的... 查看详情

模块与包--未完成整理(代码片段)

...】【发布模块】【安装模块】【使用自定义模块】:告诉Python解释器去哪寻找模块,以使用自己定义的模块。  Python解释器会搜索系统环境变量中的目录寻找模块文件。  可以把自己的模块放到系统环境变量中的某一个目录... 查看详情

模块与包之间的调用(代码片段)

一.模块定义:如果你从Python解释器退出再进入,那么你定义的所有的方法和变量就都消失了。为此Python提供了一个办法,把这些定义存放在文件中,为一些脚本或者交互式的解释器实例使用,这个文件被称为模块。模块可以分为... 查看详情

✍python模块与包保姆式教学,新手快速入门(代码片段)

...x1f473;前言这是新手教程的第四期了,前面已经出过了Python的基础入门、面向对象编程和正则三期,今天的内容是Python的模块与包。如果你还没有看过前面的教程,有时间可以回去看一下,欢迎订阅我的专栏,... 查看详情

模块与包(代码片段)

...ort...循环导入问题解决方案一解决方案二模块的搜索路径Python文件的两种用途为什么要有模块面条版代码--》函数版代码--》文件版代码(模块)--》文件夹版(包)代码会变得更加简洁,清晰,模块化一个模块里会有多个函数,... 查看详情

✍python模块与包保姆式教学,新手快速入门(代码片段)

...x1f473;前言这是新手教程的第四期了,前面已经出过了Python的基础入门、面向对象编程和正则三期,今天的内容是Python的模块与包。如果你还没有看过前面的教程,有时间可以回去看一下,欢迎订阅我的专栏,... 查看详情

模块与包的定义os模块(代码片段)

...os求求文件夹是不行的 可以求文件 因为文件夹在python中最大就是4096个字节所以你必须求出文件夹内的文件的大小相加   os.getcwd()获取当前工作目录,即当前python脚本工作的目录路径os.chdir("dirname")改变当前脚 查看详情

模块与包&常用模块(代码片段)

...      3.第三方模块模块的表现形式:  1.使用python编写的py文件  2.已被编译为共享库或DLL的C或C++扩展  3.把一系列模块组织到一起的文件夹(ps:文件夹下有一个__init__.py文件,该文件夹称为包)  4.使用C编写并... 查看详情

草根学python模块与包(代码片段)

前言之前的文章都是使用SublimeText来编写Python的,主要是为了更好的熟悉和了解Python,可是开发效率不高,也不方便,从这章开始,改为使用Pycharm了,在之前的篇节集成开发环境(IDE):PyCharm中介绍... 查看详情

调用模块与包

...相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块(Module)。使用模块有什么好处?最大的好处是大大提高了代码的可维护性。其次,编写代码不必从零开始。当一个模块编写 查看详情