Python学习笔记函数之局部和全局作用域

随笔记录方便自己和同路人查阅。

#------------------------------------------------我是可耻的分割线-------------------------------------------

  在被调用函数内赋值的変元和变量,处于该函数的“局部作用域”。在所有函数之外赋值的变量,属于“全局作用域”。

处于局部作用域的变量,被称为“局部变量”。处于全局作用域的变量,被称为“全局变量”。一个变量必是其中一种,不能

即是局部又是全局。

  可以将“作用域”看成是变量的容器,当作用域被销毁时,所有保存在该作用域内的变量的值就被丢弃了。只有一个

全局作用域,它是程序开始时创建的。如果程序终止,全局作用域就被销毁,他的所有变量就被丢弃了。否则,下次你

运行程序的时候,这些变量就会记住他们上次运行时的值。

  一个函数被调用时,该函数返回时,这个局部作用域就被销毁了,这些变量就丢失了。下次调用这个函数,局部变量

不会记得该函数上次被调用时它们保存的值。

  作用域很重要,理由如下:

  (1)全局作用域中的代码不能使用任何局部变量

  (2)但是,局部作用域可以访问全局变量

  (3)一个函数的局部作用域中的代码,不能使用其他局部作用域中的变量

  (4)如果在不同作用域中,你可以使用相同的名字命名不同变量。也就是说可以有一个名为spam的局部变量,和一个

名为spam的全局变量

  Python有不同的作用域,而不是让所用东西都成为全局变量,这是有理由的。这样一来,当特定函数调用中的代码修改

变量时,该函数与程序其他部分的交互,只能通过他的参数和返回值。这就缩小了可能导致缺陷的代码作用域。如果程序只

包含全局变量,又有一个变量赋值错误的缺陷,那就很难追踪这个赋值错误发生的位置。它可能在程序的任何地方赋值,而

你的程序可能有几百到几千行!但如果缺陷是因为局部变量做粗赋值,你就会知道,只有那一个函数中的代码可能产生赋值

错误。

  虽然在小程序中使用全局变量没有太大问题,但当程序变得越来越大时,依赖全局变量就是一个坏习惯。

#------------------------------------------------我是可耻的分割线-------------------------------------------

  1、局部变量不能在全局作用域内使用,示例代码:

1
2
3
4
5
6
7
#
# -*- coding:utf-8 -*-
# Autor: Li Rong Yang
#import random
def hell():#定义一个函数
    local = 1+1#定义一个局部变量<br>hello()
print(local)#在全局作用域打印局部变量

  运行结果:

  发生错误是因为,local只属于hello函数创建的局部作用域。在程序执行从hello()函数返回后,该局部作用域就被销毁了,

不在有名为local的变量。所以当程序试图执行print(local)时,Python就报错,说local没有定义。这是有意义的,当程序执行

在全局作用域中时,不存在局部作用域,所以不会有任何局部变量。这就是为什么只有全局变量能用于局部作用域。

  2、局部作用域不能使用其他局部作用域内的变量,示例代码:

  运行结果:

  3、全局变量可以在局部作用域中读取,示例代码:

  运行结果:

  4、名称相同的局部变量和全局变量

  局部变量是可以和全局变量同名的,在语法上完全合法。但我们在写代码时应尽量避免局部变量和全局变量同名。

  示例代码:

  运行结果:

  从运行结果可以看出,两个函数中的局部变量eggs和全局变量eggs都被打印了。

 

 

   

 

posted @   李荣洋  阅读(362)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示