
# Python函数开发概述
FunctionGraph目前支持以下Python运行环境。
- Python 2.7
- Python 3.6
- Python 3.9
- Python 3.10
- Python 3.12
#### Python函数接口定义
Python函数的接口定义如下所示。
```
def handler (event, context)
```
- 入口函数名（handler）：入口函数名称，需和函数执行入口处用户自定义的入口函数名称一致。
- 执行事件（event）： 函数执行界面由用户输入的执行事件参数， 格式为JSON对象。
- 上下文环境（Context）：Runtime提供的函数执行上下文，其接口定义在[SDK接口]说明。
Python函数的函数执行入口参数格式为：**\[文件名\].\[函数名\]** ，请参考[函数执行入口](https://support.huaweicloud.com/devg-functiongraph/functiongraph_02_0420.html#functiongraph_02_0420__fig1011811497293)通过FunctionGraph控制台进行配置。
#### Python的initializer入口介绍
关于函数初始化入口Initializer的具体介绍请参考[函数初始化入口Initializer](https://support.huaweicloud.com/devg-functiongraph/functiongraph_02_0532.html)。
Python的Initializer入口格式为：**\[文件名\].\[initializer名\]**
示例：实现initializer接口时指定的Initializer入口为main.my_initializer，那么FunctionGraph会去加载main.py中定义的my_initializer函数。
在FunctionGraph中使用Python编写initializer，需要定义一个Python函数作为initializer入口，以下为initializer的简单示例（以Python 3.12版本为例）。
```
def my_initializer(context):
    print('hello world!')
```
- 函数名 my_initializer需要与实现initializer接口时的Initializer字段相对应，实现initializer接口时指定的Initializer入口为main.my_initializer ，那么函数工作流服务会去加载main.py中定义的my_initializer函数。
  
- context参数 context参数中包含一些函数的运行时信息，例如：request id、临时AccessKey、function meta等。
  
 
#### Python运行时集成的非标准库
[表1]所示的Python运行时中集成的非标准库，可直接在Python函数代码中声明使用。
 表1Python运行时集成的非标准库 
| 模块        | 功能         | 版本号    |
|:---|:---|:---|
| dateutil  | 日期/时间处理    | 2.6.0  |
| requests  | http库      | 2.7.0  |
| httplib2  | httpclient | 0.10.3 |
| numpy     | 数学计算       | 1.13.1 |
| redis     | redis客户端   | 2.10.5 |
| obsclient | OBS客户端     | -      |
| smnsdk    | 访问SMN服务    | 1.0.1  |
   
 #### SDK接口
Context类中提供了许多上下文方法供用户使用，其声明和功能如[表2]所示。
 表2Context类上下文方法说明 
| 方法名                               | 方法说明                                                                                                                                                                                                                                                 |
|:---|:---|
| getRequestID()                    | 获取请求ID。                                                                                                                                                                                                                                              |
| getRemainingTimeInMilliSeconds () | 获取函数剩余运行时间。                                                                                                                                                                                                                                          |
| getAccessKey()                    | 获取用户委托的AccessKey（有效期24小时），使用该方法需要为函数配置委托。 **当前函数工作流已停止维护Runtime SDK 中getAccessKey接口，您将无法使用getAccessKey获取临时AK。**                                                                                             |
| getSecretKey()                    | 获取用户委托的SecretKey（有效期24小时），使用该方法需要为函数配置委托。 **当前函数工作流已停止维护Runtime SDK 中getSecretKey接口，您将无法使用getSecretKey获取临时SK。**                                                                                             |
| getSecurityAccessKey()            | 获取用户委托的SecurityAccessKey（有效期24小时），缓存时间为10分钟，即10分钟内再次获取的返回内容相同，使用该方法需要为函数配置委托。                                                                                                                                                                        |
| getSecuritySecretKey()            | 获取用户委托的SecuritySecretKey（有效期24小时），缓存时间为10分钟，即10分钟内再次获取返回内容相同，使用该方法需要为函数配置委托。                                                                                                                                                                         |
| getSecurityToken()                | 获取用户委托的SecurityToken（有效期24小时），缓存时间为10分钟，即10分钟内再次获取的返回内容相同，使用该方法需要为函数配置委托。                                                                                                                                                                            |
| getUserData(string key)           | 通过key获取用户通过环境变量传入的值。                                                                                                                                                                                                                                 |
| getFunctionName()                 | 获取函数名称。                                                                                                                                                                                                                                              |
| getRunningTimeInSeconds ()        | 获取函数超时时间。                                                                                                                                                                                                                                            |
| getVersion()                      | 获取函数的版本。                                                                                                                                                                                                                                             |
| getMemorySize()                   | 分配的内存。                                                                                                                                                                                                                                               |
| getCPUNumber()                    | 获取函数占用的CPU资源。                                                                                                                                                                                                                                        |
| getPackage()                      | 获取函数组。                                                                                                                                                                                                                                               |
| getToken()                        | 获取用户委托的token（有效期24小时），使用该方法需要为函数配置委托。                                                                                                                                                                                                                |
| getLogger()                       | 获取context提供的logger方法，返回一个日志输出类，通过使用其info方法按"时间-请求ID-输出内容"的格式输出日志。 如调用info方法输出日志： log = context.getLogger() log.info("test") |
| getAlias()                        | 获取函数的别名。                                                                                                                                                                                                                                             |
   
如[图1]所示，可在函数工作流控制台代码编辑器中使用context类。
图1使用context类   
![](https://support.huaweicloud.com/devg-functiongraph/zh-cn_image_0000002369435725.png)
#### 相关文档
- 使用Python开发事件函数，请参见[开发Python事件函数](https://support.huaweicloud.com/devg-functiongraph/functiongraph_02_0420.html)。
- 为Python函数制作依赖包，请参见[为Python函数制作依赖包](https://support.huaweicloud.com/devg-functiongraph/functiongraph_02_0616.html)。
- 关于函数开发的更多说明，如函数支持的运行时、函数支持的触发事件、函数工程打包规范以及如何在函数中引入动态链接库，请参见[函数开发概述](https://support.huaweicloud.com/devg-functiongraph/functiongraph_02_0100.html)。
 
