一、函数概念
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
二、函数作用
对某块功能的代码的封装。
提高代码的复用性(重用性)。
大大的提高了开发效率。
三、函数定义和调用
定义:
def 函数名():
pass
调用:
函数名()
注意:
函数是一次定义, 多次调用。
如果函数名相同, 后面的会覆盖前面的同名函数。
四、函数参数概念
作用:
进一步的提高了一个没有参数函数的复用性。
定义格式:
形参:形式参数(有多少个,看需求)。
def 函数名(形参1, 形参2, ...):
pass
调用格式:
实参:实际参数(有多少个,看形参)。
函数名(实参1, 实参2, ...)
五、函数返回值
作用:
把函数的内部的数据抛到函数的外部途径。
定义格式:
def 函数名(形参1, 形参2, ...):
代码逻辑
return 数值
调用格式:
变量名 = 函数名(实参1, 实参2, ...)
参数:
函数外部数据传递到函数内部。
返回值:
函数内部的数据抛到函数的外部。
retrun的作用:
结束函数。
给函数的调用者(执行者)返回值。
只有return -->None。
return 单个值:返回单个值,不改变数据类型。
return 多个值:以元组的形式返回。
没有return:默认返回None。
六、函数参数分类
位置参数:按顺序一一对应,传值即可。
关键字参数:只需要书写正确的形参名字。
缺省参数:传值即覆盖。
不定长参数:*args,**kwargs。
当函数定义的时候(*,**的作用):
*, **代表聚合,*将实参对应的所有位置参数聚合到一个元组,赋值给args,**将实参对应的所有的关键字参数聚合到一个字典中,赋值给kwargs。
当函数调用的时候(*,**的作用):
*,**代表打散。*是将所有的iterable元素打散成实参的位置参数。**是将字典的所有键值对打散成关键字参数。
形参的顺序:位置参数,*args, 缺省参数, **kwargs
七、变量类型
1、局部变量
概念:
定义在函数内部的变量。
作用域:
只能在自己的函数内部使用。
2、全局变量
概念:
定义在函数外部的变量。
作用域:
在整个模块内部。
总结:
默认情况下,如果函数内部的变量和函数外部的变量同名,不是一个变量一个是全局,一个是局部。
如果想利用函数修改全局变量的值:
def func():
global 全局变量名
nonlocal:下级函数对上级函数非全局变量进行修改。
如果在函数内部使用一个变量(顺序):首先在函数内部找局部变量,然后在函数外部的全局变量。
局部变量
* 开辟内存空间, 保存数据
* 函数内部没有可执行代码,局部变量就被销毁,内存回收。
全局变量
* 开辟内存空间, 保存数据
* 整个程序没有可执行的代码,程序将退出,全局变量销毁,内存回收。
八、函数名的应用
函数名即函数地址。
函数名可以作为变量。
函数名可以作为函数的参数。
函数名可以作为函数的返回值。
函数名可以作为容器类类型的元素。
九、闭包
内层函数对外层函数非全局变量的引用,并将内层函数函数名返回。
机制:python解释器遇到闭包,那么这个空间不会随着函数的结束而释放。
闭包的应用场景:装饰器、爬虫。
十、迭代器与生成器
迭代器:
可迭代对象:内部含有__iter__方法。
迭代器:内部含有__iter__方法和__next__。
可迭代对象–>迭代器iter(可迭代对象)。
迭代器取值__next__()、next()或for循环。
生成器:
可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(其他的数据类型需要调用自己的内置的__iter__方法),所以生成器就是可迭代对象。
生成器函数(含有yield)。
生成器推导式。
希望本文对你有所帮助~~如果对软件测试、接口测试、自动化测试、面试经验交流感兴趣可以加入我们。642830685,免费领取最新软件测试大厂面试资料和Python自动化、接口、框架搭建学习资料!技术大牛解惑答疑,同行一起交流。