python函数对变量的作用及遵循的原则
1.全局变量和局部变量
全局变量:指在函数之外定义的变量,一般没有缩进,在程序执行的全过程有效
局部变量:指在函数内部使用的变量,仅在函数内部有效,当函数退出时变量将不存在
例如:
n=1 #n是全局变量
def func(a,b):
c=a*b #c是局部变量,a和b作为函数参数也是局部变量
return c
s=func("knock~",2)
print(c)
Traceback (most recent call last):
File "F:\pyrhon\函数对变量的作用.py", line 6, in <module>
print(c)
NameError: name 'c' is not defined
这个例子说明,当函数执行完退出后,其内部变量将被释放。
如果函数内部使用了全局变量呢?例如:
n=1 #n是全局变量
def func(a,b):
n=b #这个n是在函数内存中新生成的局部变量,不是全局变量
return a*b
s=func("knock~",2)
print(s,n) #测试一下n值是否发生改变 knock~knock~ 1
函数func()内部使用了变量n,并且将变量参数b赋值给变量n,为何n值没有改变?
因为函数func()有自己的内存空间,它将n=b语句理解为生成一个局部变量n,并将参数b赋值给它,此时func()函数没有将n当作全局变量。所以,函数退出后,局部变量n被释放,全局变量n的值没有改变。
如果希望让func()函数将n当作全局变量,需要在变量n使用前显式说明该变量未全局变量,修改后:
n=1 #n是全局变量
def func(a,b):
global n
n=b #将局部变量b赋值给全局变量n
return a*b
s=func("knock~",2)
print(s,n) #测试一下n值是否发生改变 knock~knock~ 2
2.python函数对变量的作用遵守原则:
(1)简单数据类型变量无论是否与全局变量重名,仅在函数内部创建和使用,函数退出后变量被释放,如有全局同名变量,其值不变。
(2)简单数据类型变量在用global保留字声明后,作为全局变量使用,函数退出后该变量保留且值被函数改变。
(3)对于组合数据类型的全局变量,如果在函数内部没有被真实创建的同名变量,则函数内部可以直接使用并修改全局变量的值。
(4)如果函数内部真实创建了组合数据类型变量,无论是否有同名全局变量,函数仅对局部变量进行操作,函数退出后局部变量被释放,全局变量值不变。
思考:如果全局变量不是整数n,而是列表类型ls,会怎么样呢?
本篇主要讲述函数对程序中变量的作用问题,涉及组合数据类型,后期会持续更新讲解。
python函数对变量的作用及遵循的原则的更多相关文章
- python 函数及变量作用域及装饰器decorator @详解
一.函数及变量的作用 在python程序中,函数都会创建一个新的作用域,又称为命名空间,当函数遇到变量时,Python就会到该函数的命名空间来寻找变量,因为Python一切都是对象,而在命名空间中 ...
- Python入门笔记(22):Python函数(5):变量作用域与闭包
一.全局变量与局部变量 一个模块中,最高级别的变量有全局作用域. 全局变量一个特征就是:除非被删除,否则他们存活到脚本运行结束,且对于所有的函数都可访问. 当搜索一个标识符(也称变量.名字等),Pyt ...
- Python学习(21):Python函数(5):变量作用域与闭包
转自 http://www.cnblogs.com/BeginMan/p/3179040.html 一.全局变量与局部变量 一个模块中,最高级别的变量有全局作用域. 全局变量一个特征就是:除非被删除, ...
- Python 函数内变量的作用域
Python程序中创建.改变.查找变量名时,都是在一个保存变量名的空间中进行,我们称之为命名空间,也被称之为作用域. 全局作用域(global):即在模块层次中定义的变量,每一个模块都是一个全局作用域 ...
- Python函数,参数,变量
func1.py def sayHello(): print ('hello world') sayHello() func_parm.py def printMax(a,b): if a>b: ...
- python 函数之day3
一 函数的语法及特性 什么是函数? 定义:函数是一个功能通过一组语句的集合,由名字(函数名)将其封装起来的代码块,要想执行这个函数,只要调用其函数名即可. 特性: 减少重复代码 使程序变的可扩展 使程 ...
- Python中的变量引用对象需注意的几点
Python中的变量引用对象需注意的几点 分类:Python (55) (0) 普通引用: Python中,变量的作用仅仅是一个标识,只有赋值后才被创建,它可以引用任何类型的对象,而且在引用之前必须 ...
- python函数学习之装饰器
装饰器 装饰器的本质是一个python函数,它的作用是在不对原函数做任何修改的同时,给函数添加一定的功能.装饰器的返回值也是一个函数对象. 分类: 1.不带参数的装饰器函数: def wrapper( ...
- python函数修饰符@的使用
python函数修饰符@的作用是为现有函数增加额外的功能,常用于插入日志.性能测试.事务处理等等. 创建函数修饰符的规则:(1)修饰符是一个函数(2)修饰符取被修饰函数为参数(3)修饰符返回一个新函数 ...
随机推荐
- ORACLE百分比分析函数RATIO_TO_REPORT() OVER()
有时候不用的指标的绝对值不能比,但是转转为百分比的形式就容易看出波动了,是数据分析的好用的一个分析函数 20:00:24 SYS@orcl> conn scott/tiger; Connecte ...
- ajax请求体
jquery向服务器发送一个ajax请求后,可以返回多种类型的数据格式,包括:html,xml,json,text等. $.ajax({ url:"http://www.test.com&q ...
- django环境搭建(基于anaconda环境)
环境:win7,anaconda,python3.5 1.介绍 Django特点:具有完整的封装,开发者可以高效率的开发项目,Django将大部分的功能进行了封装,开发者只需要调用即可,如此,大大的缩 ...
- PacMan 03——追踪玩家
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- httprunner学习25-文件上传multipart/form-data
前言 httprunner上传文件接口,其实跟requests上传文件的接口是一样的,之前在python接口系列里面有案例 python接口自动化16-multipart/form-data上传图片 ...
- LOJ 3160: 「NOI2019」斗主地
题目传送门:LOJ #3160. 简要题意: 有一个长度为 \(n\) 的序列 \(a\),初始时 \(a_i=i\) 或 \(a_i=i^2\),这取决于 \(\mathrm{type}\) 的值. ...
- Navicat Premium 12 永久使用办法
1.按步骤安装Navicat Premium,如果没有可以去官网下载:http://www.navicat.com.cn/download/navicat-premium 2.安装好后下载激活文件:h ...
- 201671010449 杨天超 实验十四 团队项目评审&课程学习总结
项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 作业学习目标 1.掌握软件评审流程及内容 2.个人总结 实验一问题解答 实验一问题链接:https://ww ...
- js数组详解,js数组操作
转自 http://www.cnblogs.com/qiantuwuliang/archive/2011/01/08/1930499.html 1.数组的创建 var arrayObj = new A ...
- FFT和NTT学习笔记_基础
FFT和NTT学习笔记 算法导论 参考(贺) http://picks.logdown.com/posts/177631-fast-fourier-transform https://blog.csd ...