python学习笔记之模块与包

一、模块

       在python中,一个文件就称之为一个模块(module)。这样大大提高了代码的可维护性,又使得我们的代码不必从零开始,当一个模块编写完毕,就可以被其他地方引用。

import time
import functools                                                                                                              
def add_log(fun):                                                                                                             
    @functools.wraps(fun)      # 不会改变原函数的属性;                                                                                  
    def wrapper(x, y):                                                                                                        
        start_time = time.time()                                                                                              
        res = fun(x, y)                                                                                                       
        end_time = time.time()                                                                                                
                                                                                                                              
        #time.ctime()  获取系统字符串时间                                                                                              
        print("[%s] 函数名: %s 运行时间:%s  运行返回值结果: %s" % (time.ctime(),fun.__name__, end_time - start_time,res))                   
    return wrapper                                                                                                            
                                                                                                                              

        在段程序中我们使用imoprt 关键字导入了time和functools模块。

        在python中的模块分为了三类:

            1、内置模块 :random,sys,time,collections,functools,inspect 等等

            2、自定义模块 :自己写的模块

            3、第三方模块 :pypi.python.org; itchat,qrcode等等

        我们调用模块当然存在解释器的路径指示,我们使用模块import sys模块来查看内置模块的搜素路径,即内置模块的查找路

  径。

    import sys
    print(type(sys.path))
    for char in sys.path:
        print(char)

 输出:

    <class 'list'>
    /root/PycharmProjects/day07
    /root/PycharmProjects
    /usr/local/python3/lib/python36.zip
    /usr/local/python3/lib/python3.6
    /usr/local/python3/lib/python3.6/lib-dynload
    /root/PycharmProjects/venv/lib/python3.6/site-packages
    /root/PycharmProjects/venv/lib/python3.6/site-packages/setuptools-28.8.0-py3.6.egg
    /root/PycharmProjects/venv/lib/python3.6/site-packages/pip-9.0.1-py3.6.egg

        从上面我们可以看到,sys.path 是一个列表,列表中存储着所有的搜素内置模块的路径。当我们使用

import 关键字时,解释器就会从上面这些路径中寻找我们的模块。因此我们可以更改列表来添加自己自定义的

搜索路径,例如:

    sys.path.append('/root/Desktop')
    sys.path.insert(0,'/mnt')
    print(type(sys.path))
    for char in sys.path:
        print(char)

输出:

    <class 'list'>
    /mnt
    /root/PycharmProjects/day07
    /root/PycharmProjects
    /usr/local/python3/lib/python36.zip
    /usr/local/python3/lib/python3.6
    /usr/local/python3/lib/python3.6/lib-dynload
    /root/PycharmProjects/venv/lib/python3.6/site-packages
    /root/PycharmProjects/venv/lib/python3.6/site-packages/setuptools-28.8.0-py3.6.egg
    /root/PycharmProjects/venv/lib/python3.6/site-packages/pip-9.0.1-py3.6.egg
    /root/Desktop

        我们自定义的搜索路径已经被加了上去,当然如果们需要删除某个搜素路径,我们可以使用列表的所有的删除方法,list.remove()   list.pop()  list.del()  方法。

 练习:

        安装并调用itchat 模块实现如下功能:

        1、给自己的微信助手每隔一秒随机发送一个自己微信好友的账号。

        2、统计自己的微信好友的男女个数

    import random    
    import itchat
    import time
    def send_message_to_filehelper():
        for friends in infor[1:]:
            itchat.send(friends['NickName'],toUserName='filehelper')
            time.sleep(random.random())
        print('完成!!!')

    def sex_proportion():
        male = female = other = 0
        for friend in infor[1:]:
            if friend['Sex'] ==1:
                male +=1
            elif friend['Sex'] == 2:
                female +=1
            else :
                other +=1
        print("总好友个数:%d" %(len(infor[1:])))
        print("男性好友:%d" %(male))
        print("女性好友:%d" %(female))
        print("其他:%d" %(other))

    itchat.auto_login(hotReload=True)
    infor = itchat.get_friends()
    sex_proportion()
    send_message_to_filehelper()

二、包

       如果不同的人编写的模块名称相同怎么办?为了避免模块名冲突,Pyhton 又引入了按目录来组织模块的方法,称为包(Package)

        包的创建步骤:

               创建一目录为包名;

               在该文件夹下创建__int__.py文件存放包的信息,该文件可以为空;

               根据需要存放脚本文件,已编译的扩展及子包;

               可以使用import ,import as ,from import 等于剧导入模块和包;

                

                我们在这个包下创建一个名为package的包添加add.py文件,并将下面一段代码放入该文件中

                

    import time
    import functools
    def add_log(fun):
        @functools.wraps(fun)      # 不会改变原函数的属性;
            def wrapper(x, y):
            start_time = time.time()
            res = fun(x, y)
            end_time = time.time()

            #time.ctime()  获取系统字符串时间
            print("[%s] 函数名: %s 运行时间:%s  运行返回值结果: %s" % (time.ctime(),fun.__name__, end_time - start_time,res))
        return wrapper

    @add_log
    def add(x,y):
        return x+y

    values = 100

    if __name__ == '__main__':
        add()

    在与pack01的同级目录下创建一个.py文件,通过该文件对包进行导入。

    方式一: 

 from pack01 import add
 print(add.values)
 print(add.add(10,9))
    方式二:
 import pack01.add
 print(pack01.add.add(2,3))
 print(pack01.add.values)
    方式三:
 from pack01.add import values
 from pack01.add import add
 print(add(2,3))
 print(values)
    方式四:    这种方式不建议使用,因为当变量不加作用域时,容易冲突
from pack01.add import *   #导入模块文件中的所有变量及函数
print(add(2,3))
print(values)

猜你喜欢

转载自blog.csdn.net/m0_37717595/article/details/80329357