day13回顾
闭包 closure
装饰器
def 装饰器函数名(参数):
语句块
return 函数对象
闭包 closure
装饰器
def 装饰器函数名(参数):
语句块
return 函数对象
# 用来装饰其它函数时:
@装饰器函数名
def 函数名(参数列表):
语句块
@装饰器函数名
def 函数名(参数列表):
语句块
函数的文档字符串:
def xxxx():
"这是一个文档字符串"
def xxxx():
"这是一个文档字符串"
xxxx.__doc__ = "这是一个文档字符串"
模块 Module
模块的导入语句:
import 语句 模块名.函数名
from import 语句 函数名
from import * 语句 函数名
dir() 函数
数学模块 math
数学模块 math
day14 笔记:
时间模块 time
详见 :
python_base_docs_html/时间模块time_180407222007.html
练习:
1. 写一个程序,以电子时钟的格式显示时间:
HH:MM:SS
1. 写一个程序,以电子时钟的格式显示时间:
HH:MM:SS
2. 写一个程序,输入你的生日,
1) 计算出你出生的那天是星期几?
2)计算出你已经出生了多少天?
1) 计算出你出生的那天是星期几?
2)计算出你已经出生了多少天?
系统模块 sys
运行时系统相关的信息和函数
运行时系统相关的信息和函数
详见:
python_base_docs_html/系统模块sys_180407222006.html
python_base_docs_html/系统模块sys_180407222006.html
自定义模块
示例见:
mymod.py # 被导入模块
test.py # 主模块
示例见:
mymod.py # 被导入模块
test.py # 主模块
导入模块时的路径索引顺序:
1. 索引程序的运行时路径(当前路径)
2. 搜索 sys.path里提供的路径
3. 搜索内置模块
1. 索引程序的运行时路径(当前路径)
2. 搜索 sys.path里提供的路径
3. 搜索内置模块
模块化编程的优点:
1. 有利于多人合作开发
2. 使代码更加易于维护
3. 提高代码的复用率
4. 模块化编程有助于解决函数名和变量名冲突(重名)问题,模块内的变量的作用域为模块内全局
1. 有利于多人合作开发
2. 使代码更加易于维护
3. 提高代码的复用率
4. 模块化编程有助于解决函数名和变量名冲突(重名)问题,模块内的变量的作用域为模块内全局
模块的加载过程
1. 在模块导入时,模块的所有语句都会执行
2. 如果一个模块已经导入,则再次导入时不会重新执行模块内的语句
模块的重新加载:
import imp
imp.reload(mymod) # 重新加载已经加载过的mymod模块
import imp
imp.reload(mymod) # 重新加载已经加载过的mymod模块
模块被导入和执行的过程:
1. 先搜索相关路径找模块(.py)
2. 判断是否有此模块对应的.pyc文件,如果没有此文件,则用.py文件 生成相应的.pyc文件再进行加载
3. 如果文件已经存在,则判断.pyc文件和.py文件的修改时间,再决定是否重新生成.pyc文件
1. 先搜索相关路径找模块(.py)
2. 判断是否有此模块对应的.pyc文件,如果没有此文件,则用.py文件 生成相应的.pyc文件再进行加载
3. 如果文件已经存在,则判断.pyc文件和.py文件的修改时间,再决定是否重新生成.pyc文件
模块的编译 compile
编译 解释执行
mymod.py --->> mymod.pyc ---> python3
编译 解释执行
mymod.py --->> mymod.pyc ---> python3
模块的文档字符串 :
模块内第一行没有赋值给任何变量的字符串为文档字符
此文档字符串可以用help函数查看
模块内第一行没有赋值给任何变量的字符串为文档字符
此文档字符串可以用help函数查看
示例见:
mymod2.py
说明:
模块的文档字符串被绑定在模块的 __doc__属性上
mymod2.py
说明:
模块的文档字符串被绑定在模块的 __doc__属性上
__file__属性
用来绑定模块对应的文件路径名
示例:
import mymod2
print(mymod2.__file__)
用来绑定模块对应的文件路径名
示例:
import mymod2
print(mymod2.__file__)
模块的 __name__ 属性:
用来记录模块自身的名字
用来记录模块自身的名字
作用:
1. 记录模块名
2. 用来判断是否为主模块
1. 记录模块名
2. 用来判断是否为主模块
__name__ 说明:
1. 当此模块作为主模块(也就是第一个运行的模块)运行时,__name__绑定'__main__'
2. 当此模块不是主模块时,模块为名文件名去掉'.py'
1. 当此模块作为主模块(也就是第一个运行的模块)运行时,__name__绑定'__main__'
2. 当此模块不是主模块时,模块为名文件名去掉'.py'
模块的 __all__列表
模块中的__all__列表是一个用来存放可导出属性的字符串列表
作用:
当用from import * 语句导入模块时,只导入 __all__ 列表内的属性
示例:
见: mymod4.py
模块中的__all__列表是一个用来存放可导出属性的字符串列表
作用:
当用from import * 语句导入模块时,只导入 __all__ 列表内的属性
示例:
见: mymod4.py
模块的隐藏属性:
模块中以'_' 开头的属性,在from import * 语句导入时,将不会导入,通常称这些属性为隐藏属性
示例见:
mymod5.py
标准库模块:
随机模块 random
作用:
用于模拟或生成随机数的模块
随机模块 random
作用:
用于模拟或生成随机数的模块
模块函数说明见:
/python_base_docs_html/随机模块random_xxxx.html
/python_base_docs_html/随机模块random_xxxx.html
练习:
1. 假设可以作为密码的字符有:
A-Z
a-z
0_9
下划线
写一个程序,随机生成六位密码
8z_A63
1. 假设可以作为密码的字符有:
A-Z
a-z
0_9
下划线
写一个程序,随机生成六位密码
8z_A63
包(模块包) package
包是将模块以文件夹的组织形式进行分组管理的方法
作用:
1. 将一系列模块进行分类管理,有利于防止命名冲突
2. 可以在需要时加载一个或部分模块而不是全部模块
包示例:
mypack/
__init__.py
menu.py
games/
__init__.py
contra.py # 魂斗罗
supermario.py # 超级玛丽
tanks.py # 坦克大战
office/
__init__.py
excel.py
word.py
powerpoint.py
包的导入语法:
import 包名 [as 包别名]
import 包名.模块名 [as 模块新名]
import 包名.子包名.模块名 [as 模块新名]
from 包名 import 模块名 as 模块新名
from 包名.子包名 import 模块名 [as 模块新名]
from 包名.子包名.模块名 import 属性名[as 属性新名]
from 包名.子包名 import 模块名 [as 模块新名]
from 包名.子包名.模块名 import 属性名[as 属性新名]
from 包名 import *
from 包名.模块名 import *
from 包名.模块名 import *
练习:
1. 编写一个闹钟程序,启动时设置定时时间(小时和分钟)
到时间后打印"时间到....." 然后退出程序
2. 模拟斗地主发牌,扑克牌共54张:
花色:
黑桃('\u2660'), 梅花('\u2663'), 方块('\u2665'), 红桃('\u2666')
数值:
A2-10JQK
大小王
三个人,每人发17张牌,底牌留三张:
输入回车,打印第1个人的17张牌
输入回车,打印第2个人的17张牌
输入回车,打印第3个人的17张牌
再输入回车,打印出三张底牌
花色:
黑桃('\u2660'), 梅花('\u2663'), 方块('\u2665'), 红桃('\u2666')
数值:
A2-10JQK
大小王
三个人,每人发17张牌,底牌留三张:
输入回车,打印第1个人的17张牌
输入回车,打印第2个人的17张牌
输入回车,打印第3个人的17张牌
再输入回车,打印出三张底牌
3. 继续完成学生信息管理项目