前言:目前先将python的基础语法和知识学完,再去尝试写脚本,这次就学习python中的函数。
一、定义函数
使用关键字def 来定义一个函数,这就是函数定义,而且定义以冒号结尾。
格式:1
2
3
4
5def 函数名 :
内容
函数名
例如:
1 | def message(): |
"""打印的信息"""
被称为文档字符串的注释,文档字符串用三引号括起来。
二、向函数传递信息
1 | def message(username): |
通过这个例子可以知道,在定义函数时括号内添加了username
,我们在调用的时候可以赋任何值给username
。
三、位置实参
调用函数时,Python必须将函数调用中的每个实参都关联到函数定义中的一个形参。最简单的关联方式是基于实参的顺序,这就算位置参数。
调用函数多次,如:
应注意在函数调用时实参的顺序与函数定义中形参的顺序是否一致
关键字实参
关键字实参是传递给函数的名称—值对,直接在实参中将名称和值关联起来,因此向函数传递实参时不会混淆.
关键字实参明确地指出了各个实参对应的形参,因此不会出现因为顺序而混淆的情况。
默认值
编写函数时,可给每个形参指定默认值。在调用函数中给形参提供了实参时,Python将使用指定的实参值;否则,将使用形参的默认值。
使用默认值时,在形参列表中必须先列出没有默认值的形参,再列出有默认值的实参。这样才能够正确地解读位置实参。
四、返回值
函数并非总是直接显示输出,相反,它可以处理一些数据,并返回一个或一组值。函数返回的值被称为返回值 。
返回简单的值
相较于之前,需要再次调用函数并赋值有些麻烦,返回值直接是赋值给一个变量,我们通过打印出这个变量即可得出相应的值。
让实参变成可选的
有时候,需要让实参变成可选的,这样使用函数就可以提供额外的信息。
可使用默认值来让实参变成可选的。
这里用一个if
语句来进行判断middle_name
是否存在,通过这样的判断,就可以打印出不同的情况,这里便是将middle_name
变成可选的。
返回字典
函数可返回任何类型的值,包括列表和字典等较复杂的数据结构。
full_name
接收first_name
和last_name
,并将这些值封装到字典中.
同样可以增加一个可选值,如果存在则添加到字典中,并通过返回值赋值给变量
使用函数和while循环
五、传递列表
将列表传递给函数后,函数就能直接访问其内容
通过把列表传递给函数,提高效率
传递任意数量的实参
形参名*toppings 中的星号让Python创建一个名为toppings 的空元组,并将收到的所有值都封装到这个元组中
不管收到的是一个值还是三个值,函数都能妥善地处理
结合使用位置实参和任意数量实参
如果要让函数接受不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后。Python先匹配位置实参和关键字实参,再将余下的实参都收集到最后一个形参中。
Python将收到的第一个值存储在形参size 中,并将其他的所有值都存储在元组toppings中
使用任意数量的关键字实参
结果:
1 | {'first_name': 'albert', 'last_name': 'einstein', 'location': 'princeton', 'field': 'physics'} |
形参**user_info
中的两个星号让Python创建一个名为user_info 的 空字典,并将收到的所有名称—值对都封装到这个字典中。 然后遍历字典user_info 中的键—值对,并将每个键—值对都加入到字典profile 中。
六、将函数存储在模块中
导入整个模块
模块 是扩展名为.py的文件,包含要导入到程序中的代码
只需编写一条import 语句并在其中指定模块名,就可在程序中使用该模块中的所有函数。
例如:
使用这种import 语句导入了名为module_name.py 的整个模块,就可使用下面的语法来使用其中任何一个函数:
1 | module_name.function_name() |
导入特定的函数
1 | from module_name import function_name |
通过用逗号分隔函数名,可根据需要从模块中导入任意数量的函数:
1 | from module_name import function_0, function_1, function_2 |
使用as给函数指定别名
函数make_pizza() 指定了别名mp()
指定别名通用语法:
1 | from module_name import function_name as fn |
使用as给模块起别名
导入模块中的所有函数
使用星号(* )运算符可让Python导入模块中的所有函数
1 | from module_name import * |