第十一章:函数(python version 3.7.2)
函数的概念
- 函数是指一段可以直接被另一段程序或代码引用的程序或代码,也叫做子程序,方法.
- 现阶段可以理解成函数是带名字的代码块.
- 之前用过的input() ,print(), range(), len(), id() 等等都是函数,这些都是 python的内置函数,它们是由有经验的程序员提前定义好的,可以直接调用使用.
- 控制结构的条件之后也是代码块,只不过它们没有单独指定名字,没法直接使用它们.
函数的作用
- python内置函数虽然很丰富但并不能满足我们的个性化功能需求,这时就需要我们自己创建函数.
- 可以将功能复杂的程序进行细化后交由多人开发,这样有利于团队分工,缩短开发周期.
- 通过功能细化,可以有效缩减代码的长度,代码复用得以体现,当再次开发类似功能的产品时,只要稍作修改或直接引用就可以重复使用.
- 程序可读性得到提高,代码调试和后期维护难度降低.
定义函数
python定义函数的语法:
def 函数名([参数1, 参数2, ..., 参数n]):
'''函数文档注释'''
函数体
注意以下几点:
- 函数定义以
def
关键词开头,后面接上函数名称
和圆括号 ()
.- 传入参数须放在圆括号之内,不同的参数用
逗号
隔开,即使一个参数也没有,这对圆括号也必须保留
.- 参数是变量,会在函数体中用到它,目的在于提高函数的灵活性和可复用性,定义函数时的参数是形参.
- 函数的第一行语句可以选择性地使用注释文字,用于存放函数功能和使用说明.
- 函数体是
以冒号起始
的一个缩进统一的代码块,负责函数具体内容的执行.return [表达式]
结束函数,选择性地返回一个值给调用方.不带表达式的return相当于返回None
.- 若有多个返回值时,则返回值之间必须用
逗号
分隔,调用时要有多个变量来接收返回值
.
函数创建后并不会执行,必须在程序中调用该函数才会执行.
调用函数
python调用函数的语法.
[变量 = ]函数名称([参数1, 参数2, ..., 参数n])
注意以下几点:
- 如果函数定义的有形参,那么在调用时必须传参(特殊情况下面说).
- 如果函数有返回值,可以使用变量来存储返回值.
- 在函数的返回值对于调用不重要时可以忽略,即不使用变量存储函数返回值.
- 函数定义时的参数称为形参,函数调用时的参数称为实参.
函数的返回值
形参和实参
定义函数的时候写的是形参,调用函数的时候写的是实参.(简单理解:形参就是占位符,等待实参的到来,在使用形参时实际用的是实参的值)
情况并不总是这样,有些情况就会改变到实参的值.
- 列表中实际存储的是元素的地址引用.
- 出于对列表性能的考虑,存放的元素地址会放在连续的内存空间中.
- 既然是连续的内存,只要知道列表的地址,按照与列表地址的距离给每个元素标上号,这个标号称为偏移量.
- 也就是在获取列表内部元素时使用的索引.当找到元素在列表中的引用时,就可以访问到元素实际的值了.
例如:
当调用函数时,参数data会复制变量list1的引用,如果我们使用data加索引的形式访问或修改元素,实际访问或修改的就是list1的元素.
当我们使用赋值语句data[i] += 10 的时候,会用当前值加上10并开辟一块新的内存存储这个计算结果,然后赋值操作会让data中对应元素的所在地址变更为这个新地址,此时list1同样指向这个列表,这样看list1中的元素就改变了.
理解以下规则即可:
- 当实参类型是可变类型时,那么函数体修改形参的内容会影响到函数外作为实参的值.
- 而当实参类型是不可变类型时,那么函数体修改形参的值不会影响到函数外作为实参的值.
- 所谓可变对象是指,对象的内容可变,而不可变对象是指对象内容不可变.
- 可变数据类型的值改变,id值不变.
- 不可变数据类型的值改变,id值随之改变.
现在只需要知道:
- 内置可变类型有:列表,集合,字典.
- 内置不可变类型有:数值,字符串,元组,布尔,None类型.
如有错误还望指出