1.函数定义语法:
def 函数名(参数1, 参数2, ...):
函数体
return
关键点:
1. def 是定义函数的关键字,放在函数名前面,不能省略
2. 注意冒号的位置,不能省略,函数体需要缩进
3. 小括号之间的数据称为参数,参数不是必须的,可以省略
4. return 可以将指定的表达式返回给调用方,当没有表达式需要返回时,可以省略return或者只写return(return 相当于 return None)
5. 函数可以嵌套定义
示例:
return 相当于 return None,可以省略。
2. 函数调用:
通过函数名运行函数的过程叫做函数调用
语法:函数名(需要传递的参数)
无参数传递
参数传递
3.匿名函数:
python的匿名函数使用关键字lambda,而不是def
语法:
lambda [arg1 [,arg2,.....argn]]:expression
示例:
执行结果:
![]()
4. 变量的作用域:
变量能够被访问的范围成为作用域,作用域分为4种:
1. 局部作用域 L (Local)
2. 闭包函数作用外的函数中E (Enclosing)
3. 全局作用域G (Global)
4. 内建作用域 B (Built-in)
以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。
Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问
定义在函数里面的局部变量,在函数外是不能访问的,例如:
从报错信息可以看出,变量a未定义
2. 局部变量和全局变量:(这是粗略的把作用域分为函数内和函数外,和上面的分类方式不同)
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。变量同名时,局部变量屏蔽全局变量
2.1 全局变量和局部变量同名
运行结果:
从结果可以看出,局部变量的修改,不会影响到全局变量
2.2 局部作用域引用全局变量
运行结果:
3 global 和 nonlocal关键字
3.1 global变量
当局部作用域需要修改(访问则不需要)全局变量时,需要在局部区域内使用global关键字声明
运行结果为:
3.2 nonlocal
与gloabl关键字不同,nonlocal关键字用在函数嵌套之中,用于修改外层函数作用域内的变量
示例:
![]()
运行结果
![]()
没有使用nonlocal变量声明时,sub函数修改的是sub作用域中的韩式;当使用nonlocal关键字声明时,sub函数修改的变量时外层函数add作用域中的变量。