从零开始的Linux运维屌丝之路,资源免费分享平台   运维人员首选:简单、易用、高效、安全、稳定、社区活跃的开源软件
  • 首页
  • Python
  • 23、Python 嵌套函数和函数作用域、命名空间

23、Python 嵌套函数和函数作用域、命名空间

发布:蔺要红04-25分类: Python

 
函数被定义以后,如果不调用函数,代码不会被执行
函数内部可以再定义函数
如果想执行函数必须要调用
 
# -*- coding:UTF-8 -*-
def func01():
    print("Lin")
    def func02():
        print("Yao")
func01()
#函数被定义以后,如果不调用函数,代码不会被执行
E:\Python\学习\venv\Scripts\python.exe E:/整理版笔记/python/函数/函数-嵌套函数.py
Lin
# -*- coding:UTF-8 -*-
def func01():
    print("Lin")
    def func02():
        print("Yao")
    func02()
func01()
#函数内部可以再定义函数
#如果想执行函数必须要调用

E:\Python\学习\venv\Scripts\python.exe E:/整理版笔记/python/函数/函数-嵌套函数.py
Lin
Yao
 
嵌套函数中变量的优先级

 
# # -*- coding: UTF-8 -*-
age = 20
def func01():
    age = 30
    print(age)
    def func02():
        age = 40
        print(age) #在一个函数里面,局部变量具有最高优先级,所以会输出40
    func02()
func01()

E:\Python\学习\venv\Scripts\python.exe E:/整理版笔记/python/函数/函数-嵌套函数中变量的优先级.py
30
40
# -*- coding: UTF-8 -*-
age = 20
def func01():
    def func02():
        print(age)  #age会优先找父级的局部变量、当局部变量没有定义的时候才会找全局变量
    age = 40
    func02()
func01()

E:\Python\学习\venv\Scripts\python.exe E:/整理版笔记/python/函数/函数-嵌套函数中变量的优先级.py
40
  函数-作用域
 
python中函数就是一个作用域(JavaScript类似)
所有的局部变量放置在当前函数的作用域里、
代码定义完成后,作用域已经生成,作用域链向上查找
无论在任何位置调用函数,都会在函数位置向上查找

函数-命名空间
 
名称空间:name space,存放名字的地方:
举例x=1  1存放在内存中,
存放名字x与1绑定关系的地方=name space

locals:是函数内的名称空间,包含局部变量和形参
global:全局变量,
builtins:内置模块的名字空间

不同变量的作用域不同,就是由这个变量所在的命名空间决定的

全局范围:全局存活,全局有效
局部范围:临时存活,局部有效
查看作用域的方法:globals(),locals()

作用域的查找顺序:LEGB
 
L:locals 是函数内的名字空间,包括局部变量和形参
E:enclosing 外部嵌套函数的名字空间
G:globals 局变量,函数定义所在模块的名字空间
B:builtins 内置模块的名字空间
 
 
# -*- coding: UTF-8 -*-
age = 20
def func01():
    age = 30
    def func02():
        print(age)
    return func02 #函数名也可以当做返回值
val = func01()
print(val)
val()

E:\Python\学习\venv\Scripts\python.exe E:/整理版笔记/python/函数/函数作用域.py
<function func01.<locals>.func02 at 0x00000000006C5730>
30
#代码定义完成后,作用域已经生成,作用域链向上查找
#无论在任何位置调用函数,都会在函数位置向上查找
 
温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,如有侵权我会在24小时之内删除!

欢迎使用手机扫描访问本站