# 代码
代码节点是工作流中用于执行自定义代码逻辑的节点。当工作流中需要进行数据处理、格式转换、数学计算、逻辑判断等操作，而这些操作用其他节点难以实现或用大模型处理不够准确时，可以通过代码节点编写代码来完成。代码执行的结果是确定的，相同的输入必然得到相同的输出。对于计算、格式转换等任务，代码比大模型更准确、更快、且不消耗Token。
代码节点的典型使用场景如下：
表1代码节点使用场景 
| 场景     | 示例                             |
|:---|:---|
| 数据格式转换 | 将上游节点返回的JSON数据提取、重组为下游节点需要的格式。 |
| 数学计算    | 价格计算、折扣计算、数据汇总统计等。             |
| 文本处理     | 正则匹配、字符串拼接、内容截取、编码转换等。          |
| 逻辑判断    | 复杂的条件判断、数据校验、规则匹配等。             |
| 数据清洗    | 去重、过滤、排序、字段映射等。                 |
   
#### 前提条件
已[构建工作流](https://support.huaweicloud.com/usermanual-dataartsplatform/dataartsplatform_02_0027.html)。
#### 配置代码节点
1. 在工作流编排画布中，单击"添加节点"按钮，从节点列表中选择"代码"，即可将该节点添加至当前工作流编排画布中。 
   图1添加代码节点   
   ![](https://support.huaweicloud.com/usermanual-dataartsplatform/figure/zh-cn_image_0000002741153299.png "点击放大")
   
   
2. 单击"代码"节点，在弹出的节点详情页面中进行参数配置，参考[表2]。
   
   图2代码节点配置   
   ![](https://support.huaweicloud.com/usermanual-dataartsplatform/figure/zh-cn_image_0000002741076689.png "点击放大")
   
    表2代码节点配置参数 
   | 参数    | 说明                                                                                                                                                                                                                                                                                                                                                       |
   |:---|:---|
   | 输入参数 | 输入参数用于声明代码中所使用的输入变量，每个输入参数需要和代码中定义的参数保持一致。 参数值可以直接填写一个固定的值，也可以选择引用工作流中上游节点的输出和全局配置的记忆变量。                                                                                                                                                                                                                     |
   | 输出参数  | 输出参数用于定义代码执行完成后向下游传递哪些数据，输出参数的名称和类型必须与代码中返回的键值对严格对应。                                                                                                                                                                                                                                                                                                       |
   | 代码   | - 编写代码时不要更改第一行函数定义。  - 编写Python代码片段。  - 代码最大支持58MB。   |
      
   
   
3. 单击上方的"保存"。
 
#### Python 3.11代码要求
支持Python 3.11版本及其标准库，并支持如下的非标准库，可直接在Python函数代码中声明使用。
| 模块        | 功能      |
|:---|:---|
| numpy      | 数学计算      |
| pandas       | 数据分析和处理 |
| matplotlib | 数据可视化及绘图 |
   
示例：
```
def main(params: dict) -> dict:
    """
    Python节点代码必须包括且只包含一个main函数，该main函数为代码执行的入口函数，
    且参数和返回值类型为dict，且是单参数和单值返回，该节点的输入和输出参数均由dict类型表示，
    参考样例参数说明：输入参数为：input_param1和input_param2, 输出参数为：out_param
    :param params: 输入参数字典，只有一个字典类型的参数，节点定义的参数由该字典参数表示
    :return: 返回参数字典，节点定义的输出参数由返回的字典表示，且是单值返回
    """
    input_param1 = params.get('input_param1', 102)
    input_param2 = params.get('input_param2', 101)
    return {
    "out_param": input_param1 + input_param2
    }
```
- 平台通过固定的main函数触发代码执行，函数名不可修改。
- 输入参数args是一个字典（dict），包含了在代码节点界面配置的所有输入参数，以参数名为key、参数值为value的键值对形式传入。通过args.get('参数名', '默认值') 读取，建议始终设置默认值，避免参数缺失时报错。
- 返回值是一个字典（dict），直接return即可，无需做JSON转换。返回字典中的key必须与代码节点界面配置的"输出参数"名称完全一致（区分大小写），否则下游节点将无法获取到对应的值。
- 在代码节点界面的"输出参数"区域配置的参数名，必须与代码return字典中的key对应。
- 编写约束：
  ```
  入口函数名必须是main，接收一个dict参数，返回一个dict
  直接返回字典即可，无需json.dumps()转换 
  即使只有一个输出字段，也必须以字典形式返回  
  ×  return "hello"  
  √  return {"message": "hello"}
  ```
  
 
