前言:本博文主要讲解Python函数操作及方法。
文章目录
- 一、函数概念
- 二、函数作用
- 三、函数定义和调用
- 四、函数参数概念
- 五、函数返回值
- 六、函数参数分类
- 七、变量类型
- 八、函数名的应用
- 九、闭包
- 十、迭代器与生成器
一、函数概念
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道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
更多函数参数使用知识,请访问:浅谈Python函数调用方式的总结
七、变量类型
1、局部变量
概念:
- 定义在函数内部的变量。
作用域:
- 只能在自己的函数内部使用。
2、全局变量
概念:
- 定义在函数外部的变量。
作用域:
- 在整个模块内部。
总结:
- 默认情况下,如果函数内部的变量和函数外部的变量同名,不是一个变量一个是全局,一个是局部。
- 如果想利用函数修改全局变量的值:
def func():
global 全局变量名
nonlocal
:下级函数对上级函数非全局变量进行修改。
- 如果在函数内部使用一个变量(顺序):首先在函数内部找局部变量,然后在函数外部的全局变量。
- 局部变量
- 开辟内存空间, 保存数据
- 函数内部没有可执行代码,局部变量就被销毁,内存回收。
- 全局变量
- 开辟内存空间, 保存数据
- 整个程序没有可执行的代码,程序将退出,全局变量销毁,内存回收。
八、函数名的应用
- 函数名即函数地址。
- 函数名可以作为变量。
- 函数名可以作为函数的参数。
- 函数名可以作为函数的返回值。
- 函数名可以作为容器类类型的元素。
九、闭包
- 内层函数对外层函数非全局变量的引用,并将内层函数函数名返回。
- 机制:python解释器遇到闭包,那么这个空间不会随着函数的结束而释放。
- 闭包的应用场景:装饰器、爬虫。
十、迭代器与生成器
迭代器:
- 可迭代对象:内部含有
__iter__
方法。 - 迭代器:内部含有
__iter__
方法和__next__
。 - 可迭代对象–>迭代器iter(可迭代对象)。
- 迭代器取值
__next__()
、next()
或for循环。
生成器:
- 可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(其他的数据类型需要调用自己的内置的
__iter__
方法),所以生成器就是可迭代对象。
- 生成器函数(含有yield)。
- 生成器推导式。
更多迭代器与生成器知识,请访问:深究Python迭代器与生成器(建议收藏)