python入门(五):函数(传递实参,返回值,传递列表,将函数存储在模块中)

7.1.定义函数

要执行函数定义的特定任务,可以调用函数,需要在程序之中多次执行同一个任务的时候,我们无需反复编写完成该任务的代码,而只需调用执行该函数即可
这个实例演示了最简单的函数结构,关键词def就是告诉python我们要定义一个函数,这就是函数定义的标志,指明了函数名,必要的还需要指明执行函数所需要的参数,最后定义以冒号结尾
注意:紧跟在def 函数名()后面所有的缩进构成了函数体,而使用三个双引号引起来的就是被称为文档字符串的注释,描述了函数是做什么的,python会生成相应的文档即时显示
在这里插入图片描述

7.1.1.向函数传递信息

在这里插入图片描述

7.1.2.实参和形参

在这里插入图片描述
注意概念:形参:函数完成其工作所需要的一项信息;实参:调用函数的时候完成的一项信息

7.2.传递实参

鉴于函数定义中可能包含有多个形参,因此函数调用中可能包含多个实参,向函数传递实参的方式有很多,位置实参,关键词实参等等

7.2.1.位置实参

调用函数的时候,python必须将函数调用中的每一个实参都关联到函数定义中的每一个形参
在这里插入图片描述
(1)调用函数多次
在这里插入图片描述
在函数中,可以根据需要使用任意数量的位置实参,python将按照顺序将函数调用的实参关联到函数定义之中相应的形参
(2)位置实参的位置很重要
在这里插入图片描述
我们必须确保函数调用中实参的顺序和函数定义中形参的顺序一致

7.2.2.关键字实参

关键词实参让我们无需考虑函数中调用的实参顺序,清楚指明了函数调用中各个值的用途
关键词实参让你无需考虑函数调用中实参的顺序,同时还清楚指明了函数带哦用中每一个值的用途
在这里插入图片描述
关键词实参的顺序无关紧要,python已经知道各个值应该存储在哪个形参中

7.2.3.默认值

编写函数的时候,可以给每一个形参指定默认值

  1. 在调用函数中给形参提供了实参的时候,python将会使用指定的实参值,否则将会使用实参的默认值
  2. 给形参指定默认值之后,可以在函数调用的时候省略相应的实参,使用默认值可以简化函数调用,还可以清楚函数的典型用法
    在这里插入图片描述
    在这里插入图片描述
    注意:在使用默认值时,在形参列表之中必须先列出没有默认值的形参,再列出有默认值的形参,这让python能够正确地解读出位置实参

7.2.4.等效的函数调用

可以混合使用位置实参,关键字实参,默认实参等多种形式
在这里插入图片描述
使用哪一种调用方式无关紧要,只要函数调用生成你想要的你希望的输出就行,使用对你来说最容易理解的调用方式就可以

7.2.5.避免实参错误

在这里插入图片描述
python读取函数的代码,并指出我们需要为哪些形参提供实参,这回给我们提供很大的帮助

7.3.返回值

主要思想:函数并非总是直接显示输出,相反,它可以处理一些数据,并返回一个或者一组值,函数返回的值被称为返回值,在函数中,返回值用return语句来表示,返回值让我可以把程序的大部分繁重的工作转移到函数中去完成,从而简化主程序

7.3.1.返回简单值

在这里插入图片描述
我们一定不能小看这种小函数的功能,当遇到大宗的数据的时候,也是很高效的

7.3.2.让实参变成可选的

这个点很重要,要学会这种思路
在这里插入图片描述
让实参变成可选的虽然看上去觉得很复杂,但实际上还是很简单,就是把可选实参先赋默认值为空字符串
在这里插入图片描述
可选值让函数能够处理各种不同的情形的同时,也会使函数调用尽可能简单

7.3.3.返回字典

函数可以返回任意类型的值,包含列表和字典等更加复杂的数据结构
在这里插入图片描述
函数接收简单的文本信息,将其放在一个更合适的数据结构中,让我不禁能打印他们,还能以其他方式处理他们
在这里插入图片描述

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

注意:可将函数同本书前面介绍的任何python结构结合起来使用
在这里插入图片描述
在这里插入图片描述

7.4.传递列表

你经常会发现,向函数传递列表很有用,列表包含的可能是名字,数字或者是更复杂的对象(字典),将列表传递给函数之后,对于列表的数据处理会更加高效
在这里插入图片描述
你经常会发现,向函数传递列表很有用,将列表传递给函数之后,函数就能直接访问其内容

7.4.1.在函数中修改列表

将列表传递给函数之后,函数就可以对列表进行修改,在函数中对列表所做的任何修改都是永久性的,这可以使你高效的处理大量的数据
在这里插入图片描述
为了重新组织这些代码,我们可以编写两个函数,也就是一个简易的代码重构问题
在这里插入图片描述
相比于没有使用函数的版本,这样的程序显然更容易扩展和维护
如果我们还需要打印其他,就直接调用这个函数,如果我们需要对函数进行修改,只需要修改这个代码一次,就能影响所有调用这个函数的地方,显然这样的效率更高
这实际上是一种重要的理念,每一个函数都完成一项具体的工作,同时别忘了,在一个函数中可以调用另一个函数,这有助于将一个复杂的问题划分成为一系列简单的步骤

7.4.2.禁止函数修改列表

有时候需要禁止函数修改列表,为了解决这个问题,可以将函数传递列表的副本而不是原件,这样函数所做的任何修改都只影响副本,而丝毫不影响原件
实际上依然是切片的思想,通过切片来创建列表的副本,只针对副本进行修改而丝毫不影响原件
在这里插入图片描述这个思想很重要,用切片表示法创建列表的副本

7.5.传递任意数量的实参

有时候,你预先不知道函数要接受多少个实参,python允许函数从调用语句中收集任意数量的实参
使用指针的思想,创建一个空元组,并将收到的所有值都封装到这个元组中,这个地方,按照我的理解,你可以说是元组,也可以说是列表,都是可以的
在这里插入图片描述
不管函数收到的实参是多少个,这种语法都管用

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

如果要让函数接收不同类型的实参,必须要在函数定义中将接纳的任意数量的实参放在最后,python会先匹配位置实参和关键字实参,再将余下的实参都收集到最后一个形参中
在这里插入图片描述

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

有时候需要接受任意数量的实参,但是预先不知道用户给函数的是怎样的信息,可以将函数编写成能够接受任意数量的键值对
在这里插入图片描述
编写函数的时候,你可以以各种方式混合使用位置实参,关键字实参和任意数量的实参,这是很重要的

7.6.将函数存储在模块中

函数的优点:可以使代码块与主程序分离,可以让主程序好理解的多,实际上在此处要说:函数可以存储在被称为模块的独立文件中,再将模块导入到主程序中,import语句允许在当前运行的程序文件中包含模块中的代码
more importantly
通过将程序存储在独立的文件中,可以隐藏代码中的细节,将重点放在代码的高层逻辑上,这还能让我在众多的程序中重用函数,将函数存储在独立的文件中,知道如何导入函数还能让你使用其他程序员编写的函数库

7.6.1.导入整个模块

要使函数是可导入的,需要先创建模块,模块是扩展名为.py的文件
在这里插入图片描述
模块是扩展名为.py的文件,模块往往是函数
这些代码的输出与没有导入模块的原始程序相同
more importantly:
在这里插入图片描述
我们可以导入整个模块,也可以导入模块中特定的函数(可以根据需要从模块中导入任意数量的函数)

7.6.2.导入特定的函数

在这里插入图片描述
如果在import语句中显式的导入了函数make_pizza,调用的时候就只须函数名称即可,无需使用句点

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

如果要导入的函数的名称可能与程序中现有的名称冲突,或者函数的名字太长,我们可以指定简短而独一无二的别名–函数的另一个名称,类似于外号,要给函数指定这种特殊的外号,就需要用到as
在这里插入图片描述

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

我们可以给函数指定别名,也可以给模块指定别名
我们实际上还可以给模块增加别名,通过给模块指定简短的别名,让我能够更加轻松的调用模块中的函数,明显更简洁
在这里插入图片描述
这种实际上更为常用,因为理解函数名远比理解模块名更为重要

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

使用 ‘*’ 运算符可以让python导入模块中的所有函数(这个挺好的,简洁高效)
在这里插入图片描述
most importantly:在并非自己编写的代码中,最好不要采用这种导入方法,有时候模块会很大,如果模块中有函数的名称与你的项目中使用的名称相同,可能会导致意想不到的结果

最佳做法:要么只导入你需要使用的函数,要么导入整个模块并使用句点表示法,这样能让代码更加清晰,更容易阅读和理解
代码一定要清晰,要容易阅读和理解

7.7.函数编写指南

编写函数时需要记住几个细节约定
(1)应给函数指定描述性名称,且只在其中使用小写字母和下划线,描述性名称能要别人清楚你在做什么,给模块命名的时候也应该遵循这个约定
(2)每一个函数都应该包含简要的阐述其功能的注释,注释应该紧跟在函数定义的后面,并且采用文档字符串的格式,文档良好的函数让其他程序员看的时候只需要阅读文档字符串的描述就可以使用它,他们完全可以相信代码像描述的一样运行,只要知道函数的名称,需要的实参以及返回值的类型,就可以在自己的程序中使用它
(3)在给形参指定默认值的时候,等式两边不要有空格
(4)如果形参很多,可以在函数定义中输入左括号后按回车键,并在下一行按两次tab键,从而将形参列表与只缩进一层的函数体区分开来
(5)如果程序或者模块之中包含多个函数,可以使用两个空行将相邻的函数分开,这样更容易知道前一个函数什么时候结束,什么地方开始
(6)所有的import语句都应该放在文件的开头

7.8.小结

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值