系统模块 sys
此模块都是运行时系统的信息
示例
自定义模块
示例:
自定义模块
#此模块中有两个数据:
# name1, name2
# 此模块有两个函数:
#def myfac def mysum
def myfac(n):
'''我是myfac 的文档字符串'''
print("正在计算%d的阶乘!" % n)
def mysum(n):
print("正在计算%d的和!" % n)
name1 = "audi"
name2 = "tesla"
print("mymod 模块被导入")
导入并测试模块
# test_mymod.py
#调用模块mymod.py
import mymod
from mymod import name1, name2
mymod.myfac(5)
mymod.mysum(100)
print(mymod.name1)
print(mymod.name2)
print('name1=', name1)
name1 = "q老师"
print('name1=', name1)
import 语句搜索模块的路径顺序
1. 搜索程序运行时的路径(当前路径)
2. Sys·path 提供的路径
3. 搜索内置模块
模块的加载过程:
在模块导入时,模声所有语句会执行
如果一个模块已经被导入,则再次导入时不会重新执行模块的语句模块的重新加载
Import mymod
Import imp
Imp . reload(mysod) # 在运行时重新加载mysod模块
模块被导入的和执行的过程?
1. 先搜索相关路径(.Py文件)
2. 判断是否有此模块对应的.py 文件,如果.pyc文件比·py文件新,则直接加载·pyc文件
3. 否则用模块·py 文件生成·pyc并加载执行
Pyc 模块的编译
编译 编译后
Mymod ·py-----àmymod·pyc--------à python3
模块的文档字符串
模块内第一个没有赋值给任何变量的字符串为文档字符串
模块__doc__ 属性:
用于绑定模块文档字符串
__file__属性
绑定模块对应的文件路径
__name__属性
__name__属性用来记录模块的自身的名字
作用:
1. 记录模块名
2. 判断是否为主模块
说明:
1.当此模块作为主模块(也就是第一个运行的模块)
运行时,__name__绑定__main__
2.当此模块不是主模块时,__name__绑定模块名(文件名去掉· py后蕞)
模块__all__列表
模块中的__all__列表是 一个用来存放可导入出属性的字符串列表
作用:
限定当用from xx x import *语句导入时,只导入__all__列表内的属性
示例:
# # __all__ 列表限定其它模块在用from mymod4 import *导入时
# # 只导入 'myfun1', 'myfun3', 'name1'
# __all__ = ['myfun1', 'myfun3', 'name1']
# def myfun1():
# print("myfun1被调用")
# def myfun2():
# print("myfun2被调用")
# def myfun3():
# print("myfun3被调用")
# name1 = 'aaaaa'
# name2 = 'bbbbbbb
模块的隐藏属性
模块中以‘_’开头的属性,在from xxx import *
导入时将不被导入,通常称为这些属性为隐藏属性
示例:
# '''此模块示意隐藏属性及其用法
# 以'_' 开头的变量名在from xxx import *语句导入时将不被导入
# '''
# def f():
# print("f函数被调用")
# def _f():
# print("_f函数被调用")
# def __f():
# print("__f函数被调用")
# name = "aaaa"
# _name = 'bbbb'
# __name = 'cccc'
随机模块 random
作用:
用于模拟或生成随机输出的模块
示例:
random模块是用于模拟或生成随机输出的模块.
import random as R
函数名 |
描述 |
R.random() |
返回一个[0, 1) 之间的随机实数 |
R.uniform(a,b) |
返回[a,b) 区间内的随机实数 |
R.randrange([start,] stop[, step]) |
返回range(start,stop,step)中的随机数 |
R.choice(seq) |
从序列中返回随意元素 |
R.shuffle(seq[, random]) |
随机指定序列的顺序(乱序序列) |
R.sample(seq,n) |
从序列中选择n个随机且不重复的元素 |
R.getrandbits(nbit) |
以长整型的形式返回用nbit位来表示的随机数 |
R.seed(a=None) |
用给定的数a设置随机种子,不给参数a则用当前时间设置随机种子 |
练习:
猜数字游戏:
随机生成一个0~100的整数,用变量x绑定
让用户输入一个数y,输出猜字游戏的结果
1) 如果y=x ,则提示‘恭喜您猜对了’,退出程序
2) 如果y>x,同提示‘您猜大了’
3) 如果y<x,同提示‘您猜小了’
让用户循环输入,直到猜对为止,同时显示用户猜数字的次数后退出程序
答案
import random
x = random.randrange(101)
n = 0
while True:
y = int(input('请输入一个整数: '))
n += 1
if y == x:
print('恭喜您猜对了!')
break
elif y > x:
print('您猜大了!')
else:
print('您猜小了!')
print('您猜了',n,'次')
print('您一共猜了', n,'次')
包(模块包)package
包是将模块以文件夹的组织形式进行分组管理的方法
作用:
将一系列模块进行分类管理,有利于访问命名冲突可以在需要时加载一个或部分模块,而不是全部模块
包示例:
mypack/
__init__.py
menu.py
games/
__init__.py
contra.py
supermario.py
tanks.py
office/
__init__.py
excel.py
word.py
powerpoint.py
创建命令:
mkdir mypack
cd mypack
touch __init__.py menu.py
mkdir games office
cd games
touch __init__.py contra.py supermario.py tanks.py
cd ../office
touch __init__.py excel.py word.py
__init__.py 文件
__init__.py 是常规包内必须存在的文件
__init__.py 会在包加载时被自动调用
作用:
编写此包的内容
在内部填写包的文档字符串
包的导入语法:
#同模块的导入规则相同
Import 包名 [as 包别名]
Import 包名·模块名 [as 模块新名]
Import 包名·子包名·模块名 [as 模块新名]
Import 包名import 模块名 [as 模块新名]
Import 包名·子包名 import 模块名 [as 模块新名]
Import 包名·子包名·模块名 import 属性名[as 属性新名]
from 包名· import *
from 包名·子包名 import *
……
练习:
1. 模拟‘斗地主’发牌
牌共54张
花色:
黑桃(’\u2664’),梅花(‘\u2663’)
方块(‘\u2665’), 红桃(‘\u2666’)
大小王
数字:
A0~10JQK
1) 生成54张牌
2) 三个人玩牌,没人发17张,底牌留三张
输入回车,打印第1个人的17张牌
输入回车,打印第2个人的17张牌
输入回车,打印第3个人的17张牌
输入回车,打印3张底牌
解:
# L = ['A'] + [str(i) for i in range(2,11)] + list('JQK')
# A = ["\u2660 ","\u2663 ","\u2665 ","\u2666 "]
# B = ["大王","小王"]
# for i in L:
# for x in A:
# B.append(x + i)
# print(B)
# print(len(B),"张牌")
# B2 = B
# import random
# random.shuffle (B2)
# print("第一个人的17张牌为:",B2[:17])
# print()
# print("第二个人的17张牌为:",B2[17:34])
# print()
# print("第三个人的17张牌为:",B2[34:51])
# print()
# print("底牌为:",B2[51:])
2. 将学生信息管理系统拆分成相应的模块:
建议:
Main.py #放主事件循环 main函数及相关函数
Menu.py #放菜单相关的函数
Studet _info.py # 放学生信息操作i相关的函数