一、 模块:
1.概述:
为了解决维护问题,一般情况下,在一个完整的项目中,会将特定的功能分组,分别放到不同的文件中,在使用的过程中,可以单独维护,各个不同的文件之间互不影响,每个.py文件就被称为一个模块,通过结合包的使用来组织文件
封装思路: 函数 => 类 => 模块 => 包 => 项目
优点:
a.提高了代码的可维护性
b.提高了代码的复用性【当一个模块被完成之后,可以在多个文件中使用】
c.引用其他的模块【第三方模块】
d.避免函数名和变量的命名冲突
2.os模块:
提供有关于操作系统的函数,处理文件或者文件夹
基础os使用:
print(os.name)
print(os.environ)
print(os.environ.get('PATH'))
print(os.curtir)
print(os.cwd())
print(os.listdir(r'D:\pythonsj'))
os.mkdir('giao哥')
os.makedir('a/b/c')
os.rmdir('geao哥')
os.remove('hello')
os.rename('guao哥','小阿giao')
print(os.stat('giao哥/ccb.txt'))
os.path的使用
os.path.join(r'D:\pythonsj\practice\giao哥','ccb.txt'))
os.path.split(r'D:\pythonsj\practice\giao哥\ccb.txt')
os.path.getsize(r'D:\pythonsj\praction\giao哥\ccb.txt')
os.path.abspath('ccb.txt')
os.path.abspath(__file__)
dir_path = r'D:\pythonsj\practice'
file_path = r'D:\pythonsj\practice\giao哥\ccb.txt'
os.path.exists(dir_path)
os.path.exists(file_path)
os.path.isfile(dir_path)
os.path.isfile(file_path)
os.path.isdir(dir_path)
os.path.iadir(file_path)
os.path.dirname(dir_name)
os.path.dirname(file_name)
os.path.basename(dir_name)
os.path.basename(file_name)
3.自定义模块:
3.1 自定义import模块
格式:import 包1.包2.模块的名称
注意1:通过点语法区分包的层级关系
引入模块
注意2:如果要同时导入多个模块,有两种方式
方式一:
import os
import datetime
import math
注意3:当导入自定义模块的时候,需要注意包的存在
注意4:当通过import将模块导入的时候,将模块对应的文件整个加载了一遍
注意5:当模块有包的层级关系时,需要调用其中函数的时候,需要指明函数的路径
方式二
import os,math,datetime
import ccc.module
import moduleTextDemo01
ccc.module.test()
moduleTextDemo01.fun1()
moduleTextDemo01.fun2()
moduleTextDemo01.fun3()
print(moduleTextDemo01.num)
3.2 自定义from-import模块
form 模块名 import 函数名1/类名,函数名
from moduleTextDemo01 import fun1,fun2,fun3
fun1()
fun2()
fun3()
def fun1():
print("hello")
fun1()
3.3 自定义from-import*模块
下面三种导入方式完全等价:将moduleTextDemo01模块中的所有的内容全部导入
from moduleTextDemo01 import *
import moduleTextDemo01
from moduleTextDemo01 import fun1,fun2,fun3
fun1()
总结:在python中,每个py文件其实都是一个模块,如果跨模块调用函数,则采用导入的方式
将不同的功能进行划分,调用函数的时候相对比较方便的
4.name属性和dir函数:
4.1 name属性:
__name__的作用:如果不想让模块中的某些代码执行,可以通过属性仅仅调用程序中的一部分功能
【写在if判断中的代码只有当前模块被执行的时候才会被执行,检测到是其他的文件在使用当前的模块,则if语句中的代码不会被执行】
def fun1():
print("aaa")
def fun2():
print("bbb")
def fun3():
print("ccc")
if __name__ == "__main__":
fun1()
fun2()
fun3()
4.2 dir函数:
import math,moduleTextDemo01
print(dir(math))
print(dir(moduleTextDemo01))
二、目录遍历:
import os
def getAll(path):
fileList = os.listdir(path)
print(fileList)
for i in fileList:
filePath = os.path.join(path,i)
if os.path.isdir(filePath):
getAll(filePath)
else:
print("文件:",i)
getAll(r"C:\Users\Administrator\Desktop\SZ-Python")
三、包:
包:初期理解为文件夹
作用:一种管理Python模块命名空间的形式,采用"点语法" os.path
包和文件夹之间的区别:Python的包中有一个特殊的文件__init__.py文件,前期里面不写任何内容,但是,就是为了告诉编译器,当前这个目录不是普通目录,是一个包
创建方式:选中工程,创建Python package
import aaa.textDemo01
import ccc.module
aaa.textDemo01.test()
ccc.module.test()
包存在的意义:在团队开发的过程中,为了解决文件命名冲突的问题,只要保证最上层的包命名不相同,就不会与别人的发生冲突
四、习题:
1.显示指定路径下所有视频格式文件, 提示: 视频格式mp4,avi,rmvb
2.
自定义模块
建立一个包
在包的下创建一个排序的模块
模块下的功能
五、上期习题答案:
- 写一个装饰器来统计函数运行的时间
import time
def showtime(func):
def wrapper():
start_time = time.time()
func()
end_time = time.time()
print('spend is {}'.format(end_time - start_time))
return wrapper
@showtime
def foo():
print('foo..')
time.sleep(3)
foo()
- 使用Python写一个按照下面方式调用都能正常工作的 my_sum() 方法
print(my_sum(2,3)) 输出 5
print(my_sum(2)(3)) 输出 5
def my_sum(*args):
def sum1(n):
return args[0] + n
if len(args) == 2:
return args[0] + args[1]
else:
return sum1
print(my_sum(1, 2))
print(my_sum(1)(2))
- 封装一个函数random_color,该函数的返回值为随机十六进制颜色。
说明: 十六进制颜色#开头后面接6个十六进制数, 例: #FFFFFF, #000000, #0033CC
import random
colors = '0123456789ABCDEF'
def random_color():
str = ''
for i in range(6):
str += random.choice(colors)
return '#' + str
print(random_color())
- 封装函数,第一个函数create_persons(), 创建并返回包含5个字典(例如:{“name”:“xx”,“age”:xx, “faceValue”:100})的列表
其中name的值:从[“张三”,“李四”,“王五”,“赵六”,“钱七”]依次取
其中age的值:10-100之间的随机整数
其中faceValue的值:0-100之间的随机整数
第二个函数get_old(), 传入第一个函数创建的列表, 找出列表中年龄最大的人,并将其所有信息打印
第三个函数sort_facevalue(), 传入第一个函数创建的列表, 根据颜值升序排列,并打印排序后的信息
提示: colors = ‘0123456789ABCDEF’
random模块
def create_persons():
import random
l1 = []
l2 = ["张三", "李四", "王五", "赵六", "钱七"]
for i in range(5):
dic = {}
l1.append(dic)
l1[i]['name'] = l2[i]
l1[i]['age'] = random.choice(range(10, 101))
l1[i]['faceValue'] = random.choice(range(101))
return l1
def get_old(lis):
a = 0
mx = lis[0]['age']
for i in range(0, 5):
if lis[i]['age'] > mx:
mx = lis[i]['age']
a = i
return lis[a]
def sort_facevalue(persons):
persons.sort(key=lambda d: d['faceValue'])
return persons
persons = create_persons()
print(create_persons())
print(get_old(persons))
print(sort_facevalue(persons))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)