0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

python变量的作用域

python爬虫知识分享 来源:python爬虫知识分享 作者:python爬虫知识分享 2022-03-03 16:50 次阅读

python变量的作用域

1. 作用域

Python的作用域可以分为四种:

L (Local) 局部作用域

E (Enclosing) 闭包函数外的函数中

G (Global) 全局作用域

B (Built-in) 内建作用域

变量/函数 的查找顺序: L –> E –> G –>B

意思是,在局部找不到的,便去局部外的局部作用域找(例如 闭包),再找不到的就去全局作业域里找,再找不到就去内建作业域中找。

会影响 变量/函数 作用范围的有

函数:def 或 lambda

类:class

关键字:global noglobal

文件:*py

推导式:[],{},()等,仅限Py3.x中,Py2.x会出现变量泄露。

1、赋值在前,引用在后

# ------同作用域内------
name = "MING"
print(name)

# ------不同作用域内------
name = "MING"
def main():
    print(name)

2、引用在前,赋值在后(同一作用域内)

print(name)
name = "MING"

# UnboundLocalError: local variable 'name' referenced before assignment

3、赋值在低层,引用在高层

# L -> E -> G -> B
# 从左到右,由低层到高层
def main():
    name = "MING"

print(name)
# NameError: name 'name' is not defined

2. 闭包

闭包这个概念很重要噢。你一定要掌握。

在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。其实装饰函数,很多都是闭包。

好像并不难理解,为什么初学者会觉得闭包难以理解呢?

我解释一下,你就明白了。

一般情况下,在我们认知当中,如果一个函数结束,函数的内部所有东西都会释放掉,还给内存,局部变量都会消失。但是闭包是一种特殊情况,如果外函数在结束的时候发现有自己的临时变量将来会在内部函数中用到,就把这个临时变量绑定给了内部函数,然后自己再结束。

你可以看下面这段代码,就构成了闭包。在内函数里可以引用外函数的变量。

def deco():
    name = "MING"
    def wrapper():
        print(name)
    return wrapper

deco()()
# 输出:MING

3. 改变作用域

变量的作用域,与其定义(或赋值)的位置有关,但不是绝对相关。 因为我们可以在某种程度上去改变向上的作用范围。

关键字:global 将 局部变量 变为全局变量

关键字:nonlocal 可以在闭包函数中,引用并使用闭包外部函数的变量(非全局的噢)

global好理解,这里只讲下nonlocal。

先来看个例子

def deco():
    age = 10
    def wrapper():
        age += 1
    return wrapper

deco()()

运行一下,会报错。

# UnboundLocalError: local variable 'age' referenced before assignment

但是这样就OK

def deco():
    age = 10
    def wrapper():
        nonlocal age
        age += 1
    return wrapper

deco()()
# 输出:11

其实,你如果不使用 +=-=等一类的操作,不加nonlocal也没有关系。这就展示了闭包的特性。

def deco():
    age = 10
    def wrapper():
        print(age)
    return wrapper

deco()()
# 输出:10

4. 变量集合

在Python中,有两个内建函数,你可能用不到,但是需要掌握它们。

globals() :以dict的方式存储所有全局变量

locals():以dict的方式存储所有局部变量

globals()

def foo():
    print("I am a func")

def bar():
    foo="I am a string"
    foo_dup = globals().get("foo")
    foo_dup()

bar()
# 输出
# I am a func

locals()

other = "test"

def foobar():
    name = "MING"
    gender = "male"
    for key,value in locals().items():
        print(key, "=", value)

foobar()
# 输出
# name = MING
# gender = male

审核编辑:符乾江
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • python
    +关注

    关注

    55

    文章

    4765

    浏览量

    84353
  • 作用域
    +关注

    关注

    0

    文章

    6

    浏览量

    6098
收藏 人收藏

    评论

    相关推荐

    CAN数据帧的各个及其作用

    CAN数据帧由多个组成,包括帧起始、仲裁、控制、数据和帧结束。每个都有其特定的作用
    的头像 发表于 07-24 15:10 770次阅读

    Win10 vscode中无法编译,提示python.exe: command not found怎么解决?

    电脑中已经删除之前安装的python,环境变量也添加了报错内容中要求的python路径,我用git bash、cmd也是可以打开python的,证明环境
    发表于 06-07 06:42

    python环境变量的配置pip

    Python环境变量的配置和使用是每个Python开发者都需要了解和掌握的基本技能之一。在本文中,我们将详细介绍如何正确配置Python环境变量
    的头像 发表于 12-15 15:41 2303次阅读

    如何在嵌入式C编码中规范变量

    防止外部文件的非正常访问。直接使用其他模块的私有数据,将使模块间的关系逐渐走向“剪不断理还乱”的耦合状态,这种情形是不允许的。 ◎ 避免局部变量与全局变量同名。 说明:尽管局部变量和全局变量
    的头像 发表于 12-07 14:42 314次阅读

    python中如何交换两个数的值相加

    Python是一种简单易学的高级语言,其交换两个数的值相加是一种常见的操作。交换变量的值可以在许多情况下发挥作用,如算法、排序、逻辑控制等。本文将详细介绍Python中实现交换两个数的
    的头像 发表于 11-29 17:29 597次阅读

    pycharm怎么配置python环境变量

    正确的 Python 环境变量是非常重要的,因为它会影响到项目的运行和依赖包的安装。本文将详细介绍如何在 PyCharm 中配置 Python 环境变量。 PyCharm 支持在全局和
    的头像 发表于 11-29 14:56 2670次阅读

    浅谈符号IO和图形IO

    符号IO组态 方法:把“符号IO”这个灰色块状拖拽到指定画面位置,鼠标右键弹出对话框“属性”后点击“常规”找到过程“变量”后,连接变量。添加文本并创建文本名称。
    的头像 发表于 11-29 09:33 1588次阅读
    浅谈符号IO<b class='flag-5'>域</b>和图形IO<b class='flag-5'>域</b>

    python软件怎么运行代码

    理解的机器代码。 在本文中,我们将详细介绍如何运行Python代码。我们将探讨以下几个方面:安装Python,设置环境变量,选择一个集成开发环境(IDE)或文本编辑器,编写代码,运行代码和调试代码。 第一步是安装
    的头像 发表于 11-28 16:02 837次阅读

    安装python怎么添加到环境变量

    Python是一种简单易学的脚本语言,广泛应用于开发各种类型的应用程序。为了在Windows操作系统上使用Python的命令行工具,需要将Python添加到系统的环境变量中。本文将向您
    的头像 发表于 11-23 16:40 2894次阅读

    python变量命名规则

    Python是一种高级编程语言,广泛应用于软件开发、数据分析和科学计算等领域。在Python中,变量是用来存储数据的容器,它们具有名称以及与之关联的值。然而,变量的命名并不是随意的,而
    的头像 发表于 11-23 15:44 1155次阅读

    python用input赋值多个变量

    Python中,可以使用 input 函数从用户那里获取输入,并将输入赋值给变量。当用户输入多个值时,可以使用空格、逗号或其他分隔符将它们分开。下面将详细介绍如何使用 input 函数赋值多个变量
    的头像 发表于 11-23 15:37 3027次阅读

    python循环创建变量并赋值

    循环是Python编程中非常重要的一个概念,它可以让我们轻松地重复执行某些代码块,从而简化编程过程并提高代码的效率。在循环中,我们经常需要创建变量并赋值,这是非常常见的操作。接下来,我将详尽地解释在
    的头像 发表于 11-23 14:51 1557次阅读

    for循环里的变量是局部变量

    作用是重复执行一段代码,循环变量则是在每次迭代中改变其值,以便控制循环的次数或迭代的范围。循环变量作用通常被限制在循环的花括号内部,这
    的头像 发表于 11-23 14:50 2388次阅读

    python如何导入模块

    Python是一种强大的编程语言,它支持模块化编程,使得开发者可以将代码分解为可重用且独立的模块。模块是一个包含函数、类和变量等定义的文件,我们可以使用import语句将这些模块导入到我们的程序中
    的头像 发表于 11-22 14:46 868次阅读

    Python中互换X和Y的值

    Python中,我们可以通过使用一个中间变量来互换X和Y的值。具体的步骤如下: 步骤一:定义X和Y的值 首先,我们需要定义X和Y的初始值。我们可以使用Python中的赋值语句来给X和Y赋初值。例如
    的头像 发表于 11-22 11:00 2281次阅读