发布网友 发布时间: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 可以自己百度
关于作用域给你再写个简单的示例, 你对照着理解一下