首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

第5.4节 Python函数中的变量及作用域

  • 23-09-22 18:42
  • 3392
  • 6250
blog.csdn.net

一、函数中的变量使用规则

  1. 函数执行时,使用的全局空间是调用方的全局空间,参数及函数使用的局部变量存储在函数单独的局部名字空间内;
  2. 函数的形参在函数中修改了值时,并不影响调用方本身的数据,但如果形参是一个可变类型的容器,在函数中修改了容器中的元素,则该修改会影响到调用方的数据;
  3. 函数中的变量,既可以使用局部变量(本地名字空间的变量),也可以使用全局变量(全局名字空间的变量),函数在执行查找变量只读时,先在局部变量中查找,找不到再查到全局变量中查找。因此当局部变量和全局变量中有相同名字的变量时,函数使用的就是局部变量,只有当局部变量没有对应变量才会使用全局变量。一般情况下,函数只应该操作局部变量,不操作全局变量,只有特殊情况下才访问全局变量;
  4. 在函数内部给变量赋值且该赋值表达式中包含该变量(如x=x+1)时,该变量默认为局部变量,除非你明确地告诉Python它是全局变量或非局部变量,如果函数中没有定义要使用的变量为局部变量,又没有进行全局变量或非局部变量的声明,则Python会认为函数没有对应变量的定义和赋值,所以报错。

二、函数中对全局变量赋值的方法

1、使用global声明变量为全局变量,就是在使用前,使用语法:

global 全局变量名

然后象使用局部变量一样该变量。

2、对全局空间的字典键-值访问方式直接操作全局变量,使用前先通过globals()函数获取全局名字空间,再通过字典的键-值方式访问。举例:

  1. #函数定义
  2. def f(x):
  3. g,l=globals(),locals() #取函数的全局空间和局部空间
  4. g['x']=x*100 #修改全局空间变量x的值为局部变量x的值*100
  5. return g,l
  6. #调用方代码
  7. x=1 #调用方x赋值
  8. g1,l1=f(x) #返回函数的全局空间g1和局部空间l1,执行后x变成了100
  9. g,l=globals(),locals() #取调用方的全局空间g和局部空间l
  10. 实际上g、g1、l是同一个对象,用is判断返回为True,但l1则不同。

3、将该全局变量存放到一个类似如列表的容器中,然后将该容器作为形参传递给函数,在函数中对容器的元素直接赋值。

三、nonlocal变量

      函数中的变量除局部变量和全局变量外,还有一种变量为非本地变量,使用nonlocal来进行声明,但nonlocal关键字只能用于嵌套函数中,并且外层函数中定义了相应的局部变量,否则会发生错误。在此只是简单引出,使用也比较简单,不进行详细介绍。

 

    老猿Python(http://iyenn.com/index/link?url=https://blog.csdn.net/LaoYuanPython)系列文章用于逐步介绍老猿学习Python后总结的学习经验,这些经验有助于没有接触过Python的程序员可以很容易地进入Python的世界。

文章知识点与官方知识档案匹配,可进一步学习相关知识
Python入门技能树基础语法函数333596 人正在系统学习中
老猿Python
微信公众号
专注Python相关语言、图像音视频处理、AI
注:本文转载自blog.csdn.net的LaoYuanPython的文章"https://blog.csdn.net/LaoYuanPython/article/details/90670229"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top