---
jupyter:
jupytext:
text_representation:
extension: .md
format_name: markdown
format_version: '1.2'
jupytext_version: 1.3.0rc2
kernelspec:
display_name: Python 3
language: python
name: python3
---
.. meta::
:description: Topic: Functions and Function Signatures, Difficulty: Medium, Category: Section
:keywords: functions, *args, **kwargs, signature, default parameter, docstring, return, vowel count, syntax, basics
# 函数基础
**注**:
在本资源各处会有一些阅读理解练习。这些题目旨在帮助读者活学活用文中的知识点。练习题的答案可以在本页底部找到。
定义函数允许我们包装代码片段并描述进入和离开其中的信息。你可以在各种情况下重复使用这个“代码胶囊”。比如说,假设你想要数一个字符串中有多少元音,你可以定义以下的函数来达到该目的:
```python
def count_vowels(in_string):
""" 返回 `in_string` 中有多少元音 """
num_vowels = 0
vowels = "aeiouAEIOU"
for char in in_string:
if char in vowels:
num_vowels += 1 # 等值于 num_vowels = num_vowels + 1
return num_vowels
```
执行此代码会定义*函数* `count_vowels`。这个函数期待一个对象作为*输入参数*(input argument),由 `in_string` 代名,并会*返回*(return)该对象中元音的数量。使用 `count_vowels` 并向其输入一个对象的过程叫做*调用*(call)该函数:
```python
>>> count_vowels("Hi my name is Ryan")
5
```
最棒的一点在于你可以重复使用这个函数!
```python
>>> count_vowels("Apple")
2
>>> count_vowels("envelope")
4
```
在本节中,我们将会了解定义和调用Python函数的语法。
**定义**:
Python**函数**(function)是一个包装代码的对象。*调用*(call)函数将会执行包装的代码并*返回*(return)一个对象。你可以定义函数使其接受*参数*(argument),也就是输入进包装代码的对象。
## `def` 语句
类似于 `if`,`else`,和 `for`,Python保留了 `def` 语句来表达函数(以及我们会在之后讨论的其它几个构造体)的定义。以下是Python函数定义的一般形式:
```
def ():
""" 说明字符串 """
return