Python变量的作用域教程

python进阶教程5:变量作用域、装饰器 本文介绍了Python变量作用域和装饰器的原理与应用。变量作用域分为局部、嵌套、全局和内置四种,理解作用域是学习装饰器的基础。装饰器通过接收函数作为参数并返回函数来改变原函数行为,无需修改原函数代码。文中详细讲解了如何实现计时功能的装饰器,并解决了参数传递和自省信息丢失的问题。通过@语法糖简化装饰器使用,使其具备更好的通用性和可维护性。 阅读详情

在写代码的时候,免不了要使用变量。但程序中的一个变量并不一定是在哪里都可以被使用,根据情况不同,会有不同的“有效范围”。

看这样一段代码:

def func(x):
    print ('X in the beginning of func(x): ', x)
    x = 2
    print ('X in the end of func(x): ', x)
     
x = 50func(x)print ('X after calling func(x): ', x)

输出:

X in the beginning of func(x):  50
X in the end of func(x):  2
X after calling func(x):  50

变量 x 在函数内部被重新赋值。但在调用了函数之后,x 的值仍然是50。为什么?

这就得说一下变量的“作用域”:

当函数内部定义了一个变量,无论是作为函数的形参,或是另外定义的变量,它都只在这个函数的内部起作用。函数外即使有和它名称相

同的变量,也没有什么关联。这个函数体就是这个变量的作用域。像这样在函数内部定义的变量被称为“局部变量”。

要注意的是,作用域是从变量被定义的位置开始。像这样的写法是有问题的:

def func():
    print (y)
    y = 2
    print (y)

报错:

UnboundLocalError: local variable 'y' referenced before assignment

因为在 y = 2 之前,y 并不存在,调用 y 的值就会出错。

回到开始那个例子:

在函数 func 外部,定义的变量 x,赋值为 50,作为参数传给了函数 func。而在函数 func 内部,变量 x 是形参,它的作用域是整个函数体内部。它与外面的那个 x 没有关系。只不过它的初始值是由外面那个 x 传递过来的。

所以,虽然函数体内部的 x 被重新赋值为 2,也不会影响外面那个 x 的值。

不过有时候,我们希望能够在函数内部去改变一些变量的值,并且这些变量在函数外部同样被使用到。怎么办?

一种方法是,用 return 把改变后的变量值作为函数返回值传递出来,赋值给对应的变量。比如开始的那个例子,可以在函数结尾加上

return x

然后把调用改为

x = func(x)

还有一种方法,就是使用“全局变量”。

在 Python 的函数定义中,可以给变量名前加上 global 关键字,这样其作用域就不再局限在函数块中,而是全局的作用域。

通过 global 改写开始的例子:

def func():
    global x    print ('X in the beginning of func(x): ', x)
    x = 2
    print ('X in the end of func(x): ', x)
     
x = 50func()print ('X after calling func(x): ', x)

输出:

X in the beginning of func(x):  50
X in the end of func(x):  2
X after calling func(x):  2

函数 func 不再提供参数调用。而是通过 global x 告诉程序:这个 x 是一个全局变量。于是函数中的 x 和外部的 x 就成为了同一个变

量。这一次,当 x 在函数 func 内部被重新赋值后,外部的 x 也随之改变。

前面讲的局部变量和全局变量是 Python 中函数作用域最基本的情况。实际上,还有一些略复杂的情况,比如:

def func():
    print ('X in the beginning of func(x): ', x)    # x = 2
    print ('X in the end of func(x): ', x)
#Python小白学习交流群:153708845     
x = 50func()print ('X after calling func(x): ', x)

输出:

X in the beginning of func(x):  50
X in the end of func(x):  50
X after calling func(x):  50

程序可以正常运行。虽然没有指明 global,函数内部还是使用到了外部定义的变量。然而一旦加上

x = 2

这句,程序就会报错。因为这时候,x 成为一个局部变量,它的作用域从定义处开始,到函数体末尾结束。

建议在写代码的过程中,显式地通过 global 来使用全局变量,避免在函数中直接使用外部变量

【Unity 实用工具篇】✨| 受击插件Feel 详细教程,开发游戏时更好的操控 游戏打击感 在一个游戏中,游戏手感对于游戏的整体游玩体验是非常重要的,而游戏手感中有一个很重要的点:打击感 那本篇文章就来讲一下打击感中的受击反馈部分。 在游戏中经常会用到攻击敌人,敌人扣血,执行某些受击功能的执行,尤其是对于有战斗场景的游戏来说,这就是标准的受击反馈。 所以引出本篇文章的主角:受击插件 Feel 的使用,2D和3D游戏都可以使用。 阅读详情

相关推荐

大一Python之循环解决实际问题

pythin之循环解决实际问题

weixin_66263546的博客 2289

python变量作用域教程_python变量的作用域

变量作用域:一般在函数体外定义的变量成为全局变量,在函数内部定义的变量称为局部变量。全局变量所有作用域都可读,局部变量只能在本函数可读函数在读取变量时,优先读取函数本身自有的局部变量,再去读全局变量全局变量读,均可读赋值,global字典,列表可修改全局变量全大写例如name = 'Tim' #全局变量def f1():age = 18 #局部变量print(age,name)def f2():a...

weixin_39769187的博客 53

CVAT自动标注避坑指南:从nuctl安装到YOLOv5模型部署的完整流程

本文详细介绍了在CVAT中部署YOLOv5自动标注功能的完整流程与避坑指南。重点解决了从nuctl工具安装、项目创建时因网络问题导致的镜像拉取失败,到最终模型函数部署与CVAT集成的关键步骤。针对国内网络环境,提供了实用的镜像替换方案,帮助用户顺利完成基于CPU的自动化标注环境搭建。

pytorch8learner的博客 229

学 Python 被 “变量作用域” 搞懵?用 “画框法” 3 天吃透,【附Python3基础学习教程】

摘要:本文分享了作者学习Python变量作用域时遇到的困惑及解决方法。初学全局变量和局部变量时频繁出错,特别是在嵌套函数中修改变量时。通过"画框法"可视化理解作用域:将全局、函数、嵌套函数变量分别看作不同层级的框,用global和nonlocal关键字实现跨框访问。文中结合统计运行次数和嵌套函数修改值的具体案例,总结了三个实用经验:1)用画图辅助理解作用域层级;2)通过实验验证关键字作用;3)结合系统教程中的实战项目加深理解。这种方法帮助作者有效掌握了变量作用域的使用技巧。

2501_93092597的博客 413

Python解析骑行fit文件:从数据缺失到完整记录

本文详细介绍了如何利用Python解析和处理骑行FIT文件,解决数据缺失问题。通过使用fitparse库读取二进制FIT文件,并结合Garmin FitCSVTool进行格式转换,指导读者一步步诊断数据完整性、设计心率修补方案,并最终生成完整的骑行记录文件。该方法为骑行爱好者提供了灵活的数据修复与自定义分析能力。

weixin_29062255的博客 456

win x64下安装oracle 12c出现[INS-30131]报错的解决方案

问题:  win x64下安装oracle 12c出现[INS-30131]报错的解决方案 安装oracle11g碰到“无法访问临时位置”的问题,详细信息如下: INS-30131] 执行安装程序验证所需的初始设置失败。 原因 - 无法访问临时位置。   操作 - 请确保当前用户具有访问临时位置所需的权限。   附加信息:  - 所有节点上的框架设置检查都失败  

一条道走到黑的GISer 1349

【Python基础教程】变量的作用域详解

变量作用域 Python 能够改变变量作用域的代码段是 def 、 class 、 lamda. if/elif/else、try/except/finally、for/while 并不能涉及变量作用域的更改,也就是在这些代码块中的变量,外部也是可以访问的 变量搜索路径是:局部变量->全局变量 局部变量 vs 全局变量 局部变量:在函数内部,类内部,lamda.的变量,它的作用域仅在函数、类、lamda 里面 全局变量:在当前 py 文件都生效的变量 global的作用 让局部变量变成全局变量

Python热爱者的博客 1534

Detector-Free SfM 项目复现完整指南:从环境搭建到代码解析与可视化

本文提供了Detector-Free SfM项目的完整复现指南,涵盖技术背景、环境配置、代码解析和可视化方案。重点包括: 技术背景:Detector-Free SfM通过两阶段策略(粗重建+迭代精化)解决了传统SfM在弱纹理区域的瓶颈问题,采用深度学习匹配器替代传统特征点检测。 环境配置: 详细硬件要求与推荐配置(GPU/CPU/内存) 完整的Ubuntu系统设置步骤 Conda环境创建与依赖安装流程 关键组件安装指南(PyTorch、COLMAP等) 常见错误解决方案 项目特点: 支持多种Detector

huanghm88的专栏 122

python变量作用域教程_如何理解Python变量的作用域?正确的运用方法

在写代码的时候,免不了要使用变量。但程序中的一个变量并不一定是在哪里都可以被使用,根据情况不同,会有不同的“有效范围”。看这样一段代码:deffunc(x):print('Xinthebeginningoffunc(x):',x)x=2print('Xintheendoffunc(x):',x)x=50func(x)print('Xaftercall...

weixin_39980809的博客 79

【linux】linux 出现一个网卡绑定多个ip怎么处理

我的原因是我使用了dhcp,这个会自动分配ip, 将 BOOTPROTO 参数由 dhcp 改为 static,并移除或注释掉与动态分配地址 10.0.2.15 相关的配置行(如果存在)。执行后,您可以再次使用 ip -4 a 或 ifconfig 命令确认 IP 地址已被移除。输出可以看出,您的虚拟机(k8s003)中存在一个名为 enp0s3 的网卡绑定了多个 IPv4 地址。对于某些 Linux 发行版(如 Ubuntu、Debian),您可能需要编辑网络接口的配置文件来移除多余的 IP 地址。

九师兄 298

在 SAP S/4HANA 里把 OData Client Proxy 用顺手,借助 Service Consumption Model 2.0 提前打通远程 OData 调用

摘要:本文探讨了在SAP S/4HANA集成开发中调用外部OData服务的解决方案。传统ABAP代码直接调用方式存在诸多不便,而OData Client Proxy提供了更稳定的途径。文章详细介绍了如何通过Service Consumption Model 2.0在SAP BTP生成模型类,并将其移植到SAP S/4HANA进行适配改造,最终注册为可用的OData Proxy Client。该方法适用于较新版本的SAP S/4HANA系统,通过源码替换实现模型转换,为系统集成提供了高效的类型安全调用方案。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1092

Python基础教程:变量的作用域

1、变量作用域LEGB 1.1变量的作用域 在Python程序中创建、改变、查找变量名时,都是在一个保存变量名的空间中进行,我们称之为命名空间,也被称之为作用域。python的作用域是静态的,在源代码中变量名被赋值的位置决定了该变量能被访问的范围。即Python变量的作用域由变量所在源代码中的位置决定。 1.2高级语言对数据类型的使用过程 一般的高级语言在使用变量时,都会有下面4个过程。当然在不同...

python学习者的博客 607

肖特基二极管的反向恢复过程

本博客简述肖特基二极管反向恢复过程。

记得诚 1万+

python变量作用域教程_Python变量作用域(通俗易懂)

Python 中变量的访问权限取决于其赋值的位置,这个位置被称为变量的作用域。Python 的作用域共有四种,分别是:局部作用域(Local,简写为 L)、作用于闭包函数外的函数中的作用域(Enclosing,简写为 E)、全局作用域(Global,简写为 G)和内置作用域(即内置函数所在模块的范围,Built-in,简写为 B)。变量在作用域中查找的顺序是 L→E→G→B,即当在局部找不到时会去...

weixin_36473811的博客 197

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

python基础教程:从局部变量和全局变量开始全面解析Python中变量的作用域

无论是以类为基础的面相对象编程,还是单纯函数内部变量的定义,变量的作用域始终是Python学习中一个必须理解掌握的环节,下面我们从局部变量和全局变量开始全面解析Python中变量的作用域,需要的朋友可以参考下 理解全局变量和局部变量 1.定义的函数内部的变量名如果是第一次出现, 且在=符号前,那么就可以认为是被定义为局部变量。在这种情况下,不论全局变量中是否用到该变量名,函数中使用的都是局部变量。...

python编程基础教程 926

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

python自学教程变量_自学Python教程【第六十九节】变量的作用域

欢迎大家来到自学Python中变量的作用域的相关知识,来看看吧:在写代码的时候,免不了要使用变量。但程序中的一个变量并不一定是在哪里都可以被使用,根据情况不同,会有不同的“有效范围”。看这样一段代码:def func(x):print 'X in the beginning of func(x): ', xx = 2print 'X in the end of func(x): ', xx = 5...

weixin_39548438的博客 111

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

python3的变量作用域规则和nonlocal关键字,Python程序基础教程

18 POP_TOP其中是读取和存储local作用域的变量,我们可以看到,i变成了局部作用域的变量!而对i的赋值早于i的定义,所以报错了。产生这种现象的原因也很简单,python对函数的代码是独立编译的,如果未加说明而在函数内对一个变量赋值,那么就认为你定义了一个局部变量,从而把外部的同名对象屏蔽了。这么做无可厚非,毕竟python没有独立的声明一个局部变量的语法,但结果就会造成我们看到的类似暂时性死区的现象。所以请允许我把es6的概念套用在python身上。

m0_60667406的博客 954

【python教程入门学习】Python变量作用域(通俗易懂)

Python 中变量的访问权限取决于其赋值的位置,这个位置被称为变量的作用域。Python 的作用域共有四种,分别是:局部作用域(Local,简写为 L)、作用于闭包函数外的函数中的作用域(Enclosing,简写为 E)、全局作用域(Global,简写为 G)和内置作用域(即内置函数所在模块的范围,Built-in,简写为 B)。 变量在作用域中查找的顺序是 L→E→G→B,即当在局部找不到时会去局部外的局部找(例如闭包),再找不到会在全局范围内找,最后去内置函数所在模块的范围中找。 分别在 L、E、G

1446

【python教程入门学习】Python变量作用域(通俗易懂)_访问取决于变量名前缀python

Python 中变量的访问权限取决于其赋值的位置,这个位置被称为变量的作用域。Python 的作用域共有四种,分别是:局部作用域(Local,简写为 L)、作用于闭包函数外的函数中的作用域(Enclosing,简写为 E)、全局作用域(Global,简写为 G)和内置作用域(即内置函数所在模块的范围,Built-in,简写为 B)。变量在作用域中查找的顺序是 L→E→G→B,即当在局部找不到时会去局部外的局部找(例如闭包),再找不到会在全局范围内找,最后去内置函数所在模块的范围中找。

2401_84573481的博客 799

python教程:变量的作用域(全局变量和局部变量)

变量起作用的范围称为变量的作用域,不同作用域内同名变量之间互不影响。变量分为:全局变量、局部变量。

学亮编程手记 767

Python基础教程:变量的作用域_def func() variable = 300 print(_______) i(1)

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~给大家准备的学习资料包括但不限于:Python 环境、pycharm编辑器/永久激活/翻译插件python 零基础视频教程Python 界面开发实战教程Python 爬虫实战教程Python 数据分析实战教程python 游戏开发实战教程Python 电子书100本。

m0_61549984的博客 974

【Python 基础教程 25】全面入门指南:深度解析Python3的命名空间,作用域及变量使用教程

在Python中,每个对象都有存储其定义的**命名空间**(Namespace)。命名空间(Namespace)可以被看作是一个字典,它定义了在程序的某个特定范围内变量名称到实际对象之间的映射。这个概念非常重要,因为它决定了在程序中如何访问、修改或操作数据。

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 1054

python3教程:变量作用域规则和nonlocal关键字的用法

也许你已经觉得自己可以熟练使用python并能胜任许多开发任务,所以这篇文章是在浪费你的时间。

Python热爱者的博客 403

Python 极简教程(十九)函数(3)变量作用域

谈函数不得不谈有一下变量的作用域。因为所谓的变量作用域是对于函数而言的。如果你整个文件的代码没有任何函数,那么都是同一个作用域,但是如果有函数,那么就有了作用域的概念了。 在 Python 中主要的变量作用域有两种: 全局作用域,定义在函数外部的变量,其作用范围对于整个文件来说是全局的; 局部作用域,定义在函数内部的变量,其作用范围只对该函数有效,在函数以外不能使用该变量。 全局变量和局部变量...

小满测试 192

python变量作用域教程_Python3 开发入门 —— 第十一讲_3(函数详解-变量作用域)...

变量作用域Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python的作用域一共有4中,分别是:L (Local) 局部作用域E (Enclosing) 闭包函数外的函数中G (Global) 全局作用域B (Built-in) 内建作用域以 L –> E –> G –>...

weixin_32019373的博客 173

Python基础教程:变量的作用域_def func() variable = 300 print(_______) i(2)

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。print variable #variable是test_scopt()的局部变量,但是在打印时并没有绑定内存对象。我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

m0_61549984的博客 306
上一篇: python:给List添加元素
下一篇: python中的多态是如何运用的?
Python热爱者
博客等级 码龄7年 3059粉丝 1330原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值