函数

函数

函数定义和类型

  • 对某一功能的封装

  • 函数定义

    def 函数名称(参数):
        函数体代码
        return 返回值

    别忘了定义函数名后面加冒号“:”

  • 函数调用:函数名(参数)

  • 函数参数

    形参:定义函数时设置的参数

    实参:调用函数时传入的参数

无参函数

有参函数

带有返回值的函数

局部变量、全局变量

  • 局部变量

    • 函数内部定义的变量

    • 不同函数内的局部变量可以定义相同的名字,互不影响

    • 作用范围:函数体内有效,其他函数不能直接使用

  • 全局变量

    • 函数外部定义的变量

    • 作用范围:可以在不同函数中使用

    • 在函数内使用global关键字实现修改全局变量的值

    • 全局变量命名建议以g_开头,如:g_name

基本操作

想通过在函数内直接修改全局变量的方式是错误的,相当于在函数体内定义了一个与全局变量同名的局部变量。

全局变量不能在函数体内被直接通过赋值而修改。函数体内被修改的那个”全局变量“其实只是函数体内定义的一个局部变量,只是名称相同而已。所以,通过在函数体内直接对全局变量赋值是无法改变其值的。

应该在函数体内用global声明全局变量,才能修改:

全局变量定义的位置应当放在调用它的函数之前,不然会出错。

原因:python解释器从上到下逐行执行,那当执行此函数时,函数之后的变量是不存在的。

正确的全局变量定义方法:

在函数调用之前就把全局变量定义好

全局变量的类型为字典、列表时,在函数体内修改你值时,可不使用global关键字。

函数缺省参数、不定长参数、命名参数

  • 缺省(默认)参数

    • 函数定义带有初始值的形参

    • 函数调用时,缺省参数可传,也可不传

    • 缺省参数一定要位于参数列表的最后

    • 缺省参数数量没有限制

  • 命名参数

    • 调用带有参数的函数时,通过指定参数名称传入参数的值

    • 可以不按函数定义的参数顺序传入

  • 不定长参数

    • 函数可以接受不定个数的参数传入

    • def function([formal_args,]*args)函数调用时,传入的不定参数会被封装成元组

    • def function([formal_args,]**args)函数调用时,如果传入key=value形式的不定长参数,会被封装成字典

  • 拆包

    • 对于定义了不定长参数的函数,在函数调用时需要把已定义好的元组或者列表传入到函数中,需要使用拆包方法

缺省参数

命名参数

不定长参数

1、元组:*args

2、字典:**args

接受key:value对,然后封装到字典里

不定长参数综合使用+拆包

递归函数及应用

  • 函数调用自身

  • 注意:递归过程中要有用于结束递归的判断

递归函数

匿名函数及应用

匿名函数:定义的函数没有名称

  • 用lambda关键字创建匿名函数

  • 定义:lambda[参数列表]:表达式

  • 匿名函数可以作为参数被传入其他函数

匿名函数

应用场景:

  • 作为函数的参数

  • 作为内置函数的参数

python内置函数

enumerate()

enumerate() 函数用于将一个可遍历的数据对象(如列表元组字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

以下是 enumerate() 方法的语法:

参数:

  • sequence -- 一个序列、迭代器或其他支持迭代对象。

  • start -- 下标起始位置。

返回值:

返回 enumerate(枚举) 对象。

实例:

for循环使用 enumerate:

Last updated

Was this helpful?