【1.26】作用域
1、作用域
name = “alex” def foo(): name = “linhaifeng” def bar(): name =“wupeiqi” print(name) return bar #返回函数的bar的内存地址 a=foo() print a a() #bar() 这里就是函数地址加( ) 表示执行bar这个函数
2、块级作用域 python中没有这个
块级作用域
想想此时运行下面的程序会有输出吗?执行会成功吗?
#块级作用域
if 1 == 1:
name = "lzl"
print(name)
for i in range(10):
age = i
print(age)
代码执行成功,没有问题;在Java/C#中,执行上面的代码会提示name,age没有定义,而在Python中可以执行成功,这是因为在Python中是没有块级作用域的,代码块里的变量,外部可以调用,所以可运行成功;
3、
3、作用域链 爷爷 爸爸 儿子 孙子 一级一级找 少那个都得不到孙子
对函数做下调整,看看下面的代码执行结果如何?
#作用域链
name = "lzl"
def f1():
name = "Eric"
def f2():
name = "Snor"
print(name)
f2()
f1()
学过函数,肯定知道最后f1()执行完会输出Snor;
我们先记住一个概念,Python中有作用域链,
变量会由内到外找,先去自己作用域去找,
自己没有再去上级去找,直到找不到报错
4、终极版作用域 函数体定义完成后 其变量的作用域就形成了 记住函数也是一个变量
好,铺垫了够了,终极版的来了~~
#终极版作用域
name = "lzl"
def f1():
print(name)
def f2():
name = "eric"
f1()
f2()
浙公网安备 33010602011771号