Python函数命名空间和作用域(Local与Global)

 更新时间:2022年03月08日 10:22:50   作者: python自学网  
这篇文章主要介绍了Python函数命名空间和作用域分别介绍Local与Global模式,内容详细,具有一定的参考价值,需要的小伙伴可以参考一下

摘要:

Python函数是一个包装起来的代码块,通过前面的返回函数,闭包函数等课程,我们发现其内部变量定义在不同的位置,使用起来的效果就有所不同,这就是python函数的作用域和命名空间。

1.Local作用域

a = 100
def func5():
    b = 50
    a = 99
    print('函数内a', a)
    print('函数内b', b)

print('函数外a', a)
func5()
print('函数外b', b)

返回结果:

函数外a 100
函数内a 99
函数内b 50
Traceback (most recent call last):
  File "C:/Users/Administrator/Desktop/python知识总结/2.python自学网-通用模块-视频源码/test.py", line 12, in <module>
    print('函数外b', b)
NameError: name 'b' is not defined

上面函数中定义b变量,所以外面无法输出。

2.Enclosing function locals作用域

a = 100
def func5():
    b = 50
    print('函数内a', a)
    print('函数内b', b)
    def func6():
        print('下层函数内a', a)
        print('下层函数内b', b)
    func6()
func5()

返回结果:

函数内a 100
函数内b 50
下层函数内a 100
下层函数内b 50

3.Global全局变量

a = 123
def func():
    a = 100
    print(a)
print(a)
func()
print(a)

a = 123
def func():
    global a  # 这里不能使用nonlocal
    a = 100
    print(a)
    print(locals())  # 查看局部变量
    print(globals())  # 查看全局变量
print(a)
func()
print(a)

4.非局部变量nonlocal

def func5():
    b = 50
    print(b)
    def func6():
        nonlocal b  # 非局部的,只适用于闭包内部
        b = 60
        print(b)
    func6()
    print(b)
func5()

5.就近原则

b = 1111
def func5():
    b = 50
    print(b)
    def func6():
        b = 60
        print(b)  # 这里的b从内到外究竟查找
    func6()
    print(b)
func5()


a = 100
def func5():
    b = 50
    print(a)
    print(b)
    def func6():
        b = 60
        print(b)
        print(a)
func5()

6.函数执行顺序

a = 123
def func1():
    print(a)
    print(b)
func1()  # 不能打印b
b = 456
func1()  # 可以打印b

7.循环、判断代码块中作用域问题

if True:
    a = 100
print(a)


for i in range(1, 10):
    print(i)
print(i)

循环代码块中没有作用域这样的情况。

到此这篇关于Python函数命名空间和作用域(Local与Global)的文章就介绍到这了,更多相关Python命名空间和作用域内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅析Python是如何实现集合的

    浅析Python是如何实现集合的

    之前我们介绍过字典的实现原理,它底层是基于哈希表实现的,而集合也是如此。本次我们来聊一下 Python 的集合是怎么实现的,希望对大家有所帮助
    2022-12-12
  • 使用Python实现数据库文档生成工具

    使用Python实现数据库文档生成工具

    这篇文章主要为大家详细介绍了如何使用Python实现数据库文档生成工具,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下
    2024-04-04
  • 详解Python字符串原理与使用的深度总结

    详解Python字符串原理与使用的深度总结

    本文将学习字符串数据类型相关知识,将讨论如何声明字符串数据类型,字符串数据类型与 ASCII 表的关系,字符串数据类型的属性,以及一些重要的字符串方法和操作,超级干货,不容错过
    2022-05-05
  • Python3实现的简单工资管理系统示例

    Python3实现的简单工资管理系统示例

    这篇文章主要介绍了Python3实现的简单工资管理系统,涉及Python文件读写、数据遍历、判断等相关操作技巧,需要的朋友可以参考下
    2019-03-03
  • Python实现计算字符串中出现次数最多的字符示例

    Python实现计算字符串中出现次数最多的字符示例

    这篇文章主要介绍了Python实现计算字符串中出现次数最多的字符,涉及Python针对字符串的遍历、统计等相关操作技巧,需要的朋友可以参考下
    2019-01-01
  • Python代码缩进和测试模块示例详解

    Python代码缩进和测试模块示例详解

    这篇文章主要给大家介绍了关于Python代码缩进和测试模块的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-05-05
  • Python3.2模拟实现webqq登录

    Python3.2模拟实现webqq登录

    这篇文章主要介绍了Python模拟实现webqq登录的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • python+selenium+PhantomJS抓取网页动态加载内容

    python+selenium+PhantomJS抓取网页动态加载内容

    一般我们使用python的第三方库requests及框架scrapy来爬取网上的资源,但是设计javascript渲染的页面却不能抓取,此 时,我们使用web自动化测试化工具Selenium+无界面浏览器PhantomJS来抓取javascript渲染的页面,下面实现一个简单的爬取
    2020-02-02
  • Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序)

    Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序)

    下面小编就为大家分享一篇Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • pytorch中使用cuda扩展的实现示例

    pytorch中使用cuda扩展的实现示例

    这篇文章主要介绍了pytorch中使用cuda扩展的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02

最新评论