为了账号安全,请及时绑定邮箱和手机立即绑定

python作用域

标签:
Python

块级作用域??

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

java中是不可以执行成功的但是在python中可以执行成功,,这是因为在Python中是没有块级作用域的,代码块里的变量,外部可以调用,所以可运行成功;

函数局部作用域

def  func():
    name = "zxt"
 print(name)

name 'name' is not defined

name变量只在func()函数内部中生效,所以在全局中是没法调用的;

作用域误区

name = "lzl"
 def f1():
    print(name) 
def f2():
    name = "eric"
    f1()
 
f2()
lzl

我们都知道,Python中有作用域链,变量会由内到外找,先去自己作用域去找,自己没有再去上级去找,直到找不到报错
类似于下面的规则

#作用域链
 name = "lzl"def f1():
    name = "Eric"
    def f2():
        name = "Snor"
        print(name)
    f2()
f1()

我们再看一个代码

 name = "lzl"
 def f1():
    print(name) 
def f2():
    name = "eric"
    return f1
 
ret = f2()
ret()
lzl

f2()执行结果为函数f1的内存地址,即ret=f1;执行ret()等同于执行f1(),执行f1()时与f2()没有任何关系.

静态作用域

i = 1def g():
    a = i
    a = a + 3
    print(i,a)
    
g()1

发现i可以找到全局变量
但是

i = 1def g():
    i = i + 1
    a = a + 3
    print(i,a)
    
g()
local variable 'i' referenced before assignment

无法找到全局的i,原因是Python是静态作用域(词法作用域),因此在编译阶段,就决定了变量的读取方式。



作者:张晓天a
链接:https://www.jianshu.com/p/20ff1f180762


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消