博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈python中的全局变量和局部变量~
阅读量:2440 次
发布时间:2019-05-10

本文共 1107 字,大约阅读时间需要 3 分钟。

在被调用函数内赋值的变元和变量,处于该函数的“局部作用域”。在所有函数之外赋值的变量,属于“全局作用域”。处于局部作用域的变量,被称为“局部变量”。处于全局作用域的变量,被称为“全局变量”。一个变量必是其中一种,不能既是局部的又是全局的。

可以将“作用域”看成是变量的容器。当作用域被销毁时,所有保存在该作用域内的变量的值就被丢弃了。只有一个全局作用域,它是在程序开始时创建的。如果程序终止,全局作用域就被销毁,它的所有变量就被丢弃了。否则,下次你运行程序的时候,这些变量就会记住它们上次运行时的值。一个函数被调用时,就创建了一个局部作用域。在这个函数内赋值的所有变量,存在于该局部作用域内。该函数返回时,这个局部作用域就被销毁了,这些变量就丢失了。下次调用这个函数,局部变量不会记得该函数上次被调用时它们保存的值。
作用域很重要,理由如下:

  • 全局作用域中的代码不能使用任何局部变量;
  • 但是,局部作用域可以访问全局变量;
  • 一个函数的局部作用域中的代码,不能使用其他局部作用域中的变量。
  • 如果在不同的作用域中,你可以用相同的名字命名不同的变量。也就是说,可以有一个名为spam 的局部变量,和一个名为spam 的全局变量。(不建议)

全局变量不能引用局部作用域的变量。

import sys, randomdef spam():    egg = 123spam()print(egg)'''egg是spam函数的局部变量,调用完后就销毁了。所以会报错。Traceback (most recent call last):  File "py\dz.py", line 25, in 
print(egg)NameError: name 'egg' is not defined'''

局部作用域不能使用其他局部作用域的局部变量。

def spam():    egg = 99    bacon()    print(egg)def bacon():    ham = 101    egg = 0spam()#输出99

全局变量可以在局部作用域中读取。

def spam():    print(egg)egg = 42    #全局变量spam()print(egg)#输出42 42

使用global语句让局部作用域对全局变量进行写的操作。

(不用global而直接在局部作用域对全局变量进行写的操作会报错)

def spam():    global egg    egg = 'spam'egg = 'global'spam()print(egg)    #输出spam

完毕!

转载地址:http://wefqb.baihongyu.com/

你可能感兴趣的文章
人月神话读书笔记(二) (转)
查看>>
附录 UML元模 (转)
查看>>
Microsoft Office XP 智能标记的安装和安全性 (转)
查看>>
A Brief Look at C++ 中文版 (转)
查看>>
JBuilder Editor中光标不能正确定位问题的解决 (转)
查看>>
XML加ASP实现网页“本地化” (转)
查看>>
Java中的异步网络编程 (转)
查看>>
用于核心模式驱动程序的网络体系结构(1) (转)
查看>>
More Effective C++ 条款20 (转)
查看>>
一个程序员的爱恋 (转)
查看>>
足球战术->边锋之Decorator篇 (转)
查看>>
编写优质无错代码(1) (转)
查看>>
MySQL 4.1.0 中文参考手册 --- 6.3 用于 SELECT 和 WHERE 子句的函数 (1) (转)
查看>>
vs.net beta 2中利用DataGrid分页详解 (转)
查看>>
Process-Display-Process (PDP) pattern (转)
查看>>
基于构件复用的软件方法与COM支持 (转)
查看>>
DELPHI中使用API函数详解 (转)
查看>>
Single Entry Point to EJB Layer (转)
查看>>
InsideJVM(3)--Method area(方法区) (转)
查看>>
中文版Windows XP 的新增功能(转)
查看>>