Python函数中的作用域规则详解

yizhihongxing

Python函数中的作用域规则详解

作用域是程序中变量可见性和生命周期的范围,Python中的作用域可以被分成四种:局部作用域、嵌套作用域、全局作用域和内置作用域。了解这些作用域规则是理解Python语言非常关键的部分之一。

局部作用域

在Python函数中,由程序员在函数内部定义的变量属于函数内部的局部作用域。当一个函数被调用时,这个函数的局部作用域被创建,当函数返回时,局部变量的生命周期也结束了。

def hello():
    message = "Hello, world!"
    print(message)

hello() # 输出 "Hello, world!"
print(message) # 报错,因为 message 不在全局作用域中

在上面的例子中,message 的作用域只在函数内部,因此在函数外部访问 message 变量会产生错误。

嵌套作用域

嵌套作用域指的是内部函数中定义的变量可以被其外部函数访问。在内部函数中定义的变量被称为自由变量,自由变量可以被内部函数修改。如果内部函数中的同名变量被重新赋值,那么变量的作用域就被定义为局部作用域。

def outer():
    message = "Hello, world!"
    def inner():
        nonlocal message # 标记 message 不是局部变量,而是外部函数变量
        message = "Hello, inner!"

    inner()
    print(message) # 输出 "Hello, inner!"

outer()

在上面的例子中,inner 函数中的 message 变量使用 nonlocal 关键词标记在嵌套作用域中,可以在内部函数中修改外部函数中定义的 message 变量。

全局作用域

在Python程序中全局作用域指的是在模块中定义的变量,全局变量在模块中声明,但在函数中进行访问。

a = 10

def hello():
    print(a)

hello() # 输出 10

在上面的例子中,a 是全局变量,在 hello 函数中进行了访问,但是没有对其进行修改。

如果要在函数中修改全局变量,需要使用 global 关键词。

a = 10

def hello():
    global a # 声明 a 是全局变量
    a = 20 # 修改全局变量
    print(a)

hello() # 输出 20
print(a) # 输出 20

内置作用域

Python中还有一个内置作用域,它包含了Python内置的函数和变量,这些变量在所有程序和模块中都是可用的。

print(len("Hello, world!")) # 输出 13

在上面的例子中,len 是Python内置函数,在任何程序中都可以直接使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python函数中的作用域规则详解 - Python技术站

(0)
上一篇 2023年6月5日
下一篇 2023年6月5日

相关文章

  • python从子线程中获得返回值的方法

    让我来为你讲解如何在 Python 中从子线程中获得返回值。 在 Python 中,可以通过多线程的方式来实现并发操作。在这种情况下,你可能会在一个子线程中执行某些任务并想要获取它的返回值。下面是两种从子线程中获得返回值的方法。 方法一:使用 Queue 模块 Queue 模块提供了线程安全的队列,它可以在主线程和子线程之间传递消息。我们可以在子线程中执行某…

    python 2023年5月19日
    00
  • python 中defaultdict()对字典进行初始化的用法介绍

    当我们使用 Python 内置的字典(dict)时,如果要给其中的某个键对应的值进行初始化操作,通常需要先判断该键是否已经存在,若不存在则需要向字典中添加该键,并给其对应的值初始化为指定的值。这样的操作会比较繁琐,不仅增加了代码量,而且可能会影响代码的可读性和可维护性。在这种情况下,可以使用 Python 标准库中 collections 模块提供的 def…

    python 2023年5月13日
    00
  • 详解Python 使用 selenium 进行自动化测试或者协助日常工作

    详解Python使用Selenium进行自动化测试或者协助日常工作 什么是Selenium Selenium 是一个用于浏览器自动化的工具。它支持多种浏览器,包括但不限于 Chrome、Firefox 和 Safari。它可以用于自动化测试,网站自动化,以及协助日常工作任务等。 如何安装和配置 Selenium 在使用 Selenium 之前,需要安装 Se…

    python 2023年5月19日
    00
  • 浅谈Python如何获取excel数据

    下面我就为您讲解如何使用Python获取Excel数据。 第一步:安装相关库 在使用Python获取Excel数据之前,我们需要安装相关的库。常用的库有: openpyxl:用于读写Excel文件; pandas:用于数据处理。 在安装之前,我们需要先打开cmd或者Anaconda Prompt,然后运行以下代码安装这两个库: pip install ope…

    python 2023年5月13日
    00
  • Python 字符串与二进制串的相互转换示例

    关于“Python 字符串与二进制串的相互转换示例”,以下是完整的攻略,包含具体的示例说明。 标题:Python 字符串与二进制串的相互转换示例 什么是字符串与二进制串? 在 Python 中,字符串(string)是一种表示文本数据的类型,由一系列 Unicode 编码组成。而二进制串(binary)是一种表示二进制数据的类型,由一系列 0 和 1 的位组…

    python 2023年6月5日
    00
  • Python标准库之zipfile和tarfile模块的使用

    Python标准库之zipfile和tarfile模块的使用攻略 简介 压缩文件在网页和文件传输中是很常见的,很多时候我们需要用到Python对压缩文件的操作。Python标准库中提供了两个模块zipfile和tarfile,可以用来读取、写入、解压缩、压缩zip、tar和其他常见的压缩格式文件。 本篇攻略将介绍zipfile和tarfile模块的使用方法,…

    python 2023年6月3日
    00
  • Python中序列的修改、散列与切片详解

    Python中序列的修改、散列与切片详解 在Python中,序列是一类数据结构,它以线性方式存储数据。序列可以是字符串、列表、元组等类型,而对序列进行修改、散列、切片是常见的操作,下面我们来详细讲解一下。 序列的修改 Python中的字符串、列表、元组都可以被修改,但是修改时需要注意其对应的类型和是否可变。 字符串的修改 在Python中,字符串是不可变的,…

    python 2023年6月3日
    00
  • 解决安装python3.7.4报错Can’t connect to HTTPS URL because the S…

    解决安装Python3.7.4报错Can’t connect to HTTPS URL because the SSL module is not available攻略 在安装Python3.7.4时,可能会遇到“Can’t connect to HTTPS URL because SSL module is not available”错误。这个错误通常…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部