# The Art of the Function

## 如何编写良好的函数

* 如何编写良好的函数
  * 每个函数都应该只做一个任务
    * 任务使用短小的名称来定义，使用一行文本来标识
  * 不要重复劳动（DRY）是软件工程的中心法则。
    * 多个代码段不应该描述重复的逻辑
  * 函数应该定义得泛型
    * 任何情况下能可以使用

## 文档字符串

* 描述这个函数的文档，叫做文档字符串
  * 使用三个引号
    * 第一行描述函数的任务
    * 描述参数
* [文档字符串准则](https://www.python.org/dev/peps/pep-0257/)

```python
def pressure(v, t, n):
    """Compute the pressure in pascals of an ideal gas.

    Applies the ideal gas law: http://en.wikipedia.org/wiki/Ideal_gas_law

    v -- volume of gas, in cubic meters
    t -- absolute temperature in degrees kelvin
    n -- particles of gas
    """
    k = 1.38e-23  # Boltzmann's constant
    return n * k * t / v

help(pressure) # 查看文档字符串
```

## 参数默认值

```python
k_b=1.38e-23  # Boltzmann's constant
def pressure(v, t, n=6.022e23):
    return n * k_b * t / v
```

* 函数体的大多数数据
  * 应该表示为具名参数的默认值
* 永远不会改变的值
  * 就像基本常数k\_b，应该定义在全局帧中。

## python 可以有多个 return 值

```python
def divide_exact(n,d):
    return n // d, n % d
quotient, remainder = divide_exact(2013, 10)
>>> quotient
201
>>> remainder 
3
```

* 实际上返回的是一个元组 tuple


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://chenyuxiang0425.gitbook.io/cs-notebook/cs-61a/cs61a_3theartofthefunction.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
