python修改全局变量可以不加global吗?
作者:侯小啾?? 发布时间:2021-01-11 08:10:56
标签:python,修改,全局变量,global
以如下代码为例,我们在局部作用域内使用全局变量a,需要使用global
关键字进行声明。否则代码会不可用。
a = 100
def fun():
global a
a += 100
fun()
print(a)
但是也有一种常见的情况,
可以修改的数据类型在函数内部做修改操作是不需要声明global的:
list1 = [100, 200]
def fun():
list1.append(300)
fun()
print(list1)
但是如果把添加元素的命令换成列表拼接的方式:
list1 += list1 + [300]
则代码依然不可用,需要添加关键字global
声明list1才可用。
进一步展开说:
list1 = [100, 200]
print(list1, id(list1))
list1 = list1 + [300]
print(list1, id(list1))
list1 += [400]
print(list1, id(list1))
list1.append(500)
print(list1, id(list1))
对于list1 = list1 + [300]
如图,list1 = list1 + [300]
改变了list1的id,这意味着,得到的新的list1已经不是原来的list1变的,而是重新生成的,也可以理解成是重新赋值的list1,只是过程中利用了list1。该代码在局部作用域没有global不可用,因为在生成新的变量之前, list1 + [300] 中的list1是取不到的。
list1 += [400],list1.append(500)
都不改变id,改变的是原变量list1。
但是list1 += [400]
无global不可用,原因同上述情况一样;list1.append(500)
则无global也可用,符合 可用修改的数据类型在函数内部的修改操作不需声明global。
来源:https://skylarkprogramming.blog.csdn.net/article/details/122771338


猜你喜欢
- 在asp中利用excel的一个方法是将excel文件作为一个数据库进行链接,然后的操作和对access数据库操作类似.但是这个方法不是总能有
- 缘起最近实验课上需要重构以前写过的一个项目(垃圾堆),需要添加发生邮件提醒的功能,记得以前写过一个PHP版的实现,所以想把PHP写的功能整理
- 本文实例为大家分享了python实现简易五子棋游戏的具体代码,供大家参考,具体内容如下运行效果: 完整代码+注释: fi
- 使用Django中遇到这样一个需求,对一个表的几个字段做 联合唯一索引,例如学生表中 姓名和班级 2个字段在一起表示一个唯一记录。Djang
- ERRNO: 256 TEXT: SQLSTATE[HY000]: General error: 1436 Thread stac
- 前言本文使用 cpu 版本的 tensorflow 2.4 ,在 shakespeare 数据的基础上使用 Skip-Gram 算法训练词嵌
- 常规的异常捕获方式在 Promise 提供了一个 .catch 方法用来捕获异常,假设有很多异步请求,通常会把 .catch 方法放在链式调
- 最近在重构公司以前产品的前端代码,摈弃了以前的session-cookie鉴权方式,采用token鉴权,忙里偷闲觉得有必要对几种常见的鉴权方
- 事务在数据库中有时候需要把多个步骤的指令当作一个整体来运行,这个整体要么全部成功,要么全部失败,这就需要用到事务。1、 事务的特点事务有若干
- 摘要1,EXEC的使用2,sp_executesql的使用MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_exec
- 本文实例讲述了GO语言延迟函数defer用法。分享给大家供大家参考。具体分析如下:defer 在声明时不会立即执行,而是在函数 return
- 最近我在Go Forum 中发现了String size of 20 character 的问题,“hollowaykeanho” 给出了相
- 我经常需要用Python与solr进行异步请求工作。这里有段代码阻塞在Solr http请求上, 直到第一个完成才会执行第二个请
- 如下例data2[‘营业成本率'] = data2[‘营业成本本年累计']/data2[‘营业收入本年累计']*10
- 作为一个合格的开发者,在本地环境下完成开发还远远不够,我们需要把Web App部署到远程服务器上,这样,广大用户才能访问到网站。很多做开发的
- 对于那些需要在登录环境下进行的爬虫操作,模拟登陆或伪装已登录状态是一个刚需。分析了网上关于模拟登录的例子,很多都基于用户名/密码发起一个po
- echarts legend点击事件首先,明确本篇文章的重点,主要有三个:1. 给legend添加点击事件2. 禁用legend点击事件的默
- OAuth2 的概念OAuth是一个关于授权的开放网络标准,OAuth2是其2.0版本。它规定了四种操作流程(授权模式)来确保安全应用场景有
- 第一个:神奇的字典键some_dict = {}some_dict[5.5] = "Ruby"some_dict[5.0
- 本文实例讲述了python二分法查找算法实现方法。分享给大家供大家参考,具体如下:二分法查找二分查找又称折半查找,优点是比较次数少,查找速度