python 局部变量和全局变量 global介绍

什么是全局变量和局部变量

在函数外,一段代码最始开所赋值的变量,它可以被多个函数引用,这就是全局变量;
在函数内定义的变量名,只能被函数内部引用,不能在函数外引用这个变量名,这个变量的作用域就是局部的,也叫它为局部变量;

如果函数内的变量名与函数外的变量名相同,也不会发生冲突。好比下面这种情况:

x = 100

def func():
    x = 55
x = 100这个赋值语句所创建的变量X,作用域为全局变量;

x = 55这个赋值语句所创建的变量X,它的作用域则为局部变量,只能在函数func()内使用。

尽管这两个变量名是相同的,但它的作用域为它们做了区分。作用域在某种程度上也可以起到防止程序中变量名冲突的作用,但如果做为玩蛇网python初学者来说,尽量避免这种情况发生比较好。

使用局部变量

例7.3 使用局部变量

#!/usr/bin/Python
# Filename: func_local.py

def func(x):
    print 'x is', x
    x = 2
    print 'Changed local x to', x

x = 50
func(x)
print 'x is still', x

(源文件:code/func_local.py)

输出

$ python func_local.py
x is 50
Changed local x to 2
x is still 50

它如何工作

在函数中,我们第一次使用x的 值 的时候,Python使用函数声明的形参的值。

接下来,我们把值2赋给x。x是函数的局部变量。所以,当我们在函数内改变x的值的时候,在主块中定义的x不受影响。

在最后一个print语句中,我们证明了主块中的x的值确实没有受到影响。

使用global语句

如果你想要为一个定义在函数外的变量赋值,那么你就得告诉Python这个变量名不是局部的,而是 全局 的。我们使用global语句完成这一功能。没有global语句,是不可能为定义在函数外的变量赋值的。

你可以使用定义在函数外的变量的值(假设在函数内没有同名的变量)。然而,我并不鼓励你这样做,并且你应该尽量避免这样做,因为这使得程序的读者会不清楚这个变量是在哪里定义的。使用global语句可以清楚地表明变量是在外面的块定义的。

例7.4 使用global语句

#!/usr/bin/python
# Filename: func_global.py

def func():
    global x

    print 'x is', x
    x = 2
    print 'Changed local x to', x

x = 50
func()
print 'Value of x is', x

(源文件:code/func_global.py)

输出

$ python func_global.py
x is 50
Changed global x to 2
Value of x is 2

它如何工作

global语句被用来声明x是全局的——因此,当我们在函数内把值赋给x的时候,这个变化也反映在我们在主块中使用x的值的时候。

你可以使用同一个global语句指定多个全局变量。例如global x, y, z。

总结

1、变量的作用域由代码被赋值的位置所决定
2、变量可以在3个不同地方,对应3种不同作用域:
(一)一个变量在函数内赋值,它的作用范围被定位在函数之内
(二)当变量是在一个嵌套的函数中赋值时,对于这个嵌套的函数来说,这个变量是非本地的
(三)变量在函数外赋值,它作用域就是当前整个文件的全局变量
(四)如果要在函数中给全局变量赋值,需要用global关键字声明。

时间: 2024-10-29 00:08:28

python 局部变量和全局变量 global介绍的相关文章

[Python学习] 专题六.局部变量、全局变量global、导入模块变量

        定义在函数内的变量有局部作用域,在一个模块中最高级别的变量有全局作用域.本文主要讲述全局变量.局部变量和导入模块变量的方法.         参考:<Python核心编程 (第二版)> 一. 局部变量         声明适用的程序的范围被称为了声明的作用域.在一个过程中,如果名字在过程的声明之内,它的出现即为过程的局部变量:否则出现即为非局部.例: def foo(x): print 'x = ',x x = 200 print 'Changed in foo(), x =

python中的全局变量用法分析

 本文实例分析了python中的全局变量用法.分享给大家供大家参考.具体分析如下: Python是一种面向对象的开发语言,在函数中使用全局变量,一般应作全局变量说明,只有在函数内经过说明的全局变量才能使用,这里就来介绍下Python全局变量有关问题. 首先应该说明的是需要尽量避免使用Python全局变量.不同的模块都可以自由的访问全局变量,可能会导致全局变量的不可预知性.对全局变量,如果程序员甲修改了_a的值,这时可能导致程序中的错误.这种错误是很难发现和更正的. 全局变量降低了函数或模块之间的

深入理解C++编程中的局部变量和全局变量_C 语言

局部变量 在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它们,在此函数以外是不能使用这些变量的.同样,在复合语句中定义的变量只在本复合语句范围内有效.这称为局部变量(local variable).如: 对局部变量的一些说明: 1) 主函数main中定义的变量(m, n)也只在主函数中有效,不会因为在主函数中定义而在整个文件或程序中有效.主函数也不能使用其他函数中定义的变量. 2) 不同函数中可以使用同名的变量,它们代表不同的对象,互不干扰.例如,在f

php多次include后导致全局变量global失效的解决方法

这篇文章主要介绍了php多次include后导致全局变量global失效的解决方法,实例分析了$GLOBALS失效的原理与解决方法,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了php多次include后导致全局变量global失效的解决方法.分享给大家供大家参考.具体分析如下: 在多个文件中,文件一个接一个include,但最后一个文件里的函数使用global后却无法引用全局变量.例如: a.php文件: ? 1 2 3 <?php $aa = 1; ?> b.php文件

C语言中局部变量与全局变量在内存中的存放位置

C语言中局部变量和全局变量变量的存储类别(static,extern,auto,register) 1----局部变量和全局变量 在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放.这一点表明形参变量只有在函数内才是有效的,离开该函数就不能再使用了.这种变量有效性的范围称变量的作用域.不仅对于形参变量,C语言中所有的量都有自己的作用域.变量说明的方式不同,其作用域也不同.C语言中的变量,按作用域范围可分为两种,即局部变量和全局变量. 1.1局部变量 局部变量也

javascript中局部变量和全局变量的区别详解_javascript技巧

javascript有两种变量:局部变量和全局变量.当然,我们这篇文章是帮助大家真正的区别这两种变量. 首先,局部变量是指只能在本变量声明的函数内部调用.全局变量时整个代码中都可以调用的变量.当然,单单从字面上理解肯定是不清楚的,下面我详细的介绍下: 大家都知道,变量是需要用var关键字声明的.但是javascript中也可以隐式的使用变量,就是不用声明,直接使用.而且,千万注意,javascript把隐式声明的变量总是当成全局变量来使用的. 例如: 复制代码 代码如下: function my

深入探讨C语言中局部变量与全局变量在内存中的存放位置_C 语言

C语言中局部变量和全局变量变量的存储类别(static,extern,auto,register) 1.局部变量和全局变量在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放.这一点表明形参变量只有在函数内才是有效的,离开该函数就不能再使用了.这种变量有效性的范围称变量的作用域.不仅对于形参变量,C语言中所有的量都有自己的作用域.变量说明的方式不同,其作用域也不同.C语言中的变量,按作用域范围可分为两种,即局部变量和全局变量.1.1局部变量局部变量也称为内部变量

var-js局部变量改变全局变量

问题描述 js局部变量改变全局变量 <!doctype html> <html> <head> <script src="http://code.jquery.com/jquery-latest.js"></script> <script> $(function(){ var numb=1; $(".choose-more a").click(function(){ alert(numb); n

Python中字符串对齐方法介绍

  这篇文章主要介绍了Python中字符串对齐方法介绍,本文介绍Python字符串内置方法ljust.rjust.center的用法,需要的朋友可以参考下 目的 实现字符串的左对齐,右对齐,居中对齐. 方法 字符串内置了以下方法:其中width是指包含字符串S在内的宽度,fillchar默认是空格,也可以指定填充字符 代码如下: string.ljust(s, width[, fillchar]) string.rjust(s, width[, fillchar]) string.center(