Python语法基础——关于全局变量与局部变量
1、函数内部的变量名如果第一次出现,且出现在=前面,即被视为定义一个局部变量,不管全局域中有没有用到该变量名,函数中使用的将是局部变量,例如:
- num = 100
- def func():
- num = 123
- print(num)
- func()
输出:
123
说明函数中定义的num是一个局部变量,会将全局变量覆盖。再例如:
- num = 100
- def func():
- num += 100
- print(num)
- 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、函数内部的变量名如果第一次出现,且出现在=后面,且该变量在全局域中已定义,则这里将引用全局变量,如果该变量在全局域中没有定义,当然会出现“变量未定义”的错误。例如:
- num = 100
- def func():
- x = num + 100
- print(x)
- func()
输出:
200
表示这里使用的num是全局变量num。
或者其他使用该变量(例如调用成员函数)的情况,也将引用全局变量,例如:
- a = [1, 2]
- def func():
- a.append(3)
- print(a)
- func()
输出:
[1, 2, 3]
总结:只要是*使用*变量,而该变量在全局域中有定义,而在局部没有定义,则会使用全局变量。
3、函数中使用某个变量时,该变量名既有全局变量也有同名的局部变量,则会使用局部变量,例如:
- num = 100
- def func():
- num = 200
- x = num + 100
- print(x)
- func()
结果:
300
总结:如果使用的变量在全局域中有定义,在局部域中也有定义,则默认会使用局部变量。
4、在函数中,如果想给全局变量赋值,则需要用关键字global生命,例如:
- num = 100
- def func():
- global num
- num = 200
- print(num)
- func()
- print(num)
输出:
200
200
说明函数中给num赋值为200是修改的全局变量,而且这里没有定义新的局部变量,所以后续如果再操作num也是操作的全局变量,例如:
- num = 100
- def func():
- global num
- num = 200
- num += 100
- print(num)
- func()
- print(num)
输出:
300
300
总结:如果要在函数中给全局变量赋值,需要用global关键字声明。
Python语法基础——关于全局变量与局部变量的更多相关文章
- (数据分析)第02章 Python语法基础,IPython和Jupyter Notebooks.md
第2章 Python语法基础,IPython和Jupyter Notebooks 当我在2011年和2012年写作本书的第一版时,可用的学习Python数据分析的资源很少.这部分上是一个鸡和蛋的问题: ...
- Python | Python语法基础
目录 前言 1. 变量与简单数据结构 2. 列表相关 3. 集合 4. If语句 5. 字典 6. 用户输入和while循环 7. 函数 8. 类与对象 9. 文件 10. 异常 11. 测试 最后 ...
- Python之路 day3 全局变量、局部变量
#!/usr/bin/env python # -*- coding:utf-8 -*- #Author:ersa """ 全局与局部变量 在子程序中定义的变量称为局部变 ...
- python语法基础笔记
本篇笔记基于博主自己的的学习,理解,总结所写.很多东西可能存在误解,不能保证百分之百的正确. 1. 数据表达1.1 常量和变量1.2 数据类型1.2.1 基本数据元素1.2.1.1 数字1.2.1.2 ...
- python 笔记2:python语法基础
python语法学习笔记: 1 输入输出 input(),print(). name = input('input your name : ')print('hello ,'+name)print(& ...
- Python笔记(七)_全局变量与局部变量
全局变量与局部变量:在函数外部或内部定义的变量 1. 函数内部的变量名首次出现,且在=号左边 不管这个变量在全局域中有没有定义该变量名,都被视为一个局部变量 例1: >>>num=1 ...
- python语法基础-异常操作-长期维护
############### python-异常的操作 ############### # 异常:python解释器遇到一个错误,会停止程序的执行,并且提示错误信息,这就是异常, # 抛出异 ...
- python线程中的全局变量与局部变量
在python多线程开发中,全局变量是多个线程共享的数据,局部变量是各自线程的,非共享的. 如下几种写法都是可以的: 第一种:将列表当成参数传递给线程 from threading import Th ...
- python语法基础-面向对象-基础-长期维护
############### 类的基本操作 ############## """ 类的基本认识: 1,类就是一个模子 2,dict,list都是类,具体的一 ...
随机推荐
- mysql_day01
1.MySQL概述 1.什么是数据库 数据库是一个存储数据的仓库 2.都有哪些公司在用数据库 金融机构.游戏网站.购物网站.论坛网站 ... ... 3.提供数据库服务的软件 1.软件分类 MySQL ...
- 最小的K个数(python)
题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. # -*- coding:utf-8 -*- class So ...
- jQuery实现动态分割div—通过拖动分隔栏实现上下、左右动态改变左右、上下两个相邻div的大小
由jQuery实现上下.左右动态改变左右.上下两个div的大小,需要自己引入jquery1.8.0.min.js包 可用于页面布局. //============================ind ...
- [leetcode]25. Reverse Nodes in k-Group每k个节点反转一下
Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. k ...
- java_19List 集合
1List集合 有序的 collection(也称为序列).此接口的用户可以对列表中每个元素的插入位置进行精确地控制.用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素. 与 s ...
- 判断是否是json
转:https://blog.csdn.net/dy_smile/article/details/46739251 function isJson(obj) { var isjson = typeof ...
- Java 数组元素合并并去重
public class TestList { public static void main(String[] args) { Set<Integer> set = new TreeSe ...
- 自动登录(过滤器filter的应用)
//反复实验的时候注意数据库数据的更新 //将数据存储到cookie里面 protected void doGet(HttpServletRequest request, HttpServletRes ...
- 搭建django
虚拟环境配置 pip install virtualenv 一般需要安装一个管理工具:pip install virtualenvwrapper-win 只有它可以使用workon 创建虚拟环境:mk ...
- P3258 [JLOI2014]松鼠的新家 (简单的点差分)
https://www.luogu.org/problemnew/show/P3258 注意开始和最后结尾 #include <bits/stdc++.h> #define read re ...