2021.02.20学习总结

7:30~7:35 学习打卡

年兽走了…

8:30~11:30 学习Python

Python

今天主要看了一下python的函数式编程。
因为python变量没有类型,它可以指向任何对象,包括函数。所以,函数可以被看作是变量一样(类似于c里面的函数指针)。

闭包函数

基于python的特性,python可以非常方便的实现 闭包函数
什么是闭包? ,当一个函数的返回值是另外一个函数,而返回的那个函数如果调用了其父函数内部的其它变量,如果返回的这个函数在外部被执行,就产生了闭包。

装饰器

如果我们想增加扩展一个函数的功能,但是不改变该函数函数的代码,我们怎么实现?,可以利用 装饰器(decorator)

装饰器的思想就像是,在原本完美的一个东西上面添加一些装饰物品,达到锦上添花的效果。
由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数:

def log(func):
    def wrapper():
        print('call %s():' % func.__name__)
        return func()
    return wrapper
    
 def now():
    print('2021-2-20')
    
 now = log(now)

这样的话,如果我们调用now():

execute now():
2015-3-25

我们并没有改变now函数的代码,但是我们达到了扩展的功能。

Python装饰器的语法糖

如果我们要用log函数装饰now函数,我们可以这样写:

now = log(now)

但是python有更加便于理解的写法:

def log(func):
    def wrapper():
        print('call %s():' % func.__name__)
        return func()
    return wrapper
    
 @log()   
 def now():
    print('2021-2-20')

这样可以清楚的知道log函数是一个装饰器,用来装饰now函数。
像这种简化代码的语法规则,大家喜欢叫它语法糖。

12:00~19:00 Nonebot2框架

Nontbot2是基于异步协议的一个Python聊天机器人框架,结合之前学了一点的go-cqhttp,两者一起可以实现QQ聊天机器人的功能。

Nonebot2官网
go-cqhttp官网

关于go-cqhttp和Nonebot2的安装和配置官方文档有详细介绍。

天气查询

下面是这些天完成的一个查天气的一个小功能(weather),以python包的形式编写的:

weather包结构:
在这里插入图片描述
__init__.py文件:

from nonebot import on_command
from nonebot.rule import to_me
from nonebot.typing import T_State
from nonebot.adapters import Bot, Event

from .data_source import get_weather_of_city

weather = on_command(
    'weather',
    aliases={'天气', '天气预报', '查天气'},
    # rule=to_me(),
    priority=5
)


@weather.handle()
async def handle_first_receive(bot: Bot, event: Event, state: T_State):
    args = str(event.get_message()).strip()  # 首次发送命令时跟随的参数,例:/天气 上海,则args为上海
    if args:
        state["city"] = args  # 如果用户发送了参数则直接赋值


@weather.got("city", prompt="你想查询哪个城市的天气呢?")
async def handle_city(bot: Bot, event: Event, state: T_State):
    city = state["city"]
    # if city not in ["上海", "北京"]:
    #     await weather.reject("你想查询的城市暂不支持,请重新输入!")
    city_weather = await get_weather_of_city(city)
    await weather.finish(city_weather)

调用天气API

data_source.py文件:

from aiohttp import ClientSession


async def get_weather_of_city(city: str) -> str:
    #API地址
    url = 'https://www.tianqiapi.com/api'
    #请求参数
    payload = '?version=v61&appid=18563822&appsecret=eziD3wIu&city='+city
    
    async with ClientSession() as sess:
        async with sess.post(url+payload) as response:
            res_payload = await response.json()
            # print(res_payload)
            date = str(res_payload['date']).split(sep='-')
            res = f"今天是{date[0]}年{date[1]}月{date[2]}号,{res_payload['week']}\n" +\
                  f"{res_payload['city']}天气:{res_payload['wea']}\n当前温度:{res_payload['tem']}°\n" +\
                  f"{res_payload['air_tips']}\n" +\
                  f"上次天气更新时间:{res_payload['update_time']}"

    return res

data_source.py是用来获取天气信息的,信息来源于一个免费提供天气API的网站:
天气API

最终效果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值