模块和库:
一个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 的变量。
如果要在多个模块中共享同一个数据对象,并且这个数据对象的值将来可能会改变。
即使共享的只是一个数字或者字符串变量, 也应该放在一个值可以变动的对象类型中。 比如:列表, 或者后面要学习的 字典 和 自定义类型。