python课堂笔记——函数

函数

函数的基本定义是:为了实现一个特定功能的语句集合

#函数的基本定义
def 函数名(形式参数):
    函数体

形式参数和实际参数

在函数调用的过程中,函数本身并不关心实际参数会怎么样,因为python一般情况下是通过赋值的形式将实参的值传递给形参。

函数返回值

Python中存在无返回值和有返回值函数,一般在函数体中通过return返回处理结果;无返回值情况,是python自动帮助我们在函数体末尾加上了return None语句。存在返回值的函数需要在主程序中用变量来存储处理结果

存在多个返回值

当函数需要返回多个处理结果的情况下,直接在返回语句中跟上多个处理结果即可

return 处理结果1 处理结果2 处理结果3

返回多个处理结果时候,存在两种情况:

  1. 主程序使用单个变量接受处理结果,函数实际上会返回一个元组,元组内的元素就是多个返回结果。
  2. 主程序使用相匹配数量的变量接受处理结果,那么每个变量会按顺序的接受返回值。但是如果接受返回值的变量数量不匹配,程序会抛出异常

位置参数

调用函数的时候,实际上存在两种参数传递的方式:

  1. 位置参数:简单来说就是直接传递数值
  2. 关键参数:使用赋值的形式传递,调用函数名(形参名=值),可以改变已经被函数定义好的参数传递顺序

形参默认值

python允许在定义函数的时候,声明形参的默认值,称为默认参数。

#带有默认参数的函数定义方式
def 函数名(非默认参数 , 参数名 = 默认值, ...):
    函数体

可变长参数

python允许函数定义时,定义参数位可变长参数,即主程序可以向函数传递多个参数

#可变长参数函数定义
def 函数名(* args):#使用 *形参名字 的形式定义可变长参数
    函数体

函数会将主程序传递的多个参数合成为一个元组来处理。同样的普通参数需要放置在可变长参数之前。

**形式

在可变长参数中使用**定义形式参数,python会将形式参数转变成一个字典的形式,主程序需要使用关键参数的形式传递参数。所有传递的参数都会被当成字典的元素处理。

使用序列和字典作为参数

序列

如果主程序需要使用序列作为实参传递给函数,那么函数需要满足两个条件:

  1. 在函数体中,形式参数需要被作为序列来使用
  2. 如果主程序传递序列实参,但是函数形参定义方式为n个单变量,这时候调用函数时,实参的序列变量需要加上*,并且序列中的元素需要和形参的变量个数相匹配。(这里的*可以认为是一种可变长变量的自动拆装符号,也就是说,在接受或者准备拆成多个单变量的多变量参数前使用);普通变量和序列变量混合传递的情况下,带有 *的变量需要放在最后。

字典

  1. 形式参数需要被作为字典使用
  2. 直接传递字典即可

变量作用域

全局变量

在单个模块中,函数体外部定义的变量就可以视作全局变量,能够被本模块区全局识别和使用

局部变量

一般情况下,在函数体内部定义的变量就是局部变量,只能被函数体本身识别。

global关键字

在函数体内部声明的局部变量,可以通过关键字global转变为全局变量,但只能够在还没有被执行的剩下的模块内的语句中被识别和使用。

为了保证程序的正确性和模块化程度,尽可能的不在函数体内部直接使用全局变量,而是通过参数传递的方式使用全局变量。并且尽可能的少在函数体内部使用golbal关键字

修改同步

在函数体内部对形参的修改会同步到实参中需要看传递的实参是否是可变对象。

  1. 实参传递不可变对象,函数体内部对形参的任何修改都不会同步到实参中
  2. 实参传递可变对象,函数体内部对形参的修改会同步到实参中,也就是说实参会跟随形参变化

生成器函数

生成器是一种特殊的迭代器,它利用关键字yield以惰性的方式逐一返回元素。当执行函数体时遇见关键字yield会直接返回它后面的值,并且保留本次函数的执行信息。直到下一次主程序调用next函数时,重新回到当前位置继续执行

你可能感兴趣的:(python笔记,python,开发语言)