名称空间的作用域
# 作用域
名称空间所能作用的范围
# 内置名称空间
程序任何阶段任何位置都可以使用(全局有效)
# 全局名称空间
程序任何阶段任何位置都可以使用(全局有效)
# 局部名称空间
一般情况下只在各自的局部名称空间中有效
global与nonlocal关键字使用
# 关键字global: 局部修改全局变量
# 关键字nonlocal: 内部局部修改外部局部
'''
如果想在局部修改全局数据
如果数据为不可变类型则需要关键字global和nonlocal声明
如果数据为可变类型则无需关键字global和nonlocal声明
'''
函数对线(函数名)
# 函数遇到括号就会被调用
- 函数名可以当做变量名来赋值
- 函数名还可以当函数的实参
- 函数名可以当做函数的返回值
- 函数名可以当做容器类型(内部存放多数据)的元素
函数的嵌套调用
# 嵌套调用:函数内部调用其他函数
函数的嵌套定义
# 函数体内部定义其他函数
# 将复杂的功能全部隐藏起来 暴露一个简单的接口
闭包函数
# 闭 :定义在函数内部的函数
# 包 :内部函数使用了外部函数的名称空间中的名字
'只有同时满足这两个特征的函数才能叫做闭包函数'
# 闭包函数其实是给函数传参的第二种方式
-
闭包函数其实是给函数传参的第二种方式
-
方式一 函数体代码用到数据需要用到数据 直接在括号定义形参即可
def index(username):
print(username)
def my_max(a, b):
if a > b:
return a
return b
- 方式二 使用闭包函数
def outer(x,y):
# x = 2
# y = 40
def my_max():
if x > y:
return x
return y
return my_max
res = outer(2,4)
print(res())
装饰器的了解
"""
装饰器并不是一个新的知识
而是由我们之前所学习的 名称空间 函数对象 闭包函数组合而来
"""
# 器:指的是工具
# 装饰:给被装饰的对象添加额外功能
# 装饰器的原则就是
'''
装饰器的原则
开放封闭原则
开发:对扩展开放
封闭:对修改封闭
'''
'装饰器核心思想
在不改变被"装饰对象内部代码"和"原有调用方式"的基础之上添加额外功能'