day13回顾:
装饰器:
def 装饰器函数名
创建闭包
return 闭包
@装饰器函数名
def 被装饰函数(形参列表)
pass
被装饰函数(实参列表)
函数的文档字符串:
def 函数名(...):
"文档字符串"
>>>help(函数名)
__doc__属性
函数名.__doc__='文档字符串'
模块:
模块内通常有数据,函数,类
四类模块:
内建模块
标准库模块
第三方模块
自定义模块
模块的导入语句:
import 语句
from import 语句
from import *
dir() 函数
三个模块:
math
time
sys
-----------------------------------------------------------------
day14
自定义模块
要求:
模块名后缀必须为.py结尾
模块文件名必须是合法的标识符
避免名称和内建模块名冲突
导入方式:
import 自定义模块名
from 自定义模块名 import 属性
from 自定义模块名 import *
示例见:
mymod.py
import 语句 搜索模块的路径顺序
1.搜索内建模块
2.搜索程序运行时的路径(当前工作目录)
3.搜索sys.path提供的路径
可以在sys.path里添加自定义的路径
如:
import sys
sys.path.append("/home/tarena")
import mymod
#可以导入/home/tarena/mymod.py这个模块
模块化编程的优点:
1.有利于多人合作开发
2.使代码更加易于维护
3.提高代码的复用率
4.模块化编程有利于解决函数名和变量名冲突(模块内的变量的作用域为模块内为全局)
模块的加载过程:
在导入模块时,模块的所有语句会执行
如果一个模块已经导入,则再次导入时不会重新执行模块内的语句
模块的重新加载
import mymod
import imp
imp.reload(mymod) #重新加载mymod模块
模块被导入和执行的过程:
1.搜索相关的路径找模块文件.py
2.判断是否有此模块对应的.pyc文件,如果pyc文件比.py文件新则直接加载.pyc文件,否则用.py
文件重新生成.pyc文件并加载
pyc模块的编译
编译 执行
mymod.py----> mymod.pyc------->python3
模块的预置属性
__doc__属性
绑定模块的文档字符串
模块的文档字符串是模块内的第一个没有赋值的
__file__属性
__file__用来绑定模块所对应的文件路径名
示例:
mymod.__file__
__name__属性
作用:
1.记录模块名
2.用来判断是否为主模块
说明:
1.当此模块为主模块运行时,__name__绑定'__main__'
2.当此模块不是主模块运行,而是被其他模块导入时,此模块名为模块文件.py前面的模块名
如:mymod.py 的模块名为mymod
注:
主模块是指最先被python解释执行器执行的模块
模块里的__all__列表
__all__列表是一个用来存储可导入属性的字符串列表
作用:
限制用from xxx import * 语句导入时导入部分属性,而不是全部属性
示例见:
mymod2.py
#此示例示意模块内的__all__列表的定义方式和作用
#限制别人用from import * 语句导入时,只能导入f3,var1
__all__=['f3','var1']
def f1():
pass
def f3():
pass
def f3():
f2()
var1='aaaa'
var2='bbbb'
模块的隐藏属性:
模块中以'_'开头的属性,在from xxx import * 导入时将不被导入,通常称这些属性为隐藏属性
示例见mymod3.py
#只能导入f和name1
def f():
pass
def _f():
pass
def __f():
pass
name1='aaa'
_name1='bbb'
随机模块 random
作用:
用于模拟或生成随机输出的模块
文档参见:
python_base_docs_html/随机模块
random.html
练习:
猜数字游戏:
随机生成一个0~100之间的整数,用变量x绑定让用户输入一个数y,输出猜数字的结果
1)如果y等于生成的数x,则提示‘恭喜你猜对了’
2)如果y大于x,提示‘猜大了’
3)如果y小于x,则提示'猜小了'
直到猜对为止,显示用户猜数字的次数后退出程序
import random,sys
i=0
x=random.randrange(0,10000)
while True:
y=int(input('输入0~100之间的数字:'))
i+=1
print('你总共猜了:',i,'次')
if y==x:
print('恭喜你猜对了!')
sys.exit()
elif y>x:
print('你猜大了')
else:
print('你猜小了')
包(模块包)package ------------tree 文件名-----#<显示当前文件结构>
包是将模块以文件夹的组织形式进行分组管理的方法
作用:
将一系列模块进行分类管理,有利于防止名字冲突
可以在需要时加载一个或部分模块而不是全部模块
示例:
mypack/
__init__.py
menu.py
games/
__init__.py
contra.py
supermario.py
tanks.py
office/
__init__.py
excel.py
word.py
包的导入:
同模块的导入规则基本相同
语法:
import 包名 [as 包别名]
import 包名.模块名 [as 模块新名]
import 包名.子包名.模块名[as 模块新名]
...
from 包名 import 模块名 [as 模块新名]
from 包名.子包名 import 模块名 [as 模块新名]
from 包名.子包名.模块名 import 属性名 [as 属性新名]
...
from 包名 import *
from 包名.模块名 import *
__init__.py文件
此文件是常规包内必须存在的文件,此文件会在包被导入时自动调用
作用:
编写此包的内容
在内部填写包的文档字符串
在__init__.py内可以加载此包所
包内的all列表:
作用:
用来记录此包中有哪些子包或模块在from
import *语句导入时需要被导入
说明:
__all__列表只对from xxx import *语句中起作用
示例见:
mypack/games/__init__.py
包的相对导入:
包的相对导入是指包内模块的相互导入
语法:
from 相对路径包或模块 import 属性或模块名
from 相对路径包或模块 import *
相对路径:
. 代表当前目录
.. 代表上一级目录
...代表上两级目录
...以此类推
注:相对导入时不能超出包的外部
示例见:
mypack/games/contra.py
注意避免循环导入:
见:
mypack2/
__init__.py
a.py
b.py
包的加载路径
1.当前工作路径
2.sys.path 提供的路径
模块的加载路径设置方法:
sys.path('新路径')
练习:
1模拟斗地主发牌,扑克牌54张
花色:
黑桃('\u2660'),梅花('\u2663'),红桃('\u2665').方块('\u2666')
数字:A2-10JQK
大王,小王
三个人,每个人发17张牌,底牌留3张
输入回车,打印第1个人的17张牌
输入回车,打印第2个人的17张牌
输入回车,打印第3个人的17张牌
输入回车,打印底牌3张
python基础-day14
最新推荐文章于 2025-03-09 18:23:40 发布
