栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python作用域

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/221464.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号