函数
DolphinDB 内置函数
在 Python Session 中,DolphinDB 的绝大部分内置函数可以直接调用,无需导入任何模块。但某些 DolphinDB 的内置函数名(如:dict, set, type 等)与 Python 的函数名相同,此时系统会优先解析为 Python 的函数。
Python Parser 将 DolphinDB 中与 Python 内置函数同名的函数以及 DolphinDB 的常量对象封装在 dolphindb 库中,可在引入 dolphindb 库后调用这些函数或常量对象。
import dolphindb as ddb
x = [1,2,3,4].toddb()
type(x)
// output: dolphindb.VECTOR.INT
ddb.type(x)
// output: 4某些 DolphinDB 的内置函数支持运算符作为函数(如 expr, nullCompare 等)的入参。在 Python Parser 中,不能直接传入 Python 支持的运算符和关键字(如:not、and)作为参数,否则会因解析冲突而抛出异常。若运算符存在对应的 DolphinDB 内置函数,可替换成内置函数,见下例:
DolphinDB: fu
expr(6, <, 8)Python Parser:
expr(6, lt, 8)注意:自定义函数名不能和内置函数同名。
命名函数
Python Parser 命名函数的定义和 Python 语法保持一致,以冒号和缩进声明函数体:
def <functionName> ([parameters]):
statements例:定义了一个函数,返回小于 n 的斐波那契数列。
def fib(n):
xs = []
a, b = 0, 1
while a < n:
xs.append(a)
a, b = b, a + b
return xs
fib(2000)
// output: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597]Python Parser 自定义函数,支持指定默认参数。目前仅支持常量作为默认参数值:
def func1(a, b=1): return a+b func1(4) // output: 5
Python Parser 中调用函数时,支持按顺序提供默认参数,也支持以指定关键字的方式提供参数:
def func2(a, b=1, c=2): return a+b-c func2(4, c=4) // output: 1
注意:Python Parser 的函数暂不支持:
- 位置参数(/)。
- 星号参数(* 和 **)
- 函数里面定义类。
- 函数里面使用 import。
- 在函数内可以读取全局变量的值,但无法修改它。
聚合函数
defg 是 Python Parser 对 DolphinDB 的扩展支持,用于定义聚合函数。
defg <functionName> ([parameters]):
statementslambda 函数
DolphinDB 原生语法支持如下4种lambda 表达式 的写法:
def <functionName>(parameters): expression def (parameters): expression def (parameters) -> expression parameter -> expression
Python 原生语法不支持使用 def 定义匿名函数,也不支持识别 "->" 符号,因此 Python Parser 不支持通过上述4种方法构造 lambda 函数。
Python Parser 的 lambda 表达式书写规则及使用方法与 Python 保持一致:
lambda [arg1 [,arg2,.....argn]]: expression
高阶函数
Python Parser 可直接调用 DolphinDB 内置的高阶函数,但不支持通过符号的方式进行调用。
嵌套函数
def test_func1(x):
w = [0.1, 0.3, 0.5, 0.1].toddb()
def inner():
s = wsum(x, w)
return s
re = inner() / 100
return re
test_func1([1,2,3,4].toddb())
// output: 0.026
==========================================
def test_func2():
w = [0.1, 0.3, 0.5, 0.1].toddb()
def inner(x):
s = wsum(x, w)
return s
x = [1,2,3,4].toddb()
re = inner(x) / 100
return re
test_func2()
// output: 0.026部分应用(偏函数)
待后续版本支持。
函数装饰器
待后续版本支持。
函数调用
支持以下2种形式:
- 标准函数调用格式:
<func>(parameters) - 调用对象方法格式:
x.<func>(parameters),其中 x 是第一个参数。
