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,会怎么样呢?

本篇主要讲述函数对程序中变量的作用问题,涉及组合数据类型,后期会持续更新讲解。

最新文章

  1. [示例] Firemonkey OnTouch 多点触控应用
  2. js前台加密,java后台解密实现
  3. MVC过滤器详解
  4. Javascript起源...
  5. memcached学习笔记6--浅谈memcached的机制 以及 memcached细节讨论
  6. fancybox 关闭弹出窗口 parent.$.fancybox.close(); 无反应 fancybox 关闭弹出窗口父页面自动刷新,弹出子窗口前后事件
  7. Spring Autowiring by Type
  8. 条形码--JsBarcode
  9. php实现批量修改文件名称
  10. Python 关于super 的 用法和原理(挖坑)
  11. linux设置系统时间
  12. Beta冲刺 (5/7)
  13. 77 Linux commands and utilities you&#39;ll actually use
  14. Android:Camera
  15. XXS level3
  16. Java以UTF-8编码读写文件
  17. POJ-2181 Jumping Cows(贪心)
  18. form action中如何填写相对目录
  19. 131. Palindrome Partitioning (Back-Track, DP)
  20. Android开发第二阶段(4)

热门文章

  1. js 数组 添加或删除 元素 splice 创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素 filter
  2. 《linux就该这么学》课堂笔记15 vsftpd文件传输、Samba/NFS文件共享
  3. 04、rpm+yum+tar解压
  4. 使用aptitude安装软件
  5. 常用dos命令(2)
  6. Codeforces Round #606 (Div. 2) E - Two Fairs(DFS,反向思维)
  7. es4x 引用外部jar 包以及集成typescrip
  8. ESA2GJK1DH1K基础篇: Android连接MQTT简单的Demo
  9. selenium--拖拽页面元素
  10. 10-排序5 PAT Judge (25 分)