美文网首页
python局部作用域和全局作用域

python局部作用域和全局作用域

作者: 猛犸象和剑齿虎 | 来源:发表于2019-08-11 16:29 被阅读0次

在被调用函数内部赋值的变量,处于该函数的局部作用域,函数之外的变量,属于全局作用域。函数内部的变量就是局部变量,函数之外的变量称为全局变量。

  • 全局作用域中的代码不能使用局部变量
  • 局部作用域可以访问全局变量
  • 一个函数内部的代码,不能使用其他函数中的变量
  • 在不同的作用域中可以用相同的名字命名变量
  • 在小程序中使用全局变量没有大的问题,但当程序变得越来越大时,依赖全局变量是一个坏习惯。

局部变量不能在全局变量中使用

def spam():
    eggs=31337
spam()
print(eggs)

结果

    print(eggs)
NameError: name 'eggs' is not defined

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

def spam():
    eggs=99
    bacon()
    print(eggs)

def bacon():
    ham=101
    eggs=0
    print(ham)
spam()

结果:

101
99

一个函数虽然可以调用其他函数,但对其中的变量并不能调用。也就是说局部变量在被其他函数调用时会销毁。

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

def spam():
    print(eggs)
eggs=42
spam()

结果

42

名称相同的局部变量和全局变量

原则上应当避免局部变量和全局变量或者其他作用域的变量同名。但在技术上局部变量和全局变量同名是合法的。

def spam():
    eggs="张三"
    print(eggs)
def bacon():
    eggs="李四"
    print(eggs)
    spam()
eggs="王五"
bacon()
print(eggs)

结果

李四
张三
王五

局部作用域内部有变量时,优先调用自身,全局作用域不能调用局部作用域的变量。

global语句

如果想在全局作用域调用局部变量,那么在函数内部使用global语句。

def spam():
    global eggs
    eggs="张三"
eggs='李四'
spam()
print(eggs)

结果:

张三

使用global语句将局部变量声明成全局变量,当然编程执行原则是自上而下,顺序执行,所以打印出张三,而不是李四。如果将eggs='李四'放在spam()函数调用之后,结果将输出李四。

函数作为黑盒。通常对于一个函数,只要知道它的输入值和输出值就行,并非总是需要弄清楚函数代码是怎样工作的。以这种高层的方式思考函数,通常来说,将函数看成一个黑盒。而且在编写函数时不使用全局变量,通常也不必担心函数代码与其他程序发生交叉影响。

相关文章

  • node.js小记 (0419) http源码解读

    什么是作用域? 作用域分局部作用域和全局作用域,同时作用域和变量有关,在局部作用域内可以访问到全局变量,在局部作用...

  • js作用域

    1 - 作用域 1.1 作用域概述 全局作用域 局部作用域(函数作用域) 1.2 全局作用域 1.3 局部作用域 ...

  • 作用域,作用域链

    1 - 作用域 1.1 作用域概述 全局作用域 局部作用域(函数作用域) 1.2 全局作用域 1.3 局部作用域 ...

  • 5-3 变量作用域

    在Python中,作用域可以分为: 内置作用域:Python预先定义的 全局作用域:所编写的整个程序 局部作用域:...

  • Python3 关键字global和nonlocal的用法与区别

    关键字global Python里只有2种作用域:全局作用域和局部作用域。全局作用域是指当前代码所在模块的作用域,...

  • JS作用域链

    一、作用域 在JavaScript中,变量的作用域有全局作用域和局部作用域两种,局部作用域又称为函数作用域。 全局...

  • JavaScript作用域分类

    JavaScript作用域分类全局作用域局部作用域函数作用域块级作用域catchwithlet 和 const 什...

  • JS基础---05作用域

    JavaScript基础 1 - 作用域 1.1 作用域概述 全局作用域 局部作用域(函数作用域) 1.2 全局作...

  • 作用域链

    1.作用域 作用域分为全局作用域和局部作用域。 1)全局作用域 可以在代码的所有地方被访问到。 2)局部作用域 只...

  • 7.python装饰器

    一、装饰器 在python中,作用域分为两种:全局作用域和局部作用域。 全局作用域是定义在文件级别的变量,函数名。...

网友评论

      本文标题:python局部作用域和全局作用域

      本文链接:https://www.haomeiwen.com/subject/hvbrjctx.html