1、函数内部的变量名如果第一次出现,且出现在=前面,即被视为定义一个局部变量,不管全局域中有没有用到该变量名,函数中使用的将是局部变量,例如:

  1. num = 100
  2. def func():
  3. num = 123
  4. print(num)
  5. func()

输出:

123

说明函数中定义的num是一个局部变量,会将全局变量覆盖。再例如:

  1. num = 100
  2. def func():
  3. num += 100
  4. print(num)
  5. func()

输出:

UnboundLocalError: local variable 'num' referenced before assignment

错误提示局部变量num在赋值前被应用,也就是该变量没有定义就使用它,由此再次证明了这里定义了一个局部变量,而不是使用的全局的num。

总结:函数内部的变量名如果第一次出现,且出现在=前面,即被视为定义一个局部变量。

Python makes educated guesses on whether variables are local or global. It assumes that any variable assigned a value in a function is local.

From: http://www.tutorialspoint.com/python/python_modules.htm

2、函数内部的变量名如果第一次出现,且出现在=后面,且该变量在全局域中已定义,则这里将引用全局变量,如果该变量在全局域中没有定义,当然会出现“变量未定义”的错误。例如:

  1. num = 100
  2. def func():
  3. x = num + 100
  4. print(x)
  5. func()

输出:

200

表示这里使用的num是全局变量num。

或者其他使用该变量(例如调用成员函数)的情况,也将引用全局变量,例如:

  1. a = [1, 2]
  2. def func():
  3. a.append(3)
  4. print(a)
  5. func()

输出:

[1, 2, 3]

总结:只要是*使用*变量,而该变量在全局域中有定义,而在局部没有定义,则会使用全局变量。

3、函数中使用某个变量时,该变量名既有全局变量也有同名的局部变量,则会使用局部变量,例如:

  1. num = 100
  2. def func():
  3. num = 200
  4. x = num + 100
  5. print(x)
  6. func()

结果:

300

总结:如果使用的变量在全局域中有定义,在局部域中也有定义,则默认会使用局部变量。

4、在函数中,如果想给全局变量赋值,则需要用关键字global生命,例如:

  1. num = 100
  2. def func():
  3. global num
  4. num = 200
  5. print(num)
  6. func()
  7. print(num)

输出:

200

200

说明函数中给num赋值为200是修改的全局变量,而且这里没有定义新的局部变量,所以后续如果再操作num也是操作的全局变量,例如:

  1. num = 100
  2. def func():
  3. global num
  4. num = 200
  5. num += 100
  6. print(num)
  7. func()
  8. print(num)

输出:

300

300
总结:如果要在函数中给全局变量赋值,需要用global关键字声明。

Python语法基础——关于全局变量与局部变量的更多相关文章

  1. (数据分析)第02章 Python语法基础,IPython和Jupyter Notebooks.md

    第2章 Python语法基础,IPython和Jupyter Notebooks 当我在2011年和2012年写作本书的第一版时,可用的学习Python数据分析的资源很少.这部分上是一个鸡和蛋的问题: ...

  2. Python | Python语法基础

    目录 前言 1. 变量与简单数据结构 2. 列表相关 3. 集合 4. If语句 5. 字典 6. 用户输入和while循环 7. 函数 8. 类与对象 9. 文件 10. 异常 11. 测试 最后 ...

  3. Python之路 day3 全局变量、局部变量

    #!/usr/bin/env python # -*- coding:utf-8 -*- #Author:ersa """ 全局与局部变量 在子程序中定义的变量称为局部变 ...

  4. python语法基础笔记

    本篇笔记基于博主自己的的学习,理解,总结所写.很多东西可能存在误解,不能保证百分之百的正确. 1. 数据表达1.1 常量和变量1.2 数据类型1.2.1 基本数据元素1.2.1.1 数字1.2.1.2 ...

  5. python 笔记2:python语法基础

    python语法学习笔记: 1 输入输出 input(),print(). name = input('input your name : ')print('hello ,'+name)print(& ...

  6. Python笔记(七)_全局变量与局部变量

    全局变量与局部变量:在函数外部或内部定义的变量 1. 函数内部的变量名首次出现,且在=号左边 不管这个变量在全局域中有没有定义该变量名,都被视为一个局部变量 例1: >>>num=1 ...

  7. python语法基础-异常操作-长期维护

    ###############    python-异常的操作  ############### # 异常:python解释器遇到一个错误,会停止程序的执行,并且提示错误信息,这就是异常, # 抛出异 ...

  8. python线程中的全局变量与局部变量

    在python多线程开发中,全局变量是多个线程共享的数据,局部变量是各自线程的,非共享的. 如下几种写法都是可以的: 第一种:将列表当成参数传递给线程 from threading import Th ...

  9. python语法基础-面向对象-基础-长期维护

    ###############    类的基本操作    ############## """ 类的基本认识: 1,类就是一个模子 2,dict,list都是类,具体的一 ...

随机推荐

  1. Hibernate 再接触 性能优化

    Sessionclear 否则session缓存里越来越多 Java有内存泄露吗? 在语法中没有(垃圾自动回收) 但是在实际中会有 比如读文件没有关什么的 1+N问题 解决方法:把fetch设置为la ...

  2. 关于Shader的学习记录

    float4 _EmissiveColor; float4 _AmbientColor; float _MySliderValue; void surf (Input IN, inout Surfac ...

  3. PXC 搭建高可用集群

    (1).PXC集群注意事项 1.PXC集群只支持innodb引擎 2.

  4. python入门(七):字符串

    1.字符串类型: >>> s="早上好"               #str类型的字符串 >>> type(s) <class 'str ...

  5. 图论最短路径算法总结(Bellman-Ford + SPFA + DAGSP + Dijkstra + Floyd-Warshall)

    这里感谢百度文库,百度百科,维基百科,还有算法导论的作者以及他的小伙伴们...... 最短路是现实生活中很常见的一个问题,之前练习了很多BFS的题目,BFS可以暴力解决很多最短路的问题,但是他有一定的 ...

  6. 106. Construct Binary Tree from Inorder and Postorder Traversal根据后中序数组恢复出原来的树

    [抄题]: Given inorder and postorder traversal of a tree, construct the binary tree. Note:You may assum ...

  7. 在WIN10上安装ESXI-Comstomer (转自技术社区)

    I recently required the use of ESXi Customizer to integrate some NIC drivers into my ESXi 5.5 ISO. H ...

  8. Python开发——数据类型【集合】

    集合的定义 由一个或多个确定的元素所构成的整体 可变集合 s=set('hello') print(s) # {'e', 'l', 'o', 'h'} s=set(['alex','alex','Lu ...

  9. 找不到phpize

    yum install php-devel 报错如下: 解决办法: yum install php71w-devel

  10. tomcat源码分析-初始化过程

    digester 说明: https://www.cnblogs.com/devilwind/p/8192304.html