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用了一些不优雅的方法实现了这功能
- nonlocal不能用在if/else以及for循环,需要引用函数外面的东西才能用。
- nonlocal与global只是一个声明,声明的变量是要一早已经存在的。
- 作用域
先看一个例子:
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()
上一篇: 秋招笔试题目
下一篇: 前端面试题整理(1)