Python的作用域

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()

猜你喜欢

转载自blog.csdn.net/jason_cuijiahui/article/details/80335606
今日推荐