当前位置: 首页 > news >正文

Python学习基础笔记七十——模块和库1

模块和库:

一个python代码文件就实现了功能。功能比较单一。

在企业中,项目开发的文件,可能有成百上千个。

不同的代码文件,实现了不同的功能模块,就像一块块积木一样。这些功能文件整合起来,实现一个完整的软件。

在python中,一个代码文件,也就是一个.py文件,我们也叫它一个模块(module)。

a.py 文件,我们称之为模块a。

b.py文件,我们称之为模块b。

模块就是代码文件的意思。

模块之间的调用:

那么代码模块之间是怎么互相联系的呢?

案例:输入总费用和聚餐人数,计算人均费用的功能。单独实现一个模块文件aa.py

fee = input('请输入午餐费用: ')
members = input('请输入聚餐人员姓名,以英文逗号,分隔:')memberlist = members.split(',')headcount = len(memberlist)avgfee = int(fee) / headcountprint(avgfee)

放到列表中,是为了得到人数。 

但是,我们需要将每次账单记录到文件中,这样才能定期进行结算。

我们可以创建另外一个模块文件save.py, 在里面定义一个函数,该函数实现记录消费信息到文件的功能。

def savetofile(memberlist, avgfee):with open('record.txt', 'a', encoding='utf8') as f:recorditem = [f'{member}:{avgfee}' for member in memberlist]f.write(' | '.join(recorditem) + '\n')

聚餐人数的列表和平均费用。

a是文件的追加模式。

通过列表推导式,产生    人员列表:平均费用  这样的列表项。

然后还使用了|分隔符。

就这段代码,也有很多内容值得我们学习的。

现在aa.py和save.py两个模块文件。

方法一:

在aa.py里面通过import关键字导入模块save。

import save

导入save模块。模块文件对象。

导入后,save模块就成为模块aa中的一个变量,对应一个模块对象。

模块也是一个对象。

save.savetofile(memberlist, avgfee)

使用save模块中里面的savetofile函数。

到save模块找savetofile的名字,这个名字对应的是一个函数。

方法二:

还可以在aa.py里面通过from import 关键字导入其他模块里的标识符(或者是变量名或者是函数名等。)

from save import savetofile

导入之后,这些其他模块的变量名和函数名就称为模块aa 里面的变量名、函数名了。

这样,我们就可以直接使用它们了。

完整代码:

from save import savetofilefee = input('请输入午餐费用: ')
members = input('请输入聚餐人员姓名,以英文逗号,分隔:')memberlist = members.split(',')headcount = len(memberlist)avgfee = int(fee) / headcountprint(avgfee)savetofile(memberlist, avgfee)

一些技巧:

1)如果在一些模块文件中需要导入多个其他模块文件,可以分开写导入语句。

import aa
import bb
import cc

也可以一起导入:

import aa, bb, cc

2)如果我们要从1个模块中导入多个标识符:

from aa import func1, var1, func2, var2

3)如果到导入的1个模块中有很多个标识符:

from aa import *

通配符,把aa模块中所有可以导入的对象全部都导入了。

4)如果从两个模块中导入函数,恰好两个函数是同名的,那么我们可以使用别名。

from save import savetofile
from save2 import savetofile as savetofile2

当一个b模块从a模块导入了名字 var1 后,注意,b模块和a模块 是 各自有一个 名为 var1 的变量 , 而不是两个模块共享一个 名为 var1 的变量。

如果要在多个模块中共享同一个数据对象,并且这个数据对象的值将来可能会改变。

即使共享的只是一个数字或者字符串变量, 也应该放在一个值可以变动的对象类型中。 比如:列表, 或者后面要学习的 字典 和 自定义类型。

http://www.lryc.cn/news/193254.html

相关文章:

  • SystemVerilog Assertions应用指南 第一章(1.28章节 内建的系统函数)
  • 正则表达式(自用)
  • 大厂真题:【模拟】OPPO2023秋招提前批-小欧数组求和
  • Python括号匹配问题
  • 微信小程序备案内容常见问题汇总
  • 无人机新手防炸飞行技巧
  • webrtc opus 音频编码支持SILK和CELT模式
  • 掌握Python爬虫实现网站关键词扩展提升曝光率
  • ajax实现原理
  • 图G的拉普拉斯矩阵为什么由L=D-A定义
  • 实习项目遇到的bug
  • python selenium下载一个合适的chromedriver.exe(稳定版本)
  • RabbitMQ从0到1完整学习笔记一:《基础篇》
  • 什么是时间冒泡?
  • Go语言入门心法(三): 接口
  • leetcode:210. 课程表 II
  • [MT8766][Android12] 使用谷歌LPA实现ESIM功能的流程
  • MyBatis-Plus为简化开发而生
  • 【翻译】Efficient Data Loader for Fast Sampling-Based GNN Training on Large Graphs
  • OPUS解码器PLC
  • Rancher 使用指南
  • 百度SEO优化全攻略(提高网站排名的5个方面)
  • 华为云云耀云服务器L实例评测|华为云耀云服务器L实例私有库搭建verdaccio(八)
  • C语言之动态内存管理_柔性数组篇(2)
  • vue基础
  • 访问量突破1W,纪念一下~
  • C# 处理TCP数据的类(服务端)
  • 【Jenkins】调用API构建并钉钉通知
  • Java NIO三大核心组件
  • js数据排序方法(sort)?