今天开始到函数了,每一天的都是按照书上的章节来的。。到函数就算是比较难了,所以大部分都是按照自己的理解来写的,毕竟书中有些文字还是不怎么好理解。
第八章 函数
1.定义
函数就是带名字的代码块。
def 函数名(参数):
函数体
2.实参与形参
个人理解:
形参:函数定义中的参数变量
实参:函数调用时传递的参数变量
3.传递参数
位置参数:按照函数定义时的形参顺序来传递实参。
关键字参数:将实参按照 名称—值 的形式传递给函数。
相信下面这张图片可以说明两种参数的区别了
默认值:给形参一个默认值,若调用函数时未指定该参数,则使用默认值。
image.png
需要注意的是:
(1)定义时必须将含默认值的参数放在未设置默认值的参数之后,否则程序会报错!
SyntaxError: non-default argument follows default argument
。
image.png
(2)在函数调用时,含默认值的参数也是占一个位置的。
所以在使用位置参数调用时,一定要注意位置!!!
image.png
4.返回值 :使用return
函数使用return可以返回值,返回值可以是任何python的对象!!
包括:数字、字符串、列表、字典甚至函数!
这个问题在本文最末尾有资料。这里不详细讲,毕竟讲得没别人好!
5.传递列表
①在函数中修改列表
这里有一个比较重要的知识点:
将列表作为参数传递给函数时,
如果函数对列表进行了修改,那么,即使函数没有返回值,
列表也会被修改!!!这些修改是永久的。
②如何禁止函数修改列表
方法就是:向函数传递列表的副本,而不是列表本身。
采用我们之前学过的方法——切片。
接着上面定义的函数,我们进行副本调用。
调用时:change_lists(list_a[:],list_b)
image.png
如果不是很必要的情况下,最好还是将原始列表传递给函数。
这样可以避免调用函数时需要花时间和内存来创建副本,从而提高效率。
6.传递任意数量的实参:使用星号(*)
①结合使用位置实参和任意数量实参
def 函数名(位置形参,*其他形参)
注意:
1.在其他形参名前面加一个星号(*)会让Python创建一个元组,元组名即这个带星号的形参名。
2.与默认值参数一样,这个带星号的形参必须放在最后。
3.Python在运行时,先匹配前面的位置实参或关键字实参,再将余下的参数都存储在这个元组中。
image.png
①使用任意数量的关键字实参
def 函数名(部分形参,**其他关键字形参)
1.这个与上一个的区别在于,这个其他形参前面是两个星号(**)。
2.在其他形参名前面加两个星号(**)会让Python创建一个字典,
字典名即这个带两个星号的形参名。
2.与默认值参数一样,这个带星号的形参必须放在最后。
3.Python在运行时,会将没有定义的关键字形参都存储在这个字典中。
image.png
7.将函数存储在模块中
将函数或多个函数存储在扩展名为.py的文件中,即为一个模板。
如果要直接导入模板,则必须将模板放在主程序所在的目录下!
导入模块/函数的几种方法:
1.直接导入整个模块
import 模块名
**:调用时,需要使用句点(.)指定模块和函数。
即:模块名.函数名()
2.导入模块中的特定函数
from 模块名 import 函数名
(每次看到这一段,我一度怀疑设计者是中国人,
因为这个语句和中文很相似:从 模块 中导入 函数)
**:使用这种方法时,调用指定的函数时,不需要使用句点(.)指定模块,
可以直接用函数名调用该函数。
3.使用as给函数指定别名
from 模块名 import 函数名 as 别名
**:使用这种方法时,调用该函数就可以使用别名,这样避免与主函数中同名的函数混淆。
4.使用as给模块指定别名
from 模块名 as 别名
5.导入模块中所有的函数
from 模块名 import *
**:使用这种方法时,调用该模块中的所有函数都不需要使用句点(.)指定模块名。
这种方法不推荐,因为容易使模块中的函数名与项目中的函数混淆。
8.函数编写指南
这个实际上是一些约定:
1.函数名最好是描述性的,能大体表述函数的功能,模块命名也一样;
2.函数名只使用小写字母和下划线;
3.给函数写一段简单的功能描述,
使用文档字符串格式:即使用三个引号括起(左右均为```)
紧跟在函数定义的下一行;
4.给形参指定默认值时,等号(=)左右都不要有空格;
5.在使用关键字实参调用函数时,等号(=)左右也都不要有空格;
6.若在函数定义时,形参很多,导致一行无法写完,
可以在函数定义中输入左括号(后
按回车键,
并在下一行按两次Tab键,
这样可以将形参列表与只缩进一次的函数体区分开来;
7.如果程序或模块包含多个函数,则使用两个空行将相邻函数分开;
8.所有的import语句都放在文件开头,除非文件开头是注释。
——————————最后,分割一下——————————
推荐一篇文章,是在公众号: Python那些事上面看到的,
这篇文章将函数讲得很清楚,尤其是函数的调用和返回值。
Python中其实一切皆对象
这个概念很重要,这篇文章也讲得很清楚!
https://mp.weixin.qq.com/s/DiP4PBTTPSh9fqGZZxJy2g
网友评论