首页
学习
活动
专区
工具
TVP
发布

函数

作者头像
清菡
发布2020-12-02 17:12:16
8070
发布2020-12-02 17:12:16
举报
文章被收录于专栏:清菡软件测试清菡软件测试

文章总览图

函数是带名字的代码块,用于完成具体的工作。要执行函数定义的任务,可调用该函数。

要执行函数定义的特定任务,可调用该函数。需要在程序中多次执行同一项任务时,无需反复编写完成该任务的代码,而只需调用执行该任务的函数,让Python运行其中的代码。

一,定义函数

1.关键字def告诉Python要定义一个函数,这是函数定义。向Python指出了函数名,还可能在括号内指出函数为完成其任务需要什么样的信息。函数名为greet_user(),它不需要任何信息就能完成其工作,因此括号是空的(即便如此,括号也必不可少)。最后,定义以冒号结尾。

输出:

紧跟在def greet_user():后面的所有缩进构成函数体。文档字符串用三引号括起,描述了函数是做什么的。

函数调用让Python执行函数的代码。要调用函数,可依次执行函数名以及用括号括起的必要信息。

2.向函数传递信息

在函数定义def greet_user()的括号内添加username。通过在这里添加username,就可以让函数接受你给username指定的任何值。这个函数要求你调用它时给username指定一个值。调用greet_user()时,可将一个名字传递给它。

输出:

代码greet_user('jesse')调用函数greet_user(),并向它提供执行print语句所需的信息。

输出:

根据需要调用函数greet_user()任意次,调用时无论传入什么样的名字,都会生成相应的输出。

3.实参和形参

在函数greet_user()的定义中,变量username是一个形参,函数完成其工作所需的一项信息。在代码greet_user('jesse')中,值'jesse'是一个实参。实参是调用函数时传递给函数的信息。调用函数时,要让函数使用的信息放在括号内。在greet_user('jesse')中,将实参'jesse'传递给了函数greet_user(),这个值被存储在形参username中。

输出:

二,传递实参

函数定义中可能包含多个形参,因此函数调用中也可能包含多个实参。向函数传递实参的方式很多,可使用位置实参,这要求实参的顺序与形参的顺序相同。也可使用关键字实参,其中每个实参都由变量名和值组成;还可以使用列表和字典。

1.位置实参

调用函数时,Python必须将函数调用中的每个实参都关联到函数定义中的一个形参。最简单的关联方式时基于实参的顺序。这种关联方式称为位置实参。

输出:

2.调用函数多次

根据需要使用任意数量的位置实参,Python将按顺序将函数调用中的实参关联到函数定义中相应的形参。

输出:

3.位置实参的顺序很重要

函数调用中实参的顺序与函数定义中形参的顺序一致。

4.关键字实参

关键字实参是传递给函数的名称-值对。直接在实参中将名称和值关联起来。关键字实参无需考虑函数调用中的实参顺序,还清楚地指出了函数调用中各个值的用途。

输出:

使用关键字实参时,务必准确地指定函数定义中的形参名。

5.默认值

编写函数时,可给每个形参指定默认值。在调用函数中给形参提供了实参时,Python将使用指定的实参值,否则将使用形参的默认值。给形参指定默认值后,可在函数调用中省略相应的实参。使用默认值可简化函数调用,还可清楚地指出函数的典型用法。

输出:

由于显示地给animal_type提供了实参,因此Python将忽略这个形参的默认值。

输出:

使用默认值时,在形参列表中必须先列出没有默认值的形参,再列出有默认值的形参。这让Python依然能够正确地解读位置实参。

6.等效的函数调用

可混合使用位置实参,关键字实参和默认值,通常有多种等效的函数调用方式。

输出:

7.避免实参错误

输出:

三,返回值

函数并非总是直接显示输出,它可处理一些数据,并返回一个或一组值。函数返回的值被称为返回值。

在函数中,可使用return语句将值返回到调用函数的代码行。返回值将程序的大部分工作移到函数中完成,从而简化主程序。

1.返回简单值

输出:

2.让实参变成可选的

让实参变成可选的,这样使用函数的人就只需在必要时才提供额外的信息。使用默认值来让实参变成可选的。

输出:

3.返回字典

函数可返回任何类型的值,包括列表和字典等比较复杂的数据结构。

输出:

4.结合使用函数和while循环

输出:

四,传递列表

向函数传递列表很有用,这种列表包含的可能是名字、数字或更复杂的对象(如字典)。将列表传递给函数后,函数就能直接访问其内容。

输出:

1.在函数中修改列表

将列表传递给函数后,函数就可对其进行修改。在函数中对这个列表所做的任何修改都是永久性的,这让你能够高效地处理大量的数据。

输出:

2.禁止函数修改列表

将列表的副本传递给函数。切片表示法[:]创建列表的副本。

五,传递任意数量的实参

1.不知道函数要接受多少个实参,Python允许函数从调用语句中收集任意数量的实参。

形参名*toppings中的星号让Python创建一个名为toppings的空元组,并将收到的所有值都封装到这个元组中。

输出:

对列表进行遍历。

输出:

2.结合使用位置实参和任意数量实参

让函数接受不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放最后。Python先匹配位置实参和关键字实参,再将余下的实参都收集到最后一个形参中。

输出:

3.使用任意数量的关键字实参

将函数编写成能够接受任意数量的键-值对,调用语句提供了多少就接受多少。

形参**user_info中的两个星号让Python创建一个名为user_info的空字典,并将收到的所有名称-值对都封装到这个字典中。

输出:

编写函数时,可以以各种方式混合使用位置实参,关键字实参和任意数量的实参。

六,将函数存储在模块中

将函数存储在被称为模块的独立文件中,再将模块导入到主程序中。import语句允许在当前运行的程序文件中使用模块中的代码。

将函数存储在独立文件中后,可与其它程序员共享这些文件而不是整个程序。知道如何导入函数还能让我们使用其它程序员编写的函数库。

1.导入整个模块

让函数是可导入的,得先创建模块。模块是扩展名为.py的文件,包含要导入到程序中的代码。

making_pizzas.py的文件导入刚创建的模块,再调用make_pizza()两次。

输出:

2.导入特定的函数

调用函数时,无需使用句点。由于我们在import语句中显示地导入了函数make_pizza(),因此调用它时只需指定其名称。

输出:

3.使用as给函数指定别名

导入的函数名称可能与程序中现有的名称冲突,或者函数名称太长,可指定简短的别名。

关键字as将函数重命名为我们提供的别名。

输出:

4.使用as给模块指定别名

更轻松地调用模块中的函数。

输出:

5.导入模块中的所有函数

使用星号*运算符可让Python导入模块中的所有函数。

输出:

import语句中的星号让Python将模块pizza中的每个函数都复制到这个程序文件中。由于导入了每个函数,可通过名称来调用每个函数,而无需使用句点表示法。

当使用并非自己编写的大型模块时,最好不要采用这种导入方法。如果模块中有函数的名称与你的项目中使用的名称相同,可能导致意想不到的结果。Python遇到多个名称相同的函数或变量,进而覆盖函数,而不是分别导入所有的函数。

要么只导入需要使用的函数,要么导入整个模块并使用句点表示法。

七,函数编写规范

给模块、函数指定描述性名称,且只在其中使用小写字母和下划线。给形参、实参指定默认值时,等号两边不要有空格。

如果形参很多,导致函数定义长度超过79字符,可在函数定义中输入左括号后按回车,并在下一行按2次Tab键,从而将形参列表和只缩进一层的函数体区分开来。

如果程序或模块包含多个函数,可使用两个空行将相邻的函数分开。

所有的import语句都放在文件开头,唯一例外的是,在文件开头使用了注释。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 清菡软件测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档