一 命名空间
命名空间也叫做名称空间
内置名称空间:人家直接写好的,我们直接就可以调用的,就叫做内置名称空间
全局变量:除了函数内部定义的内容外,自己写的代码就叫做全局变量
局部变量:在函数内部定义的内容,就叫做局部名称空间
a=1 #全局变量 def func(): a=2 #局部变量 def func1(): a=3 #局部里的局部变量 print(a) func1() print(a) #print:就属于内置的名称空间 func() print(a)
三种命名空间之间的加载与取值顺序:
加载顺序:内置命名空间(程序运行前加载)->全局命名空间(程序运行中:从上到下加载)->局部命名空间(程序运行中:调用时才加载)
取值:
在局部调用:局部命名空间->全局命名空间->内置命名空间
x = 1 def f(x): print(x) print(10) 输出结果 10
在全局调用:全局命名空间->内置命名空间
x = 1 def f(x): print(x) f(10) print(x) print(max) 输出结果 10 1
在全局是不可以直接调用局部的变量,局部变量只能在低于该层和该层的函数去调用,而在局部是可以调用全局的变量的
a=1 #全局变量 def func(): def func1(): print(a) func1() print(a) func() print(a) 输出结果 1 1 1
在全局内部可以同时创建多个同等级的局部命名空间,而这些命名空间之间是没有关系的
a=1 def wahaha(): a=2 print(a) def shuangwaiwai(): print(a) wahaha() shuangwaiwai() 输出结果 2 1
作用域
作用域就是作用范围,按照生效范围可以分为全局作用域和局部作用域。
全局作用域:包含内置名称空间、全局名称空间,在整个文件的任意位置都能被引用、全局有效
局部作用域:局部名称空间,只能在局部范围内生效
globals和locals方法
global:就是在局部里面修改全局的变量值
a=0 def aa(): a=1 def bb(): global a #global:在局部变量修改全局变量的值 a=2 print(a) bb() print(a) aa() print(a) 输出结果 2 1 2
nonlocal:只修改局部的变量值,从该层的上一层一层一层的查找,找到第一个并修改
a=0 def aa(): a = 2 def cc(): def bb(): nonlocal a #总结:只修改局部的变量值,从该层向外层找到第一个并修改 a=1 print(a) bb() print(a) cc() print(a) aa() print(a) 输出结果 1 1 1 0
先有了作用域,才有了名称空间
什么是全局作用域:从调用的那层向外层一层一层的查找需要调用的内容,直到找到第一个,就会停止查找
二 函数名
直接用print打印函数名,不加上括号,结果打印出来会是这个函数的内存地址和函数名
函数名就是一个内存地址,相当于就是一个变量
def wahaha(): print(123) print(wahaha) 输出结果 <function wahaha at 0x0000000001FD3E18>
函数名可以赋值,也可以作为其他容器的元素
def func(): print('alex_aa') print(func) a=func print(a) a() l=[func] print(l) l[0]() 输出结果 <function func at 0x0000000002093E18> <function func at 0x0000000002093E18> alex_aa [<function func at 0x0000000002093E18>] alex_aa
函数名还可以作为函数的返回值或者参数
def wahaha(): name='alex' def shuangwaiwai(): print(name) return shuangwaiwai yousanru=wahaha() yousanru() 输出结果 alex
三, 三元表达式
三元表达式就是将一些简单的执行语句用更简单的代码写出来
比如:执行结构=判断语句成立的执行语句 if 判断语句 else 判断语句不成立的执行语句
a=10 b=9 c=a if a>b else b print(c) 输出结果 10
四 闭包函数
闭包函数一定要用到嵌套函数
什么是闭包函数:内部函数引用了外部函数的变量,这个内部函数就叫做闭包函数,闭包就是一种函数
def wahaha(): name='dadada' def shuangwaiwai(): #这个函数就是闭包函数 print(name) shuangwaiwai() wahaha() 输出结果 dadada