9.1定义与调用
使用 函数 关键字定义函数,函数体以冒号和缩进开始:
cql
函数 问候():
打印("你好,CQL!")
问候()9.2参数与返回值
函数可以接收参数,并通过 返回 把结果交还给调用方:
cql
函数 加(a, b):
返回 a + b
结果 = 加(3, 5)
打印("结果:", 结果)9.3参数默认值
参数可以带默认值,调用时不传则使用默认值:
cql
函数 问候(名字 = "世界"):
返回 "你好," + 名字 + "!"
打印(问候())
打印(问候("喵酱"))9.4关键字参数
调用时可以按参数名传值,顺序可以任意调整:
cql
函数 个人信息(姓名, 年龄):
打印(姓名, 年龄)
个人信息(年龄=18, 姓名="小明")9.5可变参数
*数值 收集任意数量的位置参数为元组,**配置 收集关键字参数为字典:
cql
函数 求和(*数值):
总数 = 0
循环 数值 在 数值:
总数 += 数值
返回 总数
打印(求和(1, 2, 3, 4)) # 10
函数 输出配置(**配置):
打印(配置)
输出配置(主机="localhost", 端口=8080)9.6中文函数名
CQL 支持中文函数名与中文变量名,让代码读起来像自然语言:
cql
函数 计算圆的面积(半径):
返回 3.14159 * 半径 * 半径
打印(计算圆的面积(2))9.7全局 与 非局部
函数内默认无法修改外部变量,使用 全局 声明后才能修改模块级变量:
cql
计数 = 0
函数 增加():
全局 计数
计数 += 1
增加()
增加()
打印(计数) # 2非局部 则用于嵌套函数中修改外层函数的变量,与 Python 的 nonlocal 语义一致。
9.8递归
函数可以调用自身,经典例子是斐波那契数列:
cql
函数 斐波那契(n):
如果 n <= 1:
返回 n
返回 斐波那契(n - 1) + 斐波那契(n - 2)
打印("第 10 项斐波那契数:", 斐波那契(10))提示:递归要注意设置终止条件,避免无限递归导致栈溢出。