欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python的作用域

程序员文章站 2022-06-09 09:46:18
...

Python这种语言就是写起来爽得很,调起来乱七八糟。

重点

python引用变量的顺序:
当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量

注意点

a) if/else, for, while的内部定义的变量,外部也可以引用

if 1 == 1:
    name = "lzl"
print(name) # lzl
for i in range(10):
    age = i
print(age) # 9

b) 函数内部定义的变量是相互独立的

def  func():
    name = "lzl"
print(name) # 报错
def  func():
    name = "lzl"
func()          #执行函数
print(name)     #报错
name = "lzl"     
def f1():
    print(name)
def f2():
    name = "eric"
    f1()
f2() # lzl

nonlocal & global关键字

这两个关键字只有在python3中才有,而python2用了一些不优雅的方法实现了这功能

  1. nonlocal不能用在if/else以及for循环,需要引用函数外面的东西才能用。
  2. nonlocal与global只是一个声明,声明的变量是要一早已经存在的
  3. 作用域

先看一个例子:

python是以数据为主体的,而非变量为主体的

x = 5
print(id(x))
for i in range(2):
    x -= 1
    print(id(x))
print x
print (id(x))
77554760
77554784
77554808
3
77554808

nonlocal

def outer():  
    num = 10  
    def inner():  
        nonlocal num   # nonlocal关键字声明  
        num = 100  
        print(num)  
    inner()  
    print(num)  
100
100

global

下面代码会报错:

gcount = 0

def global_test():
    gcount+=1
    print (gcount)
global_test()

正确写法:

gcount = 0

def global_test():
    global  gcount
    gcount+=1
    print (gcount)
global_test()

注意下面代码不会报错(因为没有修改gcount的值):

gcount = 0

def global_test():
    print (gcount)
global_test()
相关标签: python 2018