python中有几种作用域

ops/2025/3/17 13:13:22/

在 Python 中,作用域决定了变量的可见性和生命周期。Python 主要有以下四种作用域:

1. 局部作用域(Local Scope)

   - 在函数或方法内部定义的变量属于局部作用域。
   - 这些变量只能在函数或方法内部访问。 

python">def my_function():x = 10  # 局部变量print(x)my_function()# print(x)  # 这里会报错,因为 x 在函数外部不可见

2. 嵌套作用域(Enclosing Scope)

   - 在嵌套函数中,外层函数的变量对内层函数可见。
   - 内层函数可以访问外层函数的变量,但不能直接修改(除非使用 `nonlocal` 关键字)。   

python">   def outer():y = 20  # 嵌套作用域变量def inner():print(y)  # 内层函数可以访问外层函数的变量inner()outer()

3. 全局作用域(Global Scope)

   - 在模块级别定义的变量属于全局作用域。
   - 全局变量在整个模块中都可以访问,但在函数内部修改全局变量需要使用 `global` 关键字。  

python">   z = 30  # 全局变量def my_function():global zz = 40  # 修改全局变量print(z)my_function()print(z)  # 输出 40,全局变量已被修改

4. 内置作用域(Built-in Scope)

   - 包含 Python 内置的函数和对象,如 `print`、`len` 等。
   - 这些名称在任何地方都可以访问,除非被局部或全局作用域中的同名变量覆盖。  

python">   print(len("hello"))  # 使用内置函数 lendef my_function():len = 10  # 局部变量覆盖了内置函数 lenprint(len)my_function()print(len("hello"))  # 内置函数 len 仍然可用

作用域查找顺序

当访问一个变量时,Python 会按照以下顺序查找:
1. 局部作用域(Local Scope)
2. 嵌套作用域(Enclosing Scope)
3. 全局作用域(Global Scope)
4. 内置作用域(Built-in Scope)

如果找不到变量,Python 会抛出 `NameError` 异常。

总结

- 局部作用域:函数内部的变量。
- 嵌套作用域:外层函数的变量对嵌套函数可见。
- 全局作用域:模块级别的变量。
- 内置作用域:Python 内置的函数和对象。

当我们理解这些作用域之后能够有助于我们更好地管理变量和避免命名冲突。


http://www.ppmy.cn/ops/166499.html

相关文章

HTTPS 证书相关

通常涉及到政府机构或官方组织的网站,这类网站对安全性和可信度要求较高,因此在选择 HTTPS 证书时需要特别注意。以下是适合的证书类型: 1. OV(Organization Validation)证书 适用场景:适用于需要验证组织…

leetcode hot100特殊题型

1️⃣4️⃣ 技巧(特殊题型、数学、位运算等) 136. 只出现一次的数字 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来…

解锁健康密码:拥抱养生,重塑生活

在当下,快节奏的生活如汹涌浪潮,裹挟着我们一路向前。高强度的工作、繁杂的生活琐事,让人们在忙碌中常常忽略了自身健康。然而,健康并非从天而降的幸运,而是精心呵护的成果,养生则是开启健康之门的钥匙。​…

PyCharm如何有效地添加源与库?

在使用PyCharm进行Python开发的时候,很多时候我们需要添加库或者设置源。这些操作可以帮助我们更方便地管理项目依赖,提升开发效率。接下来我会详细介绍如何在PyCharm中添加源和库,让你的开发环境更加灵活! 第一步:安…

新型XCSSET恶意软件利用增强混淆技术攻击macOS用户

微软威胁情报团队发现了一种新型的XCSSET变种,这是一种复杂的模块化macOS恶意软件,能够感染Xcode项目,并在开发者构建这些项目时执行。 这是自2022年以来的首个已知XCSSET变种,采用了增强的混淆方法、更新的持久化机制以及新的感…

C++单例模式精解

单例模式(重点*) 单例模式是23种常用设计模式中最简单的设计模式之一,它提供了一种创建对象的方式,确保只有单个对象被创建。这个设计模式主要目的是想在整个系统中只能出现类的一个实例,即一个类只有一个对象。 将单…

【Spring】SpringIOC详解,包括源码分析,xml以及注解开发

SpringIOC Spring简介 ​ Spring是一个开源框架,它由[Rod Johnson]创建。它是为了解决企业应用开发的复杂性而创建的。 ​ 目前是JavaEE开发的灵魂框架。他可以简化JavaEE开发,可以非常方便整合其他框架,无侵入的进行功能增强。 ​ Sprin…

如何优雅地将Collection转为Map?

将Collection转换为Map是常见的需求,尤其是在处理数据时需要快速查找或去重。以下是几种常见的方法,包括使用谷歌的Maps.uniqueIndex、Hutool的CollUtil.toMap和Java Stream API的Collectors.toMap三种方法。 谷歌的Maps.uniqueIndex /*** 使用com.goo…