一,函数的参数类型
不可变类型参数:整数、字符串、元组。
fun(a)内部修改 a的值,只是修改另一个复制的对象,不会影响 a 本身。
可变类型:列表,字典。如 fun(la), 则是将 la 真正的传过去,修改后fun外部的la也会受影响
二,命名空间
命名空间指的是保存程序中的变量名和值的地方。
命名空间的本质是一个字典, 用来记录变量名称和值。字典的key是变量的名称,字典的value对于的是变量的 值。
例如 {‘name’:’zs’,’age’:10} 命名空间一共分为三种:
局部命名空间、全局命名空间、内置命名空间
局部空间: 每个函数都有自己的命名空间,叫做局部空间,它记录了函数的变量,包括函数 的参数 和局部定义的变量
全局空间: 每个模块拥有它自已的命名空间,叫做全局命名空间,它记录了模块的变量,包 括函数、 类、其它导入的模块。
内置名称空间: 任何模块均可访问它,它存放着内置的函数和异常。 input,print,str,list,tuple…
三、作用域
作用域指的是变量在程序中的可应用范围。 作用域按照变量的定义位置可以划分为4类即LEGB: Local(函数内部)局部作用域。 Enclosing(嵌套函数的外层函数内部)嵌套作用域(闭包)。 Global(模块全局)全局作用域。
Builtin(内建)内建作用域。(指的是builtins.py模块)
Python内层作用域访问外层作用域时的顺序: Python搜索4个作用域[本地作用域(L)之后是上一层结构中def或者lambda的本 地作用域(E),之后是全局作用域(G)最后是内置作用域(B)(即python的内置类和 函数等)] 并且在第一处能够找到这个变量名的地方停下来。如果变量名在整个的搜索过程 中都没有找到,Python就会报错。
四、全局变量和局部变量
在函数中定义的变量称为局部变量,只在函数内部生效, 在程序一开始定义的变量称为全局变量,全局变量的作用域是整个程序。
五、global和nonlocal关键字
1、global关键字可以将局部变量变成一个全局变量。 格式: global 变量名称。
2. nonlocal关键字可以修改外层(非全局)变量。
六、命名空间和作用域的关系
命名空间定义了在某个作用域内变量名和绑定值之间的对应关系,命名空间是键 值对的集合,变量名与值是一一对应关系。 作用域定义了命名空间中的变量能够在多大范围内起作用。
七、内置函数
由于时间问题,重点讲解如下的内置函数。其他内置函数课下验证。 Abs() 函数 max() 函数、map() 函数、filter() 函数,zip() 函数
八、匿名函数 在定义函数的时候,不想给函数起一个名字。这个时候就可以用lambda来定义 一个匿名函数
语法: 变量名= lambda 参数:表达式(block) 参数:可选,通常以逗号分隔的变量表达式形式,也就是位置参数
表达式:不能包含循环、return,可以包含if…else…
注意:
1.表达式中不能包含 循环,return
2.可以包含 if…else…语句.
3.表达式计算的结果直接返回
九、嵌套作用域和lambda lambda表达式也会产生一个新的局部作用域。在def定义的函数中嵌套labmbda 表达式,lambda表达式 能够看到所有def定义的函数中可用的变量。
lambda表达式总结:
优点:代码简洁,不增加额外变量。
缺点:难于理解,降低了可读性。 建议:不提倡使用lambda, 除非你知道自己在干什么。在团队开发中, 一个良 好易读的代码是非常重要的,有助于提升团队协同开发效率,减少沟通和维护成 本。