美文网首页Python程序员
说说 Python 的变量作用域

说说 Python 的变量作用域

作者: deniro | 来源:发表于2021-02-10 16:24 被阅读0次

先来看一个示例:

def f1(a):
   logging.info('a -> %s', a)
   logging.info('b -> %s', b)


logging.info('f1(3) -> %s',f1(3))

运行结果:


因为 b 没有定义,所以在运行 f1() 函数时抛错了。

在 pycharm 中也会以红色波浪形式提示我们这个变量还未定义:


解决这个问题也很简单,先定义好变量 b 即可:

输出结果:


因为我们没有为 f1() 函数定义返回值,所以f1() 函数的输出为 None。

我们在 f1() 函数内部对 b 进行赋值操作,结果令人意外:


输出结果:


pycharm 也以红色波浪线提醒我们这里的 b 变量存在问题。

通过 dis 模块,我们可以查看 Python 函数的字节编码:

from dis import dis
logging.info('dis(f1) -> %s',dis(f1))

运行结果:


从字面码中可以看出,变量 a 与 b 都是从局部作用域(LOAD_FAST)中加载。而变量 b 在使用前没有被初始化,所以抛错。

可以通过把变量 b 定义为 global,来修复上述代码:

这时的变量 b 就会从全局作用域中加载,所以运行正常:



Luciano Ramalho (作者),安道,吴珂 (译者).流畅的Python[M].人民邮电出版社,2017:308-311.

相关文章

  • #抬抬小手学Python# Python 之作用域下的 glob

    global 和 nonlocal 作用域 该部分内容涉及 Python 变量作用域相关知识,变量作用域指的是变量...

  • 说说 Python 的变量作用域

    先来看一个示例: 运行结果: 因为 b 没有定义,所以在运行 f1() 函数时抛错了。 在 pycharm 中也会...

  • python学习笔记|nonlocal/global

    python中引用变量的顺序为:当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变...

  • 变量作用域

    0. 命名空间 变量作用域1. 变量作用范围:可操作范围2. Python 是静态作用域,变量的作用域源于它在代码...

  • python的作用域

    前言  作用域是程序运行时变量可被访问的范围。 作用域  python变量的作用域很简单,就是LEGB:变量名引用...

  • Python基础重构-1.2数据类型

    1、变量和常量 变量作用域 Python的作用域一共有4种,分别是:L (Local) 局部作用域E (Enclo...

  • Python基础(十四): 函数作用域

    一、基本概念 1、变量的作用域 变量的作用范围: 可操作范围 Python是静态作用域, 也就是说在Python中...

  • Python初学(十五)

    这章说说变量的作用域和代码的复用 变量的作用域 根据程序中变量所在的位置和作用范围,变量分为局部变量和全局变量。 ...

  • Python的闭包与装饰器

    一、python的函数作用域 python的函数作用域的含义,简而言之,即函数执行时变量所在的作用域。在pytho...

  • Python装饰器与闭包!

    闭包是Python装饰器的基础。要理解闭包,先要了解Python中的变量作用域规则。 变量作用域规则 首先,在函数...

网友评论

    本文标题:说说 Python 的变量作用域

    本文链接:https://www.haomeiwen.com/subject/opahxltx.html