前言:本博文主要讲解Python函数操作及方法。


文章目录

  • 一、函数概念
  • 二、函数作用
  • 三、函数定义和调用
  • 四、函数参数概念
  • 五、函数返回值
  • 六、函数参数分类
  • 七、变量类型
  • 八、函数名的应用
  • 九、闭包
  • 十、迭代器与生成器


一、函数概念

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。

二、函数作用

  1. 对某块功能的代码的封装。
  2. 提高代码的复用性(重用性)。
  3. 大大的提高了开发效率。

三、函数定义和调用

定义:

def 函数名():
		pass

调用:

函数名()

注意:

  1. 函数是一次定义, 多次调用。
  2. 如果函数名相同, 后面的会覆盖前面的同名函数。

四、函数参数概念

作用:

  • 进一步的提高了一个没有参数函数的复用性。

定义格式:

  • 形参:形式参数(有多少个,看需求)。
def 函数名(形参1, 形参2, ...):
		pass

调用格式:

  • 实参:实际参数(有多少个,看形参)。
函数名(实参1, 实参2, ...)

五、函数返回值

作用:

  • 把函数的内部的数据抛到函数的外部途径。

定义格式:

def 函数名(形参1, 形参2, ...):
		代码逻辑
    return 数值

调用格式:

变量名 = 函数名(实参1, 实参2, ...)

参数:

  • 函数外部数据传递到函数内部。

返回值:

  • 函数内部的数据抛到函数的外部。

retrun的作用:

  1. 结束函数。
  2. 给函数的调用者(执行者)返回值。
  • 只有return -->None。
  • return 单个值:返回单个值,不改变数据类型。
  • return 多个值:以元组的形式返回。
  • 没有return:默认返回None。

六、函数参数分类

  1. 位置参数:按顺序一一对应,传值即可。
  2. 关键字参数:只需要书写正确的形参名字。
  3. 缺省参数:传值即覆盖。
  4. 不定长参数:*args**kwargs
  • 当函数定义的时候(***的作用):

*, **代表聚合,*将实参对应的所有位置参数聚合到一个元组,赋值给args**将实参对应的所有的关键字参数聚合到一个字典中,赋值给kwargs

  • 当函数调用的时候(***的作用):

***代表打散。*是将所有的iterable元素打散成实参的位置参数。**是将字典的所有键值对打散成关键字参数。

形参的顺序:位置参数,*args, 缺省参数, **kwargs

更多函数参数使用知识,请访问:浅谈Python函数调用方式的总结

七、变量类型

1、局部变量

概念:

  • 定义在函数内部的变量。

作用域:

  • 只能在自己的函数内部使用。

2、全局变量

概念:

  • 定义在函数外部的变量。

作用域:

  • 在整个模块内部。

总结:

  • 默认情况下,如果函数内部的变量和函数外部的变量同名,不是一个变量一个是全局,一个是局部。
  • 如果想利用函数修改全局变量的值:
def func():
  	global 全局变量名

nonlocal:下级函数对上级函数非全局变量进行修改。

  • 如果在函数内部使用一个变量(顺序):首先在函数内部找局部变量,然后在函数外部的全局变量。
  1. 局部变量
  • 开辟内存空间, 保存数据
  • 函数内部没有可执行代码,局部变量就被销毁,内存回收。
  1. 全局变量
  • 开辟内存空间, 保存数据
  • 整个程序没有可执行的代码,程序将退出,全局变量销毁,内存回收。

八、函数名的应用

  1. 函数名即函数地址。
  2. 函数名可以作为变量。
  3. 函数名可以作为函数的参数。
  4. 函数名可以作为函数的返回值。
  5. 函数名可以作为容器类类型的元素。

九、闭包

  • 内层函数对外层函数非全局变量的引用,并将内层函数函数名返回。
  • 机制:python解释器遇到闭包,那么这个空间不会随着函数的结束而释放。
  • 闭包的应用场景:装饰器、爬虫。

十、迭代器与生成器

迭代器:

  1. 可迭代对象:内部含有__iter__方法。
  2. 迭代器:内部含有__iter__方法和__next__
  3. 可迭代对象–>迭代器iter(可迭代对象)。
  4. 迭代器取值__next__()next()或for循环。

生成器:

  • 可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(其他的数据类型需要调用自己的内置的__iter__方法),所以生成器就是可迭代对象。
  1. 生成器函数(含有yield)。
  2. 生成器推导式。

更多迭代器与生成器知识,请访问:深究Python迭代器与生成器(建议收藏)