问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Python 中作用域与命名空间的问题?

发布网友 发布时间:2022-04-24 03:04

我来回答

1个回答

热心网友 时间:2022-04-18 04:59

i=2 这一句 是定义了一个局部变量i, 并赋值为2;  这个时候全局作用域的i会被屏蔽, 所以全局变量i是没有被修改的 所以结果是1;


访问全局变量时可以直接访问, 但是修改全局作用域的时候一定要在赋值之前,进行如下声明:

def f():

    global i


    i = 2


因为python里赋值语句和声明变量是一个体的, 所以需要global来告诉解释器i是全局变量, 接下来的i=2才能被当作是赋值

------------------追答---------------------

同一个代码块(作用域)里, 同一个变量的作用域只能是同一种或者说同一个变量只能来自同一个作用域, 不能是一会是局部变量然后又变成全局变量;

i = i + 1

首先前面的'i='表明了i是一个局部变量(没有global声明, 创建局部变量), 然后后面的'i+1'里的i自然也是局部变量(同一个函数下同一个变量,i已经是局部变量了, 不能再当作全局变量去用), 那么自然会报错, i在使用前未声明

i += 1

报错就更明显了, 没有global声明 那么再修改变量i的时候, 自然是当作局部变量, 使用前未声明

变量的查找顺序遵循 LEGB 可以自己百度 

关于作用域给你再写个简单的示例, 你对照着理解一下

追问非常感谢您的解惑,我还有一个问题向您请教:
在函数g()中,print(i)此时变量i取全局变量i中的值1,但是如果在print(i)前添加语句i=i+1,此时执行会报错:局部变量i没有被定义。我的疑问是:为什么执行i+=1时,局部变量i不会取全局变量i的值1来进行i+=1的操作,而是直接报局部变量i没有被定义的异常。
def g():
print(i)

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 养宠物的人遵守规则,是不是就能和别人平安相处呢? 企业培训学到了什么 培训感悟简短 有关培训的感悟 通过培训学到什么 培训你学到了什么 领导问培训学到什么怎么回复 python中的本地变量(local variable)和全局变量(global variable)分 ... Python类里面设置全局变量有什么用吗? Python命名空间和全局变量问题,怎么解决 python中全局变量和局部变量 python 全局变量怎么用 自动化测试时需要使用python,请问如何理解python中的全局变量和局部变量... python实现跨文件全局变量的方法 求Python中全局变量的详细理解? python中局部变量和全局变量的区别 python中如何设置全局变量 python中的全局变量 如何设置咋设置页面A4纸 对全文进行页面设置,设置每行字符数为36个,每页为40行。 如何设置页面对齐 如何进行页面设置 糖果蛋糕不及你的甜这句话是什么意思 德国有一种糖果,褐色,看起来像巧克力,吃起来像软糖。最恶心的是,它是八角味的!这是什么糖哪位高人能 烘焙、糕点及糖果食用原料配料要如何买呢? 小明有饼开,糖果,蛋糕三份礼物,要分别给他的爸爸,妈妈,有多少种不同的给法?请写一写 woogie水果糖和嘉云糖一样吗 如何在python程序中使用os.system中调用全局变量? python class里面的全局变量问题 Python怎么包含一个存储整型数据的全局变量x python中在哪些情况下必须使用global来声明全局变量 华为账号密码忘了怎么改? 怎么改华为账号密码 华为账号怎么修改密码? 如何修改华为帐号密码 华为账号怎样改密码 账号密码忘了,手机号也注销了怎么办,我该怎么改华为账号 华为nova7pro怎么更改华为账号密码? 华为手机怎样更改密码 华为手机忘记了密码怎么更改华为帐号 怎样可以更改自己手机华为手机的账号还有密码? 为什么华为账号密码修改后,另一台手机还能照常使用? 怎么修改华为帐号密码? 如何修改华为账户密码 0N表示关,OFF表示开吗 OFF是开是关 雷柏8130+ 鼠标开关那个字母是开