第九章 掌握Python的函数处理

函数的定义
在Python中使用def来定义函数。
语法:
def funtion_name(param_list):
    return value
funtion_name表示函数名,param_list表示形参列表(参数之间使用逗号隔开,每个参数位置,数量要与实参对应。)。return可以有返回值也可以没有(假如有多个返回值,其实实质就是元组,比如return 1,2,3)。
函数名要小写,多个单词使用下划线隔开。

 

2.1 彻底掌握函数的参数用法
位置参数与关键字参数
位置参数:在调用函数时,会将实参与形参一一对应,如果对不齐则会报错。
关键字参数:在调用函数时,把形参名当成键名,实参当成键值的方式。function(形参=实参),无需对齐位置。

 

函数参数的默认值
语法:
def function_name(param = default):
        pass
为参数设置默认值后,如果不传递对应的实参,则会使用默认值代替。定义默认值时,一定要将有默认值的参数放在右边。
例子:

 

函数的引用类型参数
前面讲过变量是一个保存内存地址的容器,假如在函数中传入了复合数据类型(元组,列表,字典,集合,字符串)时,传递的是该变量的内存地址拷贝,在函数中修改这个变量,修改的是同一块内存空间的值,这种就叫引用类型参数。

 

3.1 彻底掌握函数的可变参数
理解可变参数
可变指的是数量可变,给形参添加一个*或**的修饰符,表示该参数数量可变。

 

操作符*与**
1.使用*将实参收集为元组

 

 

可变形参的收集范围:从可变形参的位置开始,从左到右。

定义时一般把可变形参放在右边(和有默认值的参数同个道理),当然也可以放在左边,但是就需要关键字(key,键名)来调用普通参数。

比如上面相同的例子可以这样表示:

2.使用**将实参收集为字典

与*不同的是,**的实参需要带关键字(key,键名)调用

 

3.混合使用*和**

4.通用名写法
当我们需要定义一个可变的形参,可以使用通用的写法。*args表示元组类型,**kwargs表示字典类型
比如:def fun(*args,**kwargs):

 

对实参进行解包
在定义形参时,使用*或**是将参数收录在元组或字典中。
在调用实参时,使用*或**是将实参解包(拆解成单个元素)

1.使用*对可迭代对象进行解包

目前学过的可迭代对象,字符串,列表,元组,集合,字典(通常用**来解包)

2.使用**对字典进行解包

对字典进行解包时,字典中的键名与函数中的形参名一一对应,实参则为键名对应的键值。

 

4.1 彻底掌握lambda表达式
理解匿名函数
匿名函数:没有函数名的函数。Python中通过lambda表达式来定义匿名函数
语法:
lambda params:expression
params表示形参,可以为空。expression表示表达式。表达式的值会直接返回给函数调用方,无需return
例子:
优点:与具名函数相比,形式上更简单灵活,只需一行代码。可以做参数传递,可以做返回值给调用方,可以嵌入到其他数据结构。
缺点:不能实现复杂的逻辑。
1.做参数使用(一般做默认值参数,这样调用就可以不用传参,同时也可以执行到表达式的逻辑)

2.嵌入到字典结构中使用

 

 3.做返回值

 

5.1 彻底掌握函数装饰器
理解函数装饰器
在原有的功能基础上进行扩展。无需更改代码逻辑,在外层加个函数,用外层函数来调用需要被修饰的函数,这个外层函数就是装饰器。

 

理解闭包函数
闭包函数:就是内嵌函数,在函数中定义另一个函数,这个函数可以调用外层函数的参数,变量。

 

使用闭包进行功能拓展

 

装饰器语法糖
虽然上面的例子实现了welcome函数功能扩展,但是不够直观,操作也复杂(需要赋值,再执行闭包函数)
Python提供了语法糖,在函数头前面加上@decortator的修饰符,可以对当前函数进行修饰,decortator表示装饰器(上面例子中login就是装饰器)。

 

在不确定被装饰对象的参数时,可以使用可变参数*args(收录为元组)或**kwargs(收录为字典)

 

在Python中,对函数对象进行装饰的装饰器,称为函数装饰器。对类对象进行装饰的,称为类装饰器。

 

5.1 彻底掌握递归函数

理解递归函数

自己调用自己的函数,称为递归函数。(如果不设置边界,则会一直循环下去,直到被KILL)

 

上面例子中使用了if语句来控制递归的调用,限制了递归的次数。(相当于设置了边界)
如果不控制递归次数,系统将会报错(因为有递归深度限制,可以理解为递归次数限制),并且会不断地消耗系统资源,占用大量内存。

 

6.1 必须掌握的Python内置函数
什么是内置函数
Python中预先编写好的基础函数,无需额外导入,可以直接拿来使用

 

数学运算函数
1.abs(x):计算绝对值,参数x必须是数值类型或者可以隐式转换成数值的类型(比如True可以转换成1)
例:year = abs(-2021) print(year) # 2021
2.divmod(x,y) :计算商和余数,返回值为元组。商结果为x//y,余数结果为x%y
例:x,y=divmod(10,3) # x = 3,y = 1
3.pow(x,y,z=None):计算幂值(n次方),表示求x的y次方%z,z默认None
例:a = pow(2,2,3) # a = 1

 

序列生成函数
1.生成一个整数序列:range(start,stop,[step]),生成一个[start,stop)区间的序列,step为步长。start默认为0
2.生成一个索引序列:enumerate(iterable,[start=0]),start表示索引的起始值
例:for key,value in enumerate(['a','b']) : print (key,value) # 0 'a'  1 'b' 

 

映射函数
1.map(func,*iterables):表示将可变参数的可迭代对象映射到func中处理,func也可以是匿名函数,最终返回结果序列。
例|:number = list(map(lambda x:x**2,[1,2,3]))  # number = [1,4,9]

 

基础统计函数
1.len(contain):获取contain的元素数量。contain对象主要是列表,元组,字典,集合,字符串。
例:print(len([1,2,3]))  # 3
2.max/min/sum(iterable):计算可迭代对象的最大/最小/合值。
例:a = max([1,2,3]) # 3

 

字符处理函数
1.ord(charater):返回字符的unicode值。例:a = ord('z') # 122
2.chr(unicode):返回unicode值对应的字符。例:a = chr(122) # a

 

类型相关函数
1.id(object):获取对象的内存地址
2.type(object):获取对象的类型名

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值