CQL 教程/CQL 进阶/模块与导入

模块与导入

通过导入复用代码:导入标准库、Python 第三方模块,以及 CQL 自带的中文适配子包。

15.1导入 语句

导入 模块名 导入整个模块,然后通过 模块名.名字 使用其中的内容,语法与 Python 一致:

cql
# 导入 time 模块
导入 time

打印("当前时间戳:", time.time())
打印("格式化时间:", time.strftime("%Y-%m-%d %H:%M:%S"))

标准库模块名保持英文原样即可,转译器不会改写字符串与模块名。

15.2从...导入

从 模块 导入 名字1, 名字2 只导入需要的部分。注意 归约(reduce)由 CQL 运行时兜底提供,但仍需显式 从 functools 导入 reduce

cql
# 从 functools 导入 reduce
从 functools 导入 reduce

总数 = 归约(延迟 x, y: x + y, [1, 2, 3, 4, 5])
打印("归约求和:", 总数)  # 15

15.3导入中文适配子包

CQL 附带 19 个 CQ 系列中文适配子包,把热门 Python 库包装成中文 API,可以直接在 .cql 源码中使用。下面以 Web 与数据库为例:

cql
# 导入 CQFastAPI(Web 后端)
从 CQFastAPI 导入 快速应用, 查询参数, 启动服务

应用 = 快速应用()

@应用.获取("/")
函数 首页():
    返回 {"消息": "你好,CQL Web 世界!"}
cql
# 导入 CQSqlite(数据库)
从 CQSqlite 导入 连接

数据库 = 连接(":memory:")
数据库.执行("CREATE TABLE 用户(编号 INTEGER PRIMARY KEY, 姓名 TEXT)")
数据库.执行("INSERT INTO 用户(姓名) VALUES(?)", ("小明",))
数据库.提交()
打印(数据库.查询字典("SELECT * FROM 用户"))
数据库.关闭()
提示:SQL 语句本身仍使用英文关键字。SQL 并不是 Python 语法,CQL 转译器不会改写字符串中的内容。

15.4模块名大小写映射

子包名大小写均可使用:CQFastAPIcqfastapi 都行。转译器会自动把大写形式的模块名映射为实际的小写包名:

cql
# 大小写均可:转译器自动映射到小写包名
从 cqfastapi 导入 快速应用
从 cqsqlite 导入 连接
从 CQLog 导入 信息
信息("大小写混用也完全没问题")
CQL 写法实际包名底层库
CQFastAPI / cqfastapicqfastapiFastAPI
CQSqlite / cqsqlitecqsqlitesqlite3(内置)
CQHttp / cqhttpcqhttprequests + httpx
CQLog / cqlogcqlogloguru(回退 logging)

15.5安装包自动导入

使用包管理器 cqlip 安装的包会被编译缓存到 ~/.cql/cachecql run 执行时会自动把该目录加入 sys.path,因此安装后可以直接 导入

bash
$ cqlip install 我的工具
安装完成:~/.cql/packages/我的工具/
已编译:~/.cql/cache/我的工具/
cql
# 安装后直接导入使用
导入 我的工具

打印(我的工具.问候())
提示:安装时源码存放在 ~/.cql/packages/包名/,编译产物存放在 ~/.cql/cache/包名/(保持相对路径),安装完成后会自动编译全部 .cql 文件。