---
source_url: https://docs.dolphindb.cn/zh/progr/lambda.html
fetched_at: 2026-05-19T09:02:38Z
category: progr
title: Lambda 表达式
sha1: 8159b761507a51a339d9dfef402e58e82e0cbdd9
---

# Lambda 表达式

Lambda 表达式是只有一个语句的函数。

## 语法

`def <functionName>(parameters):
expression`

或

`def (parameters): expression`

或

`def (parameters) -> expression`

或

`parameter -> expression`

## 详情

Lambda 函数既可以是命名函数，也可以是匿名函数。它可以接收任意数量的参数，但只能有一个表达式。在以上语法中，第二、三、四种语法定义了匿名的 Lambda
函数，但第四种语法仅适用于只有一个参数的情况。匿名的 Lambda 函数有以下用法：

- 赋值给一个变量，如 `f=def(x):x*x`。
- 作为函数的参数，如 `each(def(a,b):a+b, 1..10, 2..11)`。
- 作为函数的返回值，如 `def(x){return def(k): k*x}`。
- 使用 {} 封装后，除以上用法外还支持：

  - 作为函数，接收一个参数，如 `{x->x*x}(10)`
  - 作为运算符。单目运算符的优先级低于双目运算符，如 `{x->x*x} 10 {x,y->x+y} 1`
    的执行顺序是先执行 `10 {x,y->x+y} 1`，得到结果11后，再执行
    `{x->x*x}` 11，结果为121。
  - 与高阶函数模式符号搭配使用，如`{x->x*x + x}:E matrix(1 2 3, 4 5
    6)`。
  - 以 `object.method()` 的方式调用。

## 例子

```dolphindb
def f(x):x pow 2 + 3*x + 4.0;
f(2);
```

返回：14

```dolphindb
def orderby(x,y): x[isort y];
t=table(3 1 7 as id, 7 4 9 as value);
orderby(t, t.id);
```

得到：

| id | value |
| --- | --- |
| 1 | 4 |
| 3 | 7 |
| 7 | 9 |

以 `object.method()` 的方式调用 lambda 函数：

```dolphindb
v = 1..6
v.{x->x*x+1}()
// output: [2,5,10,17,26,37]
```

此方式也可与高阶函数搭配使用。如下例中，需要对矩阵按行应用 lambda 函数，可搭配高阶函数 byRow(:H)
来实现。

```dolphindb
m = matrix(1 2 3, 4 5 6, 7 8 9)
m.{x->cumavg(x)*x+x}:H()
```

结果为：

|  |  |  |
| --- | --- | --- |
| #0 | #1 | #2 |
| 2 | 14 | 35 |
| 6 | 22.5 | 48 |
| 12 | 33 | 63 |

```dolphindb
each(def(a,b):a+b, 1..10, 2..11);
// output
[3,5,7,9,11,13,15,17,19,21]

g = def (x,y) -> log(x) + y pow 2;
g(e,0);
// output
1

each(x->x+1,1 3 5)
// output
[2,4,6]
```

作为函数的返回值时：

```dolphindb
def f1(x){return def(k): pow(x,k)}
f1(1)
//output: {def (x, k)->power(x, k)}{1}

f1(1)(10)  
//output: 1
```

通过 {} 封装后直接作为函数使用：

```dolphindb
{x->x*x}(2)
//output: 4

//封装一个聚合函数
{defg(x)-> sum(x)/max(x)}(2 5 6)
//output: 2
```

通过 {} 封装后也可作为运算符使用：

```dolphindb
{def(x):x*x} 4
//output: 16
```

当 lambda 函数作为运算符时，双目运算符的优先级与乘法和除法相同，单目运算符具有最低优先级：

```dolphindb
2 *{x->x*x} 10 {x,y->x+y} 1 
//output: 242
```

作为单目运算符时，可以多个运算符连用：

```dolphindb
{x->x*x}{x->x+1}{x->x*2} 10
//output: 441
```
