函数
一.控制文件内指针移动
1.只有在t模式下read(n),n代表字符个数,除此以外都是以字节为单位
2.f.seek():指针移动是以字节为单位的,第一个参数是移动的字节的个数,第二个参数是模式
三种模式:只有0模式既可以在t下用也可以在b下用,而1,2两种模式只能在b模式下使用
0(默认的):参照的是文件开头
1 : 参照的是指针当前所在的位置
2: 参照的是文件末尾 # f.seek(0,2) #指针移动到文件末尾
二.函数的基本使用
1.什么是函数
在程序具备某一功能的工具----函数
事先准备好工具----函数的定义
遇到应用场景、拿来就用----函数的调用
分为两类:内置函数和自定义函数
2.为何要用函数
为了解决代码冗余、程序的组织结构不清晰、可读性差以及扩展性差的问题
3.如何用函数
函数的使用必须遵循一个原则:先定义,后引用
3.1 先定义
定义语法:def 函数名(参数1,参数2,。。。):
‘’‘
文档注释
’‘’
代码块
return 值
3.2 后调用
函数名()
3.3 定义阶段只检测语法,不执行代码
3.4 调用阶段:开始执行函数体代码
4.定义函数的三种形式
4.1无参函数:函数名后不添加任何参数,只是执行一些操作时使用
4.2有参函数:函数名后添加参数,需要根据外部传进来的参数,才能执行相应的逻辑
4.3空函数:函数体代码为pass,用来设计代码结构
5.调用函数的三种形式
5.1语句形式:函数名()
5.2表达式形式:需要对函数的返回值进行进一步的处理 # 函数名()*12
5.3函数的调用可以当作另一个函数的参数传入 # 函数名(函数名())
三.函数的返回值
1.什么是函数的返回值
返回值是函数体代码的运行成果
2.为何要有返回值
需要拿到函数处理结果做进一步的处理,则函数必须要有返回值
3如何用返回值
return返回值的特点:
3.1返回的值没有类型限制,也没有个数限制
3.1.1return或者函数没return:返回值为None
3.1.2return 值:返回的就是该值本身
3.1.3return 值1,值2,值3:返回元组(值1,值2,值3)
3.2return是函数结束运行的标志,函数内可以有多个return,但只要执行一次,函数就立即结束,并且将return值当作本次调用的结果返回
四.函数参数的使用
1.函数的参数分为两大类:
1.1形参:在定义函数时括号内指定的参数(变量名),称之为形参
1.2实参:在调用函数时括号内传入的值(变量值),称之为实参
两者的关系:在调用函数时,实参值(变量值)会传给形参(变量名),这种绑定关系在调用函数时生效,调用结束后解除绑定
2.函数参数详解
2.1形参:
2.1.1位置参数:在定义阶段,按照从左到右的顺序依次定义的形参
特点:必须被传值,所传值的个数不能多,也不能少
2.1.2默认参数:在定义阶段,就已经为某个形参赋值,该形参称之为默认形参
特点:在定义阶段就已经有值,意味着调用阶段可以不用为其传值,也可以为其传值
注意点:位置形参必须放在默认形参的前面
使用:在调用函数时,默认形参在大多数的情况下,不需要为其传值
2.1.3形参中*与**的用法
1.形参中带*:*会将溢出的位置实参存成元组的形式然后赋值给其后的变量名(*后面跟的是能被for循环循环的)
2.形参中带**:**会将溢出的关键字实参存成字典的格式然后赋值给其后的变量名(**后面跟的是字典)
2.2实参
2.2.1位置实参:在调用阶段,按照从左到右的顺讯依次传入的值
特点:这种传值方式会与形参一一对应
2.2.2关键字实参:在调用阶段,按照key=value的格式传值
特点:可以完全打乱位置,但仍然能为指定的形参传值
注意:同一个形参只能被赋值一次,位置实参必须放在关键字实参的前面
2.2.3实参中带*与**的用法(通常*args,**kwargs)
1.实参中带*:先将实参打散成位置实参,然后再与形参做对应
2.实参中带**:先将实参打散成关键字实参,然后再与形参做对应
2.3可变长的参数:
可变长指的是实参值的个数不固定。
而实参有按位置和按关键字两种形式定义,针对这两种形式的可变长,形参对应有两种解决方案来完整地存放它们,分别是*args,**kwargs
当我们想把一个函数的实参原封不动传给另一个函数的形参时:
def bar():
pass
def func(*args,**kwargs):
bar(*args,**kwargs)
func()