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

发布网友 发布时间:2022-03-26 02:18

我来回答

2个回答

懂视网 时间:2022-03-26 06:39

在Python程序中创建、改变、查找变量名时,都是在一个保存变量名的空间中进行,而这个空间被称之为作用域。

  

  Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本shell,随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。自从20世纪90年代初Python语言诞生至今,它已被逐渐广泛应用于系统管理任务的处理和Web编程。

  

  

热心网友 时间:2022-03-26 03:47

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