在Python中将列表定义为全局变量

发布于 2021-01-29 18:15:07

我正在使用列表,其中列出了我的程序中的某些功能。这实际上是一个共享列表,我的所有功能都可以对其进行编辑。在所有功能中是否真的有必要将其定义为“全局”?

我的意思是在使用它的每个函数中放置global关键字,还是在所有函数之外定义它就足够了,而无需在其定义后面使用global字?

关注者
0
被浏览
170
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    分配变量(x = ...)时,将在当前作用域(例如,当前函数的本地范围)中创建一个变量。如果它恰好在外部(例如全局)范围内隐藏了变量,那就太糟糕了-
    Python不在乎(这是一件好事)。所以你不能这样做:

    x = 0
    def f():
        x = 1
    f()
    print x #=>0
    

    并期待1。相反,您需要声明您打算使用global x

    x = 0
    def f():
        global x
        x = 1
    f()
    print x #=>1
    

    但是请注意,变量的分配与方法调用有很大不同。您始终可以在范围内的任何对象上调用方法,例如,对来自外部(例如,全局)范围的变量进行调用,因为没有局部阴影可以覆盖它们。

    同样 非常 重要:成员分配(x.name = ...),项目分配(collection[key] = ...),切片分配(sliceable[start:end] = ...)以及更多的方法调用同样都是方法!因此,您无需global更改全局成员或调用它的方法(即使当它们使对象发生突变时)。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看