模块
- 当代码量增加时,可以考虑把代码放到不同的文件里
- 每个以.py结尾的文件被称作模块文件
- 文件是代码的物理组织形式
- 模块是代码的逻辑组织形式,模块文件,将扩展名.py去掉就是模块名
创建模块名为了不冲突,可以import 一下,如果不报错,则说明该模块名已经存在,如果报错,则该模块名不存在可以使用.
导入模块
#直接导入
>>> import time
>>> time.ctime()
'Sun Nov 3 15:47:00 2019'
#从模块中导入一部分功能
>>> from random import randint, choice
>>> randint(1,100)
96
#一行导入多个模块,不常用,可读性较差
>>> import os, sys
#导入模块的同时,为模块创建别名
>>> import getpass as gp
>>> p = gp.getpass()
Password:
自定义模块
# vim ceshi.py
ce = '这是在测试'
def star(n=10):
print('#' * n)
# vim yun.py
import ceshi
ceshi.star(15)
print(ceshi.ce)
print('这是在运行')
(Pytest) [student@room9pc01 day03]$ python yun.py
###############
这是在测试
这是在运行
模块的特性
- 导入模块时,模块内的代码会被执行一遍
- 模块中的代码,希望它在作为一个脚本文件直接运行时执行;希望它被当成模块导入时,不要执行,这个时候可以使用__name_属性
- __name__是一个特殊的变量,它的值有两个
- 当程序文件直接运行时,值是__main__ - 当程序文件作为模块导入时,值是模块名
pycharm中快捷输入方式 :main tab键
案例
创建randpass.py脚本,要求如下:
- 编写一个能生成8位随机密码的程序
- 使用random的choice函数随机取出字符
- 改进程序,用户可以自己决定生成多少位的密码
import random
import sys
def mkpa(n=6): # 默认密码长度为6
all_ch = '1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'
password = ''
for i in range(int(n)):
ch = random.choice(all_ch)
password += ch
print(password)
mkpa(sys.argv[1])
(Pytest) [student@room9pc01 day03]$ python yun.py 8 # 改变密码长度为8
SwYWPxxk
(Pytest) [student@room9pc01 day03]$ python yun.py 8
7vWaYbcB
改进
import random
import sys
def mkpa(n=6): # 默认密码长度为6
all_ch = '1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'
password = ''
for i in range(n):
ch = random.choice(all_ch)
password += ch
return password
if __name__ == '__main__':
a = mkpa()
print(a)
>>> import yun
>>> yun.mkpa()
'9Man6f'
>>> yun.mkpa(6)
'Kv7IGo'
>>> yun.mkpa(9)
'pHdCCViY7'