## 内建函数
示意图:
![](https://img.kancloud.cn/51/bf/51bf779cade57de2975da7532a27a611_700x563.png)
通过观察规律其实不难发现,Python中所谓的使用函数就是把你要处理的对象放到一个名字后面的括号里就可以了。简单的来说,函数就是这么使用,可以往里面塞东西就得到处理结果。这样的函数在Python中还有很多。
以最新的3.50版本为例,一共存在68个这样的函数,它们被统称为内建函数 (Built-in Functions)。之所以被称之为内建函数,并不是因为还有“外建函数”这个概念,内建的意思是这些函数在3.50版本安装完成后你就可以使用它们,是“自带”的而已。
现在你并不必急着把这些函数是怎么用的都搞明白,其中一些内建函数很实用, 但是另外一些就不常用,比如涉及字符编码的函数ascii(),bin(),chr()等等,这些都是相对底层的编程设计中才会使用到的函数,在你深入到一定程度的时候才会派的上用场。
Python官网中各个函数介绍的链接: [https://docs.python.org/3/library/functions.html](https://docs.python.org/3/library/functions.html)
## 定义函数
在Python中可以使用def关键字来定义函数,和变量一样每个函数也有一个名字,而且命名规则跟变量的命名规则是一致的。在函数名后面的圆括号中可以放置传递给函数的参数,函数执行完成后我们可以通过return关键字来返回一个值。
你可以定义一个由自己想要功能的函数,以下是简单的规则:
* def (即define,定义)的含义是创建函数,也就是定义一个函数。函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
* arg (即argument,参数)有时你还能见到这种写法:parameter,二者都是参数的,意思但是稍有不同,这里不展开说了。任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
* 函数内容以冒号起始,并且缩进。函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
* return即返回结果。return \[表达式\] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
* def和return是关键字(keyword),Python就是靠识别这些特定的关键字来明白用户的意图,实现更为复杂的编程。
现在总结一下:Define a function named ‘function’ which has two arguments : arg1 and arg2,returns the result ‘Something’ 是不是很易读很顺畅?代码的表达比英文句子更简洁一点:
![](https://img.kancloud.cn/a4/96/a496ad7aac4c98b191982dd5f815f85d_698x316.png)
语法
Python 定义函数使用 def 关键字,一般格式如下:
```
def 函数名(参数列表):
函数体
```
下面是一个打印问候语的简单函数,名为greet\_user():
```
def greet_user():
"""显示简单的问候语"""
print("Hello!")
greet_user()
Hello!
```
这个示例演示了最简单的函数结构。使用关键字def来告诉Python你要定义一个函数。这是函数定义,向Python指出了函数名,还可能在括号内指出函数为完成其任务需要什么样的信息。在这里,函数名为greet\_user(),它不需要任何信息就能完成其工作,因此括号是空的(即便如此,括号也必不可少)。最后,定义以冒号结尾。
紧跟在def greet\_user():后面的所有缩进行构成了函数体。第二行文本是被称为文档字符串(docstring)的注释,描述了函数是做什么的。文档字符串用三引号括起, Python使用它们来生成有关程序中函数的文档。
代码行print("Hello!")是函数体内的唯一一行代码, greet\_user()只做一项工作:打印Hello!。
要使用这个函数,可调用它。 函数调用让Python执行函数的代码。要调用函数,可依次指定函数名以及用括号括起的必要信息,如最后一行处所示。由于这个函数不需要任何信息,因此调用它时只需输入greet\_user()即可。和预期的一样,它打印Hello!:
## 函数的参数
只需稍作修改,就可以让函数greet\_user()不仅向用户显示Hello!,还将用户的名字用作抬头。为此,可在函数定义def greet\_user()的括号内添加username。通过在这里添加username,就可让函数接受你给username指定的任何值。现在,这个函数要求你调用它时给username指定一个值。调用greet\_user()时,可将一个名字传递给它,如下所示:
```
def greet_user(username):
print("Hello, " + username.title() + "!")
greet_user('jesse')
greet_user('sarah')
Hello, Jesse!
Hello, Sarah!
```
代码greet\_user('jesse')调用函数greet\_user(),并向它提供执行print语句所需的信息。这个函数接受你传递给它的名字,并向这个人发出问候。
同样, greet\_user('sarah')调用函数greet\_user()并向它传递'sarah',打印Hello, Sarah!。你可以根据需要调用函数greet\_user()任意次,调用时无论传入什么样的名字,都会生成相应的输出。
## 实参和形参
前面定义函数greet\_user()时,要求给变量username指定一个值。调用这个函数并提供这种信息(人名)时,它将打印相应的问候语。
在函数greet\_user()的定义中,变量username是一个形参——函数完成其工作所需的一项信息。在代码greet\_user('jesse')中,值'jesse'是一个实参。实参是调用函数时传递给函数的信息。我们调用函数时,将要让函数使用的信息放在括号内。在greet\_user('jesse')中,将实参'jesse'传递给了函数greet\_user(),这个值被存储在形参username中。
注意 大家有时候会形参、实参不分,因此如果你看到有人将函数定义中的变量称为实参或将函数调用中的变量称为形参,不要大惊小怪。