鱼C论坛

 找回密码
 立即注册
查看: 2781|回复: 5

[已解决]python问题求助

[复制链接]
发表于 2016-5-15 10:38:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
A:def outside():
    var = 5
    def inside():
        var = 3
        print(var)
        
    inside()

outside()



B:def outside():
    var = 5
    def inside():
        print(var)
        var = 3
        
    inside()
outside()

我不太理解这个var = 3在print上面和下面有什么区别呢,不是都在inside这个内嵌函数里么,没看明白,求大神解答
最佳答案
2016-5-15 12:40:30
函数变量作用域的问题,python的命名空间遵循LEGB原则,也就说当执行代码遇到一个变量时,是按LEGB的原则来查找变量的,关于LEGB含义解释:
L-Local(function);函数内的名字空间(也就是函数本身)
E-Enclosing function locals;外部嵌套函数的名字空间(闭包函数)
G-Global(module);函数定义所在模块(文件)的名字空间(也就是我们常说的全局变量)
B-Builtin(Python);Python内置模块的名字空间(也就是__builtins__中的)
明白了这个原则,再来看你的代码B中,L中查找var没有(因为定义再print后面),就会再E中找,找到了,打印出5
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-5-15 11:31:52 | 显示全部楼层
Python是从上往下运行的,当var在print下面时,Python就会无法找到var而报错,所以只能放到print上面
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-15 12:40:30 | 显示全部楼层    本楼为最佳答案   
函数变量作用域的问题,python的命名空间遵循LEGB原则,也就说当执行代码遇到一个变量时,是按LEGB的原则来查找变量的,关于LEGB含义解释:
L-Local(function);函数内的名字空间(也就是函数本身)
E-Enclosing function locals;外部嵌套函数的名字空间(闭包函数)
G-Global(module);函数定义所在模块(文件)的名字空间(也就是我们常说的全局变量)
B-Builtin(Python);Python内置模块的名字空间(也就是__builtins__中的)
明白了这个原则,再来看你的代码B中,L中查找var没有(因为定义再print后面),就会再E中找,找到了,打印出5
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-5-15 15:01:30 | 显示全部楼层
挥舞乾坤 发表于 2016-5-15 12:40
函数变量作用域的问题,python的命名空间遵循LEGB原则,也就说当执行代码遇到一个变量时,是按LEGB的原则来查 ...

def......print()就说明这个函数已经结束了,是吧?这时候我再在print后面定义变量的话就和此时这个def定义的函数无关了,那我想问一下在print之后定义这个var有什么用呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-15 17:33:18 | 显示全部楼层
Josepy 发表于 2016-5-15 15:01
def......print()就说明这个函数已经结束了,是吧?这时候我再在print后面定义变量的话就和此时这个def定 ...

函数是否结束,要看缩进,函数B并不是print()就结束了后面的var = 3,也在函数内,整个代码就是想说明作用域的问题吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-15 18:32:05 | 显示全部楼层
挥舞乾坤 发表于 2016-5-15 17:33
函数是否结束,要看缩进,函数B并不是print()就结束了后面的var = 3,也在函数内,整个代码就是想说明作用域 ...

是的,也就是说var=3没有实际意义的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-21 02:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表