什么是模块

(1)模块是从逻辑上组织python代码的形式

(2)当代码量变的相当大的时候,最好把代码分成一些有组织的代码段,前提是保证它们的彼此交互

(3)这些代码段之间有一定的联系,可能是一个包含数据成员和方法的类,也可能是一组相关但彼此独立的操作函数

(4)模块名不能乱起,字母数字下划线组成,首字母不能是数字

导入模块

(1)使用import导入模块,模块被导入后,程序会自动生成pyc的字节码文件以提升性能

(2)模块属性通过“模块名.属性”的方法调用,如果仅需要模块中的某些属性,也可以单独导入

(3)模块有一个__name__特殊属性,当模块文件直接执行时,__name__的值为"__main__",当

模块被另一个文件导入时,__name__的值就是该模块的名字
>>> import sys                 //导入sys模块
>>> import os,string        //一次导入两个模块,os,string模块
>>> string.digits              //调用模块中的方法
'0123456789'
>>> from random import randint   //只导入random模块中的randint函数
>>> randint(1,10)                            //使用randint函数
2                                                       //输出结果模块加载
(1)一个模块只被加载 一次,无论它被导入多少次
(2)只加载一次可以阻止多重导入代码时被多次执行
(3)如果两个文件相互导入,防止了无限的相互加载
(4)模块加载时,顶层代码会自动执行,所以只将函数放入模块的顶层是良好的编程习惯
if __name__ = "__main__":
     执行语句              //可以是一些测试语句,测试函数的功能
这样就可以避免导入模块的时候“执行语句”,基本写程序都会采用这样的结构
>>> import string
>>> import tab                //导入tab模块,这样就可以实现自动补齐
>>> string.lowercase       //调用string模块,产生小写字母
'abcdefghijklmnopqrstuvwxyz'
>>> string.uppercase       //调用string模块,产生大写字母
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.letters              //调用string模块,产生字母
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.digits               //调用string模块的digits属性,产生数字
'0123456789'
>>> string.__file__             //可以查看string模块的源码
'/usr/lib64/python2.6/string.pyc       //完整路径为去掉结尾  c以后的路径脚本实例
需要生成用户指定位数的随机密码
#!/usr/bin/env python

import string          //导入string模块,用于生成字符串
import random       //导入random模块,用于随机取一个字符
import sys                //导入sys,用于取位置参数

num = int(sys.argv[1])           //传递位置参数,并将字符类型转换为整型
all_chs = string.digits + string.letters    //将字母和数字组成的字符串赋值给all_chs

def mkpasswd(num):     //定义一个生成密码的函数
    pwd = ""                     //变量赋空值
    for i in range(num):    //循环执行
        pwd += random.choice(all_chs)   //直接拼接随机生成的字符串
    return pwd                        //返回pwd
if __name__ == "__main__":   //用于测试的代码,也可以用本程序输出要生成的密码
    print mkpasswd(num)

sys.argv  这个模块是用来存程序名和参数 argv(0)是程序名,argv(1)是第一个参数

脚本优化

在上面的脚本中,将生成的密码使用字符串来拼接,这样的话每次生成一位随机字符拼接以后都会开辟新的内存空间,这样来讲,效率不是很高,可以使用列表来代替,代码如下

#!/usr/bin/env python

import string
import random

all_char = string.digits + string.letters
pwd = []

def mkpwd(num=8):
    for i in range(num):
        pwd.append(random.choice(all_char))
    return "".join(pwd)

if __name__ == "__main__":
    print mkpwd()



https://blog.51cto.com/zhangdl/1828100