函数
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]): statements
lambda 函数
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 是第一个参数。