发现一个问题。

python中list变量作为全局变量时,在函数中可以直接修改。

而普通变量则需要先在函数中global声明,否则会报错。

例如:

a = 1

def fun():

  global a

  a = 2

而list:

b = [1,2]

def fun():

  b[0] = 2

在函数中直接修改list则是可以的。

原因是:

普通变量如果在函数中赋值

a = 2

会有歧义。因为它既可以是表示引用全局变量a,也可以是创建一个新的局部变量,所以在python中,默认它的行为是创建局部变量,除非显式声明global。

而对列表list变量进行赋值

b[0] = 2

则不会有歧义。它是“明确的”,因为如果把b当作是局部变量的话,它会报KeyError,所以它只能是引用全局的b,故不需要多此一举显式声明global。

参考自:

实例讲解Python中global语句下全局变量的值的修改

Freecode# : www.cnblogs.com/yym2013

python中list作为全局变量无需global声明的原因相关推荐

  1. Python 中多线程共享全局变量的问题

    Python 中多个线程之间是可以共享全局变量的数据的. 但是,多线程共享全局变量是会出问题的. 假设两个线程 t1 和 t2 都要对全局变量 g_num (默认是0)进行加1运算,t1 和 t2 都 ...

  2. 在python中、关于全局变量和局部变量、以下_关于全局变量和局部变量-Python

    练习: No.1 num = 100 def func(): num = 123 print(num) func() 先 想 一 下 : 输出: 123 解析: 函数内部的变量名,如果第一次出现,且出 ...

  3. python中局部变量和全局变量

    局部变量,就是在函数内部定义的变量 不同的函数,可以定义相同的名字的局部变量,但是各用个的不会产生影响 局部变量的作用,为了临时保存数据需要在函数 在函数外边定义的变量叫做全局变量 全局变量能够在所有 ...

  4. 在python中可以用什么关键字来声明一个类_3. Python基础语法

    注释 我们在文言文中经常会看到注释,注释可以帮助读者对文章的理解.代码中的注释也是一样,优秀的代码注释可以帮助读者对代码的理解.当然在代码编写过程中,注释的使用不一定只是描述一段代码,也可能的是对代码 ...

  5. python中使用“[函数名].[变量名]”声明变量

    在<机器学习实战>中,作者使用了一种[函数名].[变量名]的格式声明并引用变量. 示例如下: def createPlot(inTree):fig = plt.figure(1, face ...

  6. 在python中、关于全局变量和局部变量_在Python中,关于全局变量和局部变量,以下选项中描述不正确的是...

    [单选题]Python文本处理方向的第三方库是 [单选题]哪个选项的描述是正确的? [单选题]以下选项中属于Python语言中合法的二进制整数是 [单选题]以下说法错误的是: [单选题]下面属于B2B ...

  7. 在python中可以用什么关键字来声明一个类_python里的raise是什么意思

    我们在开发当中经常会遇到一些未知或已知的错误,比如用requests发送请求时可能会出现异常,或者某个程序计算时出现分母为0的情况.面对各种奇形怪状的错误,高级语言都会有一个抛出错误的机制.在Pyth ...

  8. [转载] 在python中、关于全局变量和局部变量、以下_python中的全局变量和局部变量

    参考链接: Python全局,局部和非局部变量 1. 使用局部变量 deffunc(x): print'x is', x x =2 print'Changed local x to', x x =50 ...

  9. 在python中、关于全局变量和局部变量、以下_python中的全局变量和局部变量

    1. 使用局部变量 deffunc(x): print'x is', x x =2 print'Changed local x to', x x =50 func(x) print'x is stil ...

最新文章

  1. exchange online share mailbox senditem
  2. 微服务探索与实践—总述
  3. 迈克尔·戴尔再次到访2019戴尔科技峰会,为“戴尔中国4.0+战略”加个码……
  4. 金笛邮件中使用wap邮箱
  5. Nginx笔记-使用Nginx给vue应用设置一个代理
  6. 微软提出第一个端到端的Video Captioning方法:SWIN BERT,涨点显著!
  7. 华为旗下哈勃投资公司入股光刻机制造商科益虹源
  8. c#中类的简单使用学习
  9. sysoper在oracle是什么意思,oracle用户 sysdba 与system,sysoper的区别
  10. Commons IO 2.5-IOUtils
  11. HBuilde H5开发,关于JSON的Storage存储
  12. 通俗易懂web3.0
  13. 硬盘容量的计算方法,这就是为什么实际容量总比官方标示少的原因
  14. php 打印出心形,利用php输出不同的心形图案_PHP
  15. 【python基础】猜数字游戏
  16. java消息队列-kafka
  17. Django企业开发实战--by胡阳,学习记录1127
  18. 【websocket前后端交互】vue-springboot实现websocket前后端交互链接,websocket心跳重连,包含前后端代码,复制即可用【详细解释版本】
  19. linux替换变量字符串,linux shell 替换字符串的几种方法,变量替换${},sed,awk
  20. bibtex类型以及格式要求

热门文章

  1. LEMP+memcached
  2. 用Jenkins自动化构建Android和iOS应用
  3. Matlab绘图高级部分
  4. ns-3 NetAnim遇到了一个问题
  5. 白鸦三次创业反思:公司遇问题 怎么走都对(转)
  6. CodeBlocks集成Objective-C开发 Windows下学习Objective-C
  7. Java集合工具类(三)-泛型集合工具类,用于便捷快速的定义、操作集合。包含Set的交集、并集......
  8. 国有大型企业数据级同城异地灾难备份案例
  9. wince中的hook(钩子)用法
  10. nconf创建nagios实例