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

2019-08-11  本文已影响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()函数调用之后,结果将输出李四。

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

上一篇 下一篇

猜你喜欢

热点阅读