Python–第六章 函数
什么是函数?
函数就是复用的代码片段,我们将其打包成块以便多次使用。
语法
一·定义方法
常见定义方法
使用def关键字,后跟括号,括号中可带参数,冒号结尾。
使用return返回需要输出的值。
如:def main(x,y):
简洁定义
使用lambda关键字可以快速创建一些很简单的函数
如:f = lamba x, y, z : x + y + z
输入f(1,2,3)即可得到1+2+3的和:6
二·关于参数
函数代码中的参数称为形参,而传入函数供其调用的参数称为实参
位置参数,关键字参数,默认值参数和不定长数目参数
位置参数,关键字参数
位置参数:传入参数按顺序录入函数的形参
关键字参数:调用参数时指定参数位置
当同时使用 位置参数 和 关键字参数 时,关键字参数应当在位置参数之后,否则程序会报错(随遇而安的参数要比挑三拣四的参数优先级高╮(╯▽╰)╭)
默认值参数
调用的参数无法满足形参需求时可用,如果没有参数传入,则该形参视为指定的默认值,如果有参数传入该形参,则默认值忽略
注意:默认参数值在函数被定义时已经计算完成
1 | def f(a, l = []): |
输出结果为
1 | [10,'b'] |
其中L1和L3指向了同一个列表,因为L3并没用足够的实参传入,函数自动调用列表L:[10],但列表作为可变对象,函数对形参的操作有可能会影响到实参.
不定长数目参数
在参数前添加*可将其变为可容纳多个参数的容器
??形参的改变会影响实参吗?
当实参是 不可变对象 时,形参值改变不会影响实参
当实参是 可变对象 时,形参值改变可能会影响实参
三·函数的返回值
函数使用 return 语句返回结果,可以为任意类型。
如果函数没有 return 语句,函数返回 None;如果 return 后没有表达式,也返回None。
函数执行到 return 时会返回值并结束
如:
1 | def isprime(i): |
当i不是质数时,满足if条件,执行 return False
并退出,并不会再执行到return True
四.局部变量与全局变量
在函数中的变量成为局部变量,函数外的为全局变量,如果全局变量与局部变量重名,则在函数内部使用局部变量,而在函数外部由于并没有局部变量的存在,使用全局变量.
如果希望在函数中使用全局变量,就需要使用global
关键字来声明.
五.递归
计算机擅长重复,递归指在函数中调用自生的编程技巧,它可以将一个复杂的问题简化为许多个相同步骤的过程,从而减少代码量
递归注意点
1.需要终止递归条件,避免无限循环
2.注意特殊的端点
例:斐波那契数列
1 | def fib(n): |
在实际操作过程中,我们发现存在大量的重复运算.可以用字典将已经计算得出的斐波那契数保存下来,简化代码
1 | pre = {0:1, 1:1} #确定特殊的端点指 |
六.几个重要的内置函数
1. sorted() 函数
作用:对字符串,列表,字典,元组等对象进行排序
语法: sorted(iterable[,key[,reverse]])
iterable
:序列(操作对象)reverse
:reverse = True
,降序;False
,升序key
: 对指定参数排序,如指定字典的值进行排序
2. map() 函数
作用: 将函数作用于序列的每一个元素
语法: map(fuction, iterable)
3. zip() 函数
作用: 将对象中的元素打包成一个个元组
例:
1 | >>>a = [1,2,3] |
zip()可以很方便地创建字典 d1 = dict(zip(a,b))
4.eval()和exec()函数
eval()
: 计算表达式,返回表达式的值exec()
: 运行python程序,返回结果
all()和any()函数
all()
:与门函数,参数全为True
则返回True
,否则返回False
any()
:或门函数,参数有一个为True
则返回True
,全为False
返回False
七.模块和包
引用模块的几个方法:
1.from XX import YY
从XX中引用YY函数,使用时可直接使用YY
2.import XX as A
引用XX模块为A,使用XX中的函数时需 A.YY
3.from XX import *
引用XX模块中的所有函数,调用时直接写YY