模块
1. 什么是模块
每一个单独的py文件,本质上都是一个模块。 封装模块的目的也是为了把程序代码和数据存放起来以便再次利用 模块简答来说就是一个Py文件,里面有类,函数和变量
1.2 使用模块的方法
1.2.1 import语句
用法:import + 模块名 例子:import time;import csv 如何调用模块中的函数,变量 用法:模块名.函数;模块名.变量
test.py中的内容如下:
a = '我是模块中的变量a'
def hi():
a = '我是函数里的变量a'
print('函数“hi”已经运行!')
class Go2:
a = '我是类2中的变量a'
def do2(self):
print('函数“do2”已经运行!')
main.py中的内容如下:
import test
print(test.a)
test.hi()
A = test.Go2()
print(A.a)
A.do2()
运行结果:
#-> 我是模块中的变量a
#-> 函数“hi”已经运行!
#-> 我是类2中的变量a
#-> 函数“do2”已经运行!
1.2.2 from … import … 语句
用法: 从模块中导入一个指定的部分到当前模块(函数、变量、类名) 例子:from test import *,默认将test模块中的所有函数、变量进行全部导入
上例中的test文件不变,main中内容如下:
from test import a,hi,Go2
print(a) # 打印变量“a”
hi() # 调用函数“hi”
A = Go2() # 实例化“Go2”类
print(A.a) # 打印实例属性“a”
A.do2() # 调用实例方法“do2”
#-> 我是模块中的变量a
#-> 函数“hi”已经运行!
#-> 我是类2中的变量a
#-> 函数“do2”已经运行!
对于from … import …语句要注意的是,没有被写在import后面的内容,将不会被导入。
1.2.3 if name == 'main
用法:当运行的文件是程序的入口时,则会执行if name=='main'下的语句,相反,当运行的文件作为模块是被其他程序导入时,代码if name=='main'下的代码则不会执行
第一种情况:
story.py里面的文件内容:
sentence = '从前有坐山,'
def mountain():
print('山里有座庙,')
class Temple:
sentence = '庙里有个老和尚,'
def reading(self):
print('在讲一个长长的故事。')
main.py里面的内容:
import story
if __name__ == '__main__':
print(story.sentence)
story.mountain()
A = story.Temple()
print(A.sentence)
A.reading()
print()
#-> 输出结果:
#-> 从前有坐山,
#-> 山里有座庙,
#-> 庙里有个老和尚,
#-> 在讲一个长长的故事。
当xx.py文件被直接运行时,代码块(if下的代码块)将被运行,上面例子中“if name == 'main'” 直接被运行,所以打印了if下面的语句
第二种情况:
B.py里面的文件内容:
a = '我是模块中的变量a'
def hi():
a = '我是函数里的变量a'
print('函数“hi”已经运行!')
class Go1: # 如果没有继承的类,class语句中可以省略括号,但定义函数的def语句括号不能省
a = '我是类1中的变量a'
@classmethod
def do1(cls):
print('函数“do1”已经运行!')
class Go2:
a = '我是类2中的变量a'
def do2(self):
print('函数“do2”已经运行!')
if __name__ == '__main__':
print('是主模块的时候才会执行以下语句:')
print(a)
hi()
b = Go2()
print(Go2.a)
b.do2()
A.py里面的内容
import B
输出结果:
#-> 无
当包含“if name == 'main'”的文件被当作模块被导入时,不会执行if下面的语句。
2.0 CSV模块
官方中文教程:yiyibooks.cn/xx/python_3…
读取文件:
import csv
with open("test.csv",newline = '') as f:
reader = csv.reader(f)
#使用csv的reader()方法,创建一个reader对象
for row in reader:
#遍历reader对象的每一行
print(row)
print("读取完毕!")
写入文件:
import csv
with open('test.csv','a', newline='',encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(['4', '猫砂', '25', '1022', '886'])
writer.writerow(['5', '猫罐头', '18', '2234', '3121'])
#['4', '猫砂', '25', '1022', '886']
#['5', '猫罐头', '18', '2234', '3121']