xin 发布的文章

import asyncio
import datetime
import websockets


async def producer(ws, path):
    while 1:
        await asyncio.sleep(1)
        now = datetime.datetime.utcnow().isoformat() + "T" + '1'
        await ws.send(now)


async def now(ws, path):
    while 1:
        await asyncio.sleep(3)
        now = datetime.datetime.utcnow().isoformat() + "Z" + "3"
        await ws.send(now)


async def handler(websocket, path):
    # 协程并发执行的例子
    await asyncio.gather(now(websocket, path), producer(websocket, path), return_exceptions=True)

start_server = websockets.serve(handler, "127.0.0.1", 5678)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

hug 目前提供三种接口:

  • 本地函数调用
  • 命令行 : 基于 标准库Argparse
  • http server 基于: Falcon

字段验证:

  • 采用python3函数参数注释方式验证
  • 一个验证要么验证通过返回验证后的值, 要么抛出异常

路由:

指令:

这个指令有点魔法,可以改变默认参数的值

分开成多个文件

@hug.extend_api('/something')

测试API:

def tests_happy_birthday():
    response = hug.test.get(happy_birthday, 'happy_birthday', {'name': 'Timothy', 'age': 25})
    assert response.status == HTTP_200
    assert response.data is not None

插入排序就像打扑克牌那样, 调整手中扑克牌的顺序。

我最开始写的版本

list_ = [2,1,7,4,9,3,5]

new_list = []
for n in list_:
    if new_list:
        for j in range(len(new_list)):  # 此处不能把new_list 做为循环对象, 
                                        # 因为下文会修改new_list,改循环len()
            if n < new_list[j]:
                new_list.insert(j, n)
                break
            if j == len(new_list) -1:
                new_list.insert(j+1, n)
    else:
        new_list.append(n)

print(new_list)

参考书上的第二版本

- 阅读剩余部分 -