// 函数使用期间:变量的作用域一定要注意,主要体现在 1. 变量作用域内是否被定义 2. 可变对象传参是否会被修改
概念:内存中变量名和对象的对应关系 // 字典
// 每个命名空间都是独立的存在,可以存在相同名字的变量
分类:
1. 局部命名空间:函数所拥有的命名空间,记录了函数中定义的变量、入参等
2. 全局命名空间:模块级的命名空间 // 模块加载时创建
3. 内置命名空间:放置内置函数和异常 // 任何地方都可以使用
生命周期:
1. 函数调用时创建、执行结束或抛异常删除
2. 模块加载时创建,一直在python解释器退出
3. python解释器创建时创建
*注意*
python解释器加载期间,会加载出内置命名空间和全局命名空间,局部命名是在调用时创建,函数调用结束自动退出。
作用域:针对变量,指的是变量的可用范围 // 其实作用域就是指的命名空间内变量的作用范围
分类:
只有函数、类、模块有作用域,代码块没有作用域
// 变量查找范围 LEGB
1. 局部作用域
2. 嵌套作用域
3. 全局作用域
4. 内置作用域
两个特殊参数:
1. global // 使得内部作用域内的变量可以修改全局变量
2. nolocal // 使用内部作用域内的变量可以修改嵌套作用域内的变量
工厂函数和嵌套作用域 // 内层函数都是可以记住顶层函数的状态
"""
def func():
x = 1
def action():
x = 1
pass
return action // 此处的action函数会记住外层函数func的变量
"""
可变对象传参和不可变对象传参
1. 不可变对象:值传递,内部不可修改
2. 可变对象:指针传递,内部可以修改
避免可变对象传参的修改
1. 调用时拷贝,避免在函数内部修改外部可变对象
func(a,b[:])
2. 函数内部进行拷贝
func(a,b):
b = b [:]
可变参数类型
# 函数头部:收集任意数量的参数
*args ==> args会是一个元祖
**args ==> args会是一个字典
1. map函数
list(map(lambda x:x + 2,[1,2,3,4])) => [3,4,5,6] // map对序列中每个元素执行相同的操作
2. filter函数
list(map(lambda x:x > 3,[1,2,3,4,5])) => [4,5] // 返回结果为True的元素
3. reduce函数
from functools import reduce
reduce(lambda x,y:x+y,[1,2,3,4]) => 10 // python3 reduce已经移到内置命名空间里面
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。