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都是类,具体的一 ...
随机推荐
- FTRL的理解
https://blog.csdn.net/ningyanggege/article/details/81133785
- FM-分解机模型详解
https://blog.csdn.net/zynash2/article/details/80029969 FM论文地址:https://www.csie.ntu.edu.tw/~b97053/pa ...
- MFC笔记7
1.VS中显示行号 工具 -> 选项 -> 文本编辑器 -> C/C++ -> 行号 2.VS中调整字体大小 工具 -> 选项 -> 环境->字体和颜色 3. ...
- 安装64位office时,弹出提示,要求卸载32位office
运行 regedit,进入到HKEY_CLASSES_ROOT\Installer\Products下,删除0000510开头的项或00002开头项.然后重启计算机. 参考: https://blo ...
- Codeforces Round #554 (Div. 2)-C(gcd应用)
题目链接:https://codeforces.com/contest/1152/problem/C 题意:给定a,b(<1e9).求使得lcm(a+k,b+k)最小的k,若有多个k,求最小的k ...
- ASP 错误捕捉,处理
Asp利用 On Error Resume Next捕捉异常,根据Err.Number判断是否有错误 注:On Error Goto 0取消捕捉异常 模板文件页面 <% Response.Buf ...
- CF 317 A. Lengthening Sticks(容斥+组合数学)
传送门:点我 A. Lengthening Sticks time limit per test 1 second You are given three sticks with po ...
- 249. Group Shifted Strings把迁移后相同的字符串集合起来
[抄题]: Given a string, we can "shift" each of its letter to its successive letter, for exam ...
- [leetcode]57. Insert Interval插入区间
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessa ...
- PHP请求ws出现的问题
在SOAPUI中的请求如下: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/&qu ...