python3xiaobaike_2020/chapter5/5-2 python3小白课:函数入门.md
2025-04-20 23:22:14 +08:00

148 lines
6.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# python3小白课函数入门
### 函数的定义和调用
定义一个函数很简单用到def关键字来定义。我们来看一下语法
```python
def 函数名([形参们]):
[执行体]
[return [返回值]]
```
上述语法中的`[]`表示里面的内容是可选的,可以填可以不填,不是列表的意思。
使用def来声明这是一个函数接下来写函数的名字跟变量的命名规则类似这里就不赘述了需要注意的是函数名不要跟一些系统保留关键字、类型名等相同否则会报错或者覆盖内置的函数使内置函数在脚本中无法使用。所以函数名尽量有意义一些根据你的业务场景来命名有意义的你能理解的命名。
接下来是一个小括号,里面可以设定要传入的参数在执行体中的名字(这样在执行体中可以获取到传入的参数),也可以是一个不需要参数的函数。
函数的内里部分需要缩进(否则不算函数的一部分),这一点需要大家注意一下。
当需要这个函数在调用完成后对外返回内容的时候,可以使用`return`关键字来进行返回,但它不是必须的。如果没有返回值就不写,如果有返回值就写。可以是什么都不返回,也可以在一个空格之后填写返回值,返回值可以是各种我们之前学习的数据类型。
执行体和return语句不能同时不存在。如果你还没想好这个函数要做什么可以使用学过的`pass`占位符占位。
> [!danger]
>
> 在函数中一旦碰到return语句函数就会立即结束调用并返回即时在return语句的后面还有执行的语句也是不会执行的。所以它也可以用于`结束循环结构的循环体`。
我们来尝试定义一个十分简单的函数,并且调用它来理解:
```python
# coding:utf-8
def add_1(num):
return num + 1
a = add_1(1)
print(a)
```
这个例子是定义一个函数这个函数可以让传入的值加上1之后返回。从这个简单的例子我们还能看到一些小知识点。
比如这是一个没有执行体部分的函数但计算的逻辑代码写在了return语句的部分所以return语句是支持表达式的。
形参传入了一个叫做num的变量它是不允许为空的变量必须传入值否则调用函数时会报错。
函数返回之后,可以用变量接收结果进行进一步处理。函数的定义代码在调用之前,调用函数跟我们之前调用系统内置函数似乎区别不大。
同理,定义函数时不设定形参,就是一个不需要传入参数即可直接调用的函数,我们看个例子:
```python
# coding:utf-8
def print_3():
text = "重要的事情说三遍!"
for i in range(3):
print(text)
print_3()
```
这个函数是`重要的事情说三遍`的函数实现,今后,你只需要带上这个函数,就可以一条命令调用这个功能了,十分方便。当然,如果你需要实现传入任意的话语都能自动说三遍,你也可以设定一个形参,传入你要说的话。
这个函数没有return语句也是可以的。具体怎么写你可以根据你的业务需要灵活思考变动举一反三。
---
### 函数多个返回值
刚才我们举的小例子都是返回一个返回值或者不返回的。
> [!question]
>
> 那么同一个函数支持多个返回值吗?
在python中是支持的。我们直接来看个例子
```python
# coding:utf-8
def get_fruits():
return "apple", "banana", "orange"
print(get_fruits())
```
这个例子返回了三种水果的名字字符串我们注意到在return语句中使用了`,`分隔,这样就可以返回多个返回值了,返回的返回值会自动组装成一个列表。
> [!tip]
>
> 你可以使用一个变量接收后使用索引访问,也可以定义多个变量,用序列解包的方式赋值给每个变量。
---
### 为函数提供帮助文档
之前的课程中,我们学习过使用`help`命令来查看函数命令的帮助文档,这些文档是哪儿来的呢?其实这都是这些函数在创建之初,就定义好的供人查询用的。如果开发者懒一点没有定义,那么有可能你是看不到这个文档的。
> [!question]
>
> 那么你自己编写的函数呢?可以自己定义文档吗?
答案是可以的,而且非常简单。
我们来看个例子。
```python
# coding:utf-8
def get_fruits():
"""
我就是函数的文档,使用多行文本的写作方式就可以,写在函数执行体的前面
这个函数是支持中文的。
因为是多行文本,某一行你也可以选择不缩进,总之怎么方便怎么来。
你可以写任意的内容到文档里面
通常的写法是:
函数作用:获取几种水果的名字
参数:没有参数。如果有多个参数可以分多行写
返回值:没有返回值可以不写
你还可以写一些使用范例等等
写好之后可以使用help命令来查看你写的效果如果不喜欢还可以修改
"""
return "apple", "banana", "orange"
print(get_fruits())
print("*" * 40)
print(help(get_fruits))
print("*" * 40)
# 你还可以使用函数的__doc__属性查看帮助文档注意前后各有两个_
print(get_fruits.__doc__)
```
可见,有的时候定义一个函数的文档,内容甚至可能比代码的量还大,当然,如果你不想写那么多,也没有强制要求,你可以不写文档或者只写一两行,一切看你自己。
如果你写的函数文档是怕自己忘了或者给别人看的,还记得我们讲过的注释的好处吗?一个好的帮助文档是可以帮助团队省事的,要写多少,看你咯。
### 单词释义
| 单词 | 释义 |
| ------ | --------------------------------- |
| def | define定义这个单词的简写 |
| return | 返回 |
| add | 加,加法 |
| num | number数字的简写 |
| text | 文本 |
| get | 获取 |
| fruits | fruit是水果的意思这里是复数形式 |
| apple | 苹果 |
| banana | 香蕉 |
| orange | 橙子,柑橘 |
| help | 帮助 |
| doc | document文档这个单词的简写 |