python笔记09-模块和包

模块

模块定义

  • Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和 Python语句。
  • 模块让你能够有逻辑地组织你的 Python 代码段;
  • 把相关的代码分配到一个模块里能让你的代码更好用,更易懂;
  • 模块能定义函数,类和变量,模块里也能包含可执行的代码。
  • 包括:内置模块,自定义模块,第三方模块;

作用

  • 最大的好处是大大提高了代码的可维护性;其次,编写代码不必从零开始。
    当一个模块编写完毕,就可以被其他地方引用。我们在写程序的时候,也经常引用其他模块,
    包括Python内置的模块和来自第三方的模块。
  • 使用模块还可以避免函数名和变量名冲突。
    相同名字的函数和变量完全可以分别存在不同的模块中,
    因此,我们自己在编写模块时,不必考虑名字会与其他模 块冲突。
    但是也要注意,尽量不要与内置函数名字冲突。

模块导入

import

import导入模块执行的操作:
- 产生一个新的名称空间;
- 在新建的名称空间俩面执行模块(.py)的内容
- 拿到了一个模块名, 执行模块文件产生的名称空间.

import …. as …

对于导入的模块重命名

from …. import ….

from …. import ….. as ….
从模块里面导入函数, 变量, 装饰器等…..

内置模块

import getpass
    getpass.getpass()

import time
    time.sleep(2)
    time.time()
    time.ctime()

import  math
    math.pow(2,3)

import  os
    print(os.listdir('/var/log/'))

import  random
import  string
    random.random()
    random.randint(1,4)
    random.choice('hello')  # 从序列中拿出一个值出来
    random.sample(string.ascii_letters + string.digits, 4)  # 从序列中拿出指定个值出来
    random.shuffle(list(range(1,10)))   # 打乱顺序

import  functools
    functools.reduce(lambda  x,y: x+y, range(10))

自定义模块(计时器)

自定义 myTimeit 模块

import time

money = 1000

def timeit(fun): # fun_list
    def wrapper(*args, **kwargs):   # 接收可变参数和关键字参数
        start_time = time.time()
        fun(*args, **kwargs)  
        end_time = time.time()
        print("运行时间为:%.6f" % (end_time - start_time))
    return  wrapper

def hello():
    return  "hello"

__all__ = ['hello', 'timeit']

if __name__ == "__main__":
    print("这是写好的模块里面的显示...")
    print(timeit(hello))
    print(__name__)

自定义模块应用

应自定义的 myTime 模块比较 sort 和 sorted 效率

import random
# import  myTimeit
# from myTimeit import  hello
# from myTimeit import  hello as world

from myTimeit import  *

li = [random.randint(1,20) for i in range(10)]

@timeit
def li_sort_cmp():
    li.sort()
    return li

@timeit
def sorted_cmp():
    li1 = sorted(li)
    return  li1

li_sort_cmp()
sorted_cmp()

def hello():
    return "hello1"

print(hello())

print(money)

这里写图片描述

all用来控制from xxx import *导入的内容

__all__ = ['hello', 'timeit']

这里由于all里没有 money 所以报错
这里写图片描述

判断模块是否被导入, 如果没有被导入, 则执行下面的代码.
if __name__ == "__main__":
    print("这是写好的模块里面的显示...")
    print(timeit(hello))
    print(__name__)

第三方模块(itchat)

如何安装第三方模块
- pip3 install 模块名
- 通过pycharm安装模块

应用一:给手机助手发消息
import itchat
import time
import random

itchat.auto_login(hotReload=True)

while True:
    #1. 给手机助手发送消息
    itchat.send('hello', toUserName="filehelper")
    itchat.send_file('/etc/passwd', toUserName='filehelper')
    time.sleep(random.randint(1, 3))
应用二: 聊天机器人
import random
import itchat
import requests
import time

def get_tuling_response(_info):
    print(_info)
    # 网址
    api_url = "http://www.tuling123.com/openapi/api"
    data = {
        'key': '5ea0f11b5b6146239c52a47849387484',
        'info': _info,
        'userid':'wechat-robot'
    }
    # 发送数据到指定网址,获取网址返回的数据(字典数据类型)
    res = requests.post(api_url, data).json()
    # print(res, type(res))
    # 给用户返回的内容
    print(res['text'])
    return res['text']

get_tuling_response("你好!")
get_tuling_response("再见!")

这里写图片描述

在Linux里面执行shell命令

第一种方式: 可以判断命令是否执行成功; 返回值为0,执行成功;返回值不为0,执行失败
import  os
import itchat
print(os.path.sep)
res = os.system('hostnam1e')
print("res:", res)
第二种方式: 用来保存命令的执行结果
import  os
import itchat
res = os.popen('hostname').read()
print("res:", res)

@itchat.msg_register(itchat.content.TEXT)
def text_reply(msg):
    # 需求: 当文件助手发送消息, 执行发送的内容,
    #           1).  如果执行成功,[显示执行成功]:执行结果
    #           2). 反之,显示执行失败.
    # print(msg)
    if msg['ToUserName'] == 'filehelper':
        # 获取要执行命令的内容
        command = msg['Content']
        # print(command)
        #  让电脑执行命令代码
        #  如果执行成功, 返回值为0
        if os.system(command) == 0:
            res = os.popen(command).read()
            result =  "【返回值】- 命令执行成功, 执行结果:\n" + res
            itchat.send(result, 'filehelper')
        # 命令执行失败, 请重新输入命令
        else:
            result =   "【返回值】- 命令%s执行失败, 请重试" %(command)
            itchat.send(result, 'filehelper')
if __name__ == "__main__":
    itchat.auto_login(hotReload=True)
    itchat.run()

生成二维码

import  qrcode
img = qrcode.make("http://www.baidu.com")
img.save("hello.png")

执行命令会出现二维码,扫描二维码后会显示网址

模块的默认查找路径

模块的查找顺序: 内存中已经加载的模块 –> 内置模块 > sys.path目录里面的模块
内存中已经加载的模块 :
sys.modules查看, python解释器启动式默认会加载的模块内容.

 import sys
print(sys.path)

注意: 自定义,模块千万不要跟内置模块冲突.

系统目录间的分隔符,
     Linux: /var/log/messages
     Windows: C:\\Project\hello.py

包的来源

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

创建包

  • 创建包的步骤:
    创建一目录为包名;
    在该文件夹下创建 _ init _.py 文件存放包的信息,该文件可以为空;
    根据需要存放脚本文件,已编译的扩展及子包;
    可以用 import, import as, from import 等语句导入模块和包;

    eg: 创建Pack包,当import导入包时,实质时执行包里面的 _ init _.py文件

    import  Pack.myTimeit
    @Pack.myTimeit.timeit
    def fun():
        return "hello"
    fun()
    

猜你喜欢

转载自blog.csdn.net/qq_42687283/article/details/81943282